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ılabilir1// 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}Ornek2
çalıştırılabilir1// 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}