Eğitim Portalı/Java/Java 11 Yenilikleri (2018, LTS)
Java01-java/57-java11-yenilikleri

Java 11 Yenilikleri (2018, LTS)

Java 11, Java 8'den sonra ikinci büyük LTS sürümüdür ve uzun yıllar üretimde en yaygın taban oldu. Çok sayıda günlük kolaylık getirdi: yeni String metotları, standart HttpClient, dosya G/Ç kısayolları, lambda'da var v…

Java 11 Yenilikleri (2018, LTS)

Java 11, Java 8'den sonra ikinci büyük LTS sürümüdür ve uzun yıllar üretimde en yaygın taban oldu. Çok sayıda günlük kolaylık getirdi: yeni String metotları, standart HttpClient, dosya G/Ç kısayolları, lambda'da var ve — bu portalın çalışma temeli olan — tek dosya çalıştırma.

Yeni String metotları

"  metin  ".strip();          // Unicode-doğru boşluk temizleme (trim'in halefi)
"  metin  ".stripLeading();   // baştaki
"  metin  ".stripTrailing();  // sondaki
"   ".isBlank();              // boş veya yalnızca boşluk mu?
"=".repeat(20);              // metni n kez tekrarla
"a\nb\nc".lines();           // çok satırlı metni satır Stream'ine çevir

Özellikle lines() ve repeat() çok kullanışlıdır. Örnek 1 (./Ornek1.java) bunları ve lambda parametresinde var kullanımını gösterir ((var a, var b) -> ... — parametrelere anotasyon eklemeyi mümkün kılar).

Files string G/Ç

Bir metin dosyasını okumak/yazmak artık tek satır:

Files.writeString(path, "içerik");
String s = Files.readString(path);

Eski BufferedReader/BufferedWriter döngülerinin yerine geçen bu kısayollar, küçük dosyalarla çalışırken çok pratiktir. Örnek 2 (./Ornek2.java) bir geçici dosyaya yazıp okur.

Predicate.not

Bir koşulu tersine çevirmenin okunaklı yolu:

list.stream().filter(Predicate.not(String::isBlank));  // 'boş OLMAYAN'

s -> !s.isBlank() yerine niyeti daha net ifade eder (özellikle metot referanslarıyla).

Standart HttpClient (java.net.http)

Java 9'da deneme olarak gelen modern HttpClient, Java 11'de standartlaştı: builder API, HTTP/2, senkron/asenkron istek. Bunu Networking bölümünde (topic 33) ayrıntılı gördük; eski HttpURLConnection'a temiz bir alternatiftir.

Tek dosya çalıştırma

Java 11, derlemeden doğrudan çalıştırmayı getirdi:

java Merhaba.java     # önce javac gerekmez

Bu, tam olarak bu eğitim portalının örnekleri nasıl çalıştırdığıdır — her örnek java Dosya.java ile derlenip koşar. Öğrenme, prototip ve betik (script) senaryoları için idealdir.

Geçiş notu (8 → 11)

11'e geçiş çoğunlukla sorunsuzdur; en büyük tuzak, Java 11'de kaldırılan Java EE/CORBA modülleridir (JAXB, JAX-WS, javax.xml.bind...). Bunları kullanan projeler ilgili bağımlılıkları ayrıca eklemek zorunda kaldı (topic 21'de ele alındı).

Özet

Java 11'in (LTS) öne çıkan yeniliklerini öğrendik: yeni String metotları (strip/isBlank/ repeat/lines) ve lambda'da var (Örnek 1); Files.writeString/readString ile dosya G/Ç ve Predicate.not (Örnek 2); standart HttpClient ve tek dosya çalıştırma. Bu, sürüm batch'inin ilk yarısını (Java 8–11) tamamlıyor. Sırada, kalan sürümler: Java 12–16 (switch expressions, text blocks, records, sealed, pattern matching).

Kod Örnekleri(2)

Ornek1

çalıştırılabilir
Ornek1.java
1// Ornek1: Java 11 — yeni String metotları ve lambda parametresinde var.
2// Çalıştırma: java Ornek1.java
3import java.util.function.BiFunction;
4import java.util.stream.Collectors;
5
6public class Ornek1 {
7
8    public static void main(String[] args) {
9        // strip / stripLeading / stripTrailing: trim'in Unicode-doğru hali
10        String bosluklu = "   merhaba   ";
11        System.out.println("strip()        : '" + bosluklu.strip() + "'");
12        System.out.println("stripLeading() : '" + bosluklu.stripLeading() + "'");
13        System.out.println("stripTrailing(): '" + bosluklu.stripTrailing() + "'");
14
15        // isBlank: sadece boşluk mu (veya boş mu)?
16        System.out.println("isBlank('   '): " + "   ".isBlank());
17        System.out.println("isBlank('a')  : " + "a".isBlank());
18
19        // repeat: metni tekrarla
20        System.out.println("repeat: " + "=".repeat(20));
21        System.out.println("'ab'.repeat(3): " + "ab".repeat(3));
22
23        // lines: çok satırlı metni satır STREAM'ine çevir
24        String cokSatir = "birinci\nikinci\nüçüncü";
25        long satirSayisi = cokSatir.lines().count();
26        System.out.println("lines() sayısı: " + satirSayisi);
27        String numarali = cokSatir.lines()
28                .map(s -> "- " + s)
29                .collect(Collectors.joining("\n"));
30        System.out.println("lines() ile işleme:\n" + numarali);
31
32        // Java 11: lambda parametresinde var (anotasyon eklemeye olanak tanır)
33        BiFunction<Integer, Integer, Integer> topla = (var a, var b) -> a + b;
34        System.out.println("\nvar lambda: topla(3,4) = " + topla.apply(3, 4));
35
36        System.out.println("""
37
38                --- Java 11: String metotları + var lambda ---
39                strip/stripLeading/stripTrailing: Unicode-doğru boşluk temizleme (trim'in halefi).
40                isBlank: boş veya yalnızca boşluk mu? repeat(n): metni n kez tekrarla.
41                lines(): çok satırlı String'i satır Stream'ine çevirir (işlemeyi kolaylaştırır).
42                Lambda'da var: (var a, var b) -> ... — parametrelere anotasyon eklemeyi mümkün kılar.""");
43    }
44}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.

Ornek2

çalıştırılabilir
Ornek2.java
1// Ornek2: Java 11 — Files.writeString/readString ve Predicate.not.
2// Çalıştırma: java Ornek2.java
3import java.nio.file.Files;
4import java.nio.file.Path;
5import java.util.List;
6import java.util.function.Predicate;
7import java.util.stream.Collectors;
8
9public class Ornek2 {
10
11    public static void main(String[] args) throws Exception {
12        // Files.writeString / readString: bir dosyaya/dosyadan metni TEK satırda yaz/oku.
13        Path dosya = Files.createTempFile("java11-", ".txt");
14        Files.writeString(dosya, "Merhaba Java 11!\nDosya G/Ç artık çok kolay.");
15        String icerik = Files.readString(dosya);
16        System.out.println("Dosyadan okunan:\n" + icerik);
17        Files.delete(dosya);
18
19        // Predicate.not: bir koşulu tersine çevirmenin okunaklı yolu.
20        List<String> kelimeler = List.of("ada", "", "  ", "burak", "can", "");
21        Predicate<String> bosMu = String::isBlank;
22        List<String> doluOlanlar = kelimeler.stream()
23                .filter(Predicate.not(bosMu))   // 'boş OLMAYAN' (s -> !s.isBlank() yerine)
24                .collect(Collectors.toList());
25        System.out.println("\nBoş olmayanlar: " + doluOlanlar);
26
27        System.out.println("""
28
29                --- Java 11: Files string G/Ç + Predicate.not ---
30                Files.writeString(path, text) / Files.readString(path): metin dosyasını tek satırda yaz/oku
31                (eski BufferedReader/Writer kalıplarının çok kısa hali).
32                Predicate.not(p): bir koşulun tersi — 'filter(Predicate.not(String::isBlank))' okunaklıdır.
33                Java 11 ayrıca standart HttpClient'i (java.net.http) getirdi (networking bölümünde gördük)
34                ve TEK DOSYA çalıştırmayı (java Dosya.java) — bu portalın çalışma temeli!""");
35    }
36}
Çıktı yerel JDK 21 ile yakalandı — tarayıcıda JVM çalışmaz.