Java 8-dən Sonrakı Yeni Xüsusiyyətlər
Java 8 (2014) - LTS
Lambda İfadələri
// Əvvəl
Runnable r1 = new Runnable() {
public void run() { System.out.println("Hello"); }
};
// İndi
Runnable r2 = () -> System.out.println("Hello");
Stream API
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
Optional Class
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(System.out::println);
String value = optional.orElse("Default");
Default Methods
interface Vehicle {
default void start() {
System.out.println("Starting engine...");
}
}
Date/Time API
LocalDate today = LocalDate.now();
LocalDateTime now = LocalDateTime.now();
ZonedDateTime zoned = ZonedDateTime.now();
Java 9 (2017)
Module System (Project Jigsaw)
// module-info.java
module com.example.myapp {
requires java.base;
exports com.example.myapp.api;
}
Factory Methods for Collections
List<String> list = List.of("A", "B", "C");
Set<Integer> set = Set.of(1, 2, 3);
Map<String, Integer> map = Map.of("key1", 1, "key2", 2);
Try-with-resources Enhancement
// Java 9
FileInputStream fis = new FileInputStream("file.txt");
try (fis) {
// istifadə et
}
Private Methods in Interfaces
interface MyInterface {
default void method1() {
commonLogic();
}
private void commonLogic() {
System.out.println("Common logic");
}
}
Java 10 (2018)
Local Variable Type Inference (var)
var list = new ArrayList<String>();
var map = new HashMap<String, Integer>();
var str = "Hello World";
// for loop-da
for (var item : list) {
System.out.println(item);
}
Application Class-Data Sharing
CDS performansı artırır.
Java 11 (2018) - LTS
String Methods
String str = " Hello World ";
System.out.println(str.strip()); // "Hello World"
System.out.println(str.isBlank()); // false
System.out.println("".isBlank()); // true
String multiline = "Line1\nLine2\nLine3";
multiline.lines().forEach(System.out::println);
String repeated = "Java ".repeat(3); // "Java Java Java "
HTTP Client API
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com"))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
Running Single-File Programs
java HelloWorld.java # No compilation needed
Java 12 (2019)
Switch Expressions (Preview)
// Old style
String day = "MONDAY";
int numLetters;
switch (day) {
case "MONDAY":
case "FRIDAY":
case "SUNDAY":
numLetters = 6;
break;
default:
numLetters = 0;
}
// New style
int numLetters = switch (day) {
case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
case "TUESDAY" -> 7;
default -> 0;
};
Java 13 (2019)
Text Blocks (Preview)
// Old
String html = "<html>\n" +
" <body>\n" +
" <p>Hello World</p>\n" +
" </body>\n" +
"</html>";
// New
String html = """
<html>
<body>
<p>Hello World</p>
</body>
</html>
""";
Java 14 (2020)
Switch Expressions (Standard)
Switch expressions artıq preview deyil.
Pattern Matching for instanceof (Preview)
// Old
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.length());
}
// New
if (obj instanceof String s) {
System.out.println(s.length());
}
Records (Preview)
public record Person(String name, int age) {
// Automatically generates:
// - constructor
// - getters (name(), age())
// - equals(), hashCode(), toString()
}
Person person = new Person("Ali", 25);
System.out.println(person.name()); // Ali
Java 15 (2020)
Text Blocks (Standard)
Sealed Classes (Preview)
public sealed class Shape
permits Circle, Rectangle, Triangle {
}
public final class Circle extends Shape { }
public final class Rectangle extends Shape { }
public final class Triangle extends Shape { }
Java 16 (2021)
Pattern Matching for instanceof (Standard)
Records (Standard)
Java 17 (2021) - LTS
Sealed Classes (Standard)
Enhanced Pseudo-Random Number Generators
RandomGenerator generator = RandomGenerator.of("Xoroshiro128PlusPlus");
int randomInt = generator.nextInt();
Java 18 (2022)
Simple Web Server
jwebserver -p 8080 -d /path/to/directory
UTF-8 by Default
UTF-8 default charset oldu.
Java 19 (2022)
Virtual Threads (Preview)
Thread.ofVirtual().start(() -> {
System.out.println("Virtual thread");
});
// ExecutorService ilə
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> {
System.out.println("Task in virtual thread");
});
}
Pattern Matching for switch (Preview)
String result = switch (obj) {
case Integer i -> "Integer: " + i;
case String s -> "String: " + s;
case null -> "null value";
default -> "Unknown type";
};
Java 20 (2023)
Scoped Values (Incubator)
Thread-local variables-ın yaxşılaşdırılmış versiyası.
Java 21 (2023) - LTS
Virtual Threads (Standard)
Pattern Matching for switch (Standard)
Sequenced Collections
// SequencedCollection interface
List<String> list = new ArrayList<>();
String first = list.getFirst();
String last = list.getLast();
list.addFirst("first");
list.addLast("last");
Tövsiyələr
LTS Versiyaları
- Java 8 (2014) - Hələ də geniş istifadə olunur
- Java 11 (2018) - Məsləhət görülür
- Java 17 (2021) - Ən yeni LTS
- Java 21 (2023) - Ən son LTS
Migration Strategy
- Java 8 → 11: Module system, HTTP client
- Java 11 → 17: Records, sealed classes, text blocks
- Java 17 → 21: Virtual threads, pattern matching
Performance İmprovement
Hər versiyada JVM performansı yaxşılaşır:
- Garbage Collection təkmilləşmələri
- JIT Compiler optimallaşdırmaları
- Memory istifadəsinin azaldılması
- Startup time yaxşılaşdırılması