Java Sürümleri ve Özellikleri -Türkçe- marcobehler.com Çevirisi



Yazının orjinaline buradan ulaşabilirsiniz.

Java Sürümleri ve Özellikleri





Bu kılavuzu, en son Java'yı nasıl bulacağınız ve kuracağınız hakkında pratik bilgiler almak, Java dağıtımları (Adoptium, AdoptOpenJdk, OpenJDK, OracleJDK vb.) ve Java sürümleri 8-19. için hazırladım.


Pratik Bilgiler
Öncelikle, insanların projeleri için doğru Java sürümünü seçmeye çalışırken karşılaştıkları bazı yaygın ve pratik sorulara bir göz atalım.

Yalnızca bir indirme bağlantısı istiyorum ve diğer her şeyi biliyorum. Nereye gitmeliyim?Adoptium sitesine gidin , en son Java sürümünü seçin, indirin ve kurun. Ardından, Java sürümleri hakkında bir iki şey öğrenmek için bu kılavuza geri dönün.

En son Java sürümü nedir?Eylül 2022 itibarıyla Java 19 , yayınlanan en son Java sürümüdür. Mart 2023'te Java 20 takip edecek. Java'nın son uzun vadeli destek sürümü (LTS), Eylül 2021'de yayınlanan Java 17'dir.

Hangi Java sürümünü kullanmalıyım?Daha yeni Java sürümleri artık her 6 ayda bir geliyor. Bu nedenle, Java 20 Mart 2023'te, Java 21 Eylül 2023'te vb. Geçmişte, Java sürüm döngüleri çok daha uzundu , 3-5 yıla kadar. Bu grafik şunu göstermektedir:
Çıkan bu kadar çok yeni sürümle birlikte, temel olarak şu gerçek dünya(™) kullanım senaryoları var:Şirketlerdeki eski projeler genellikle Java 8'i kullanmakta takılıp kalıyor (bkz . Şirketler neden hala Java 8'de takılıp kalıyor? ). Dolayısıyla Java 8'i de kullanmak zorunda kalacaksınız.
Hatta bazı eski projeler Java 1.5 (2004'te piyasaya sürüldü) veya 1.6'ya (2006'da piyasaya sürüldü) takıldı - üzgünüm millet, sizin için üzülüyorum!
En son IDE'leri, çerçeveleri ve oluşturma araçlarını kullandığınızdan eminseniz ve sıfırdan bir proje başlatıyorsanız, Java 17'yi (LTS) ve hatta en son Java 19'u tereddüt etmeden kullanabilirsiniz.
Java sürümünün temel olarak Java 7'de takılı kaldığı ve belirli bir Java 8 özellikleri kümesinin mevcut olduğu Android geliştirmenin özel alanı var. Veya Kotlin programlama dilini kullanmaya geçersiniz.

Şirketler neden hala Java 8'e takılıp kalıyor?Şirketlerin hala Java 8'e takılıp kalmamasının birçok farklı nedeni var. Birkaç isim vermek gerekirse:
Derleme araçları (Maven, Gradle vb.) ve bazı kitaplıklarda başlangıçta Java sürümleri > 8 ve gerekli güncellemelerle ilgili hatalar vardı. Örneğin, Maven gibi belirli derleme araçları, Java projeleri oluştururken "reflective access"-warnings" yazdırırdı ; bu, derlemeler iyi olsa bile "hazır değilmiş gibi hissettirir".Java 8'e kadar, Oracle'ın JDK yapılarını hemen hemen kullanıyordunuz ve lisanslamayla ilgilenmeniz gerekmiyordu. Oracle, 2019'da lisanslama planını değiştirdi , ancak bu, "Java artık ücretsiz değil" yazan bir ton makaleyle internetin çıldırmasına neden oldu - ve bunu oldukça fazla kafa karışıklığı izledi. Ancak bu, bu kılavuzun Java Dağıtımları bölümünde öğreneceğiniz gerçek bir sorun değildir .Bazı şirketlerin yalnızca LTS sürümlerini kullanma politikaları vardır ve onlara bu yapıları sağlamak için işletim sistemi satıcılarına güvenir, bu da zaman alır.Özetlemek gerekirse: pratik sorunlar (araçlarınızı, kitaplıklarınızı, çerçevelerinizi yükseltmek) ve politik sorunların bir karışımına sahipsiniz.

8 gibi bazı Java sürümleri neden 1.8 olarak da adlandırılıyor?9'dan önceki Java sürümleri, yalnızca farklı bir adlandırma şemasına sahipti. Yani Java 8, 1.8 olarak da adlandırılabilir , Java 5, 1.5 olarak da adlandırılabilir vb. 'Java -version' komutunu verdiğinizde, bu sürümlerle aşağıdaki gibi çıktılar elde edersiniz:




c:\Program Files\Java\jdk1.8.0_191\bin>java -version java version "1.8.0_191" (1) Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
Bu basitçe Java 8 anlamına gelir. Java 9 ile zamana dayalı sürümlere geçişle birlikte adlandırma şeması da değişti ve Java sürümlerinin önüne artık 1.x eki getirilmiyor. Şimdi sürüm numarası şöyle görünür:


c:\Program Files\Java\jdk11\bin>java -version openjdk version "11" 2018-09-25 (1) OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)


Java sürümleri arasındaki fark nedir? Belirli bir tane öğrenmeli miyim?Python 2'den 3'e kadar sürümler arasında büyük kesintiler olan diğer programlama dillerinden geldiğinizde, aynı şeyin Java için de geçerli olup olmadığını merak ediyor olabilirsiniz.


Java, geriye dönük olarak son derece uyumlu olduğu için bu açıdan özeldir . Bu, Java 5 veya 8 programınızın bir Java 8-19 sanal makinesiyle çalışmasının garantili olduğu anlamına gelir - şimdilik endişelenmenize gerek olmayan birkaç istisna dışında.


Diyelim ki programınız Java 8 JVM altında bulunmayan Java 19 özelliklerine dayanıyor.



Bu birkaç anlama gelir:


12 gibi belirli bir Java sürümünü sadece "öğrenmezsiniz".
Bunun yerine, Java 8'e kadar tüm dil özelliklerinde iyi bir temel elde edeceksiniz. Bu, iyi bir temel görevi görür.
Ve sonra bunun gibi bir kılavuzdan Java 9-19'da hangi ek özelliklerin geldiğini öğrenin ve bunları mümkün olduğunca kullanın.

Java sürümleri arasındaki bu yeni özelliklerin örnekleri nelerdir?

Java Özellikleri 8-19 bölümüne bir göz atın .


Ancak pratik bir kural olarak: Daha eski, daha uzun sürüm döngüleri (3-5 yıl, Java 8'e kadar), sürüm başına birçok yeni özellik anlamına geliyordu.


6 aylık sürüm döngüsü, sürüm başına çok daha az özellik anlamına gelir, böylece Java 9-19 dil özelliklerini hızla yakalayabilirsiniz.

JRE ve JDK arasındaki fark nedir?

Şimdiye kadar sadece "Java" hakkında konuştuk. Ama Java tam olarak nedir?


Öncelikle, bir JRE (Java Runtime Environment) ile bir JDK (Java Development Kit) arasında ayrım yapmanız gerekir .


Tarihsel olarak, yalnızca Java programlarını çalıştırmakla ilgileniyorsanız, yalnızca bir JRE indirdiniz . Bir JRE, diğer şeylerin yanı sıra Java Sanal Makinesi (JVM) ve "java" komut satırı aracını içerir.


Yeni Java programları geliştirmek için bir JDK indirmeniz gerekiyordu . Bir JDK , JRE'nin sahip olduğu her şeyin yanı sıra javac derleyicisini ve javadoc (Java dokümantasyon oluşturucu) ve jdb (Java Hata Ayıklayıcı) gibi birkaç başka aracı içerir .


Şimdi neden geçmiş zamanda konuşuyorum?


Java 8'e kadar, Oracle web sitesi JRE'leri ve JDK'leri ayrı indirmeler olarak sunuyordu - JDK her zaman JRE'yi ayrı bir klasörde içerse de. Java 9 ile bu ayrım temelde ortadan kalktı ve siz her zaman bir JDK indiriyorsunuz. JDK'lerin dizin yapısı da değişti ve artık açık bir JRE klasörü kalmadı.


Bu nedenle, bazı dağıtımlar ( Java Dağıtımları bölümüne bakın) hala ayrı bir JRE yüklemesi sunsa da, yalnızca bir JDK sunma eğilimi var gibi görünüyor. Bu nedenle, bundan sonra Java ve JDK'yı birbirinin yerine kullanacağız .

Java'yı veya bir JDK'yı nasıl kurarım?

Şu an için Java-Docker görüntülerini, .msi sarmalayıcılarını veya platforma özgü paketleri yok sayın. Sonuç olarak, Java sadece bir .zip dosyasıdır, ne eksik ne fazla.


Bu nedenle, Java'yı makinenize yüklemek için tek yapmanız gereken jdk-{5-19}.zip dosyanızı açmaktır. Bunun için yönetici haklarına bile ihtiyacınız yok.


Sıkıştırılmış Java dosyanız şöyle görünecektir:
Directory C:\dev\jdk-11 12.11.2019 19:24 <DIR> . 12.11.2019 19:24 <DIR> .. 12.11.2019 19:23 <DIR> bin 12.11.2019 19:23 <DIR> conf 12.11.2019 19:24 <DIR> include 12.11.2019 19:24 <DIR> jmods 22.08.2018 19:18 <DIR> legal 12.11.2019 19:24 <DIR> lib 12.11.2019 19:23 1.238 release
Sihir, Windows altında şöyle görünen /bin dizininde gerçekleşir:


Directory C:\dev\jdk-11\bin ... 12.11.2019 19:23 272.736 java.exe ... 12.11.2019 19:23 20.832 javac.exe ...


Yani tek yapmanız gereken o dosyayı açıp /bin dizinini PATH değişkeninize koymak, böylece 'java' komutunu her yerden çağırabilirsiniz.


(Merak ediyorsanız, Oracle veya Adoptium'daki gibi GUI yükleyicileri sizin için PATH değişkenini açıp değiştirir, hepsi bu.)


Java'yı doğru yüklediğinizi doğrulamak için 'java -version' komutunu çalıştırmanız yeterlidir. Çıktı aşağıdaki gibi görünüyorsa, hazırsınız.


openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)




Şimdi geriye bir soru kaldı: Java .zip dosyasını nereden alıyorsunuz? Bu da bizi dağıtımlar konusuna getiriyor.

Java Dağıtımları



Java (okuma: JDK) yüklemeleri sunan çeşitli siteler var ve "kimin neyi ve hangi lisansla sunduğu" net değil. Bu bölüm buna biraz ışık tutacaktır.

OpenJDK projesi




Java kaynak kodu açısından (okuyun: JRE/JDK'nızın kaynak kodu), OpenJDK proje sitesinde yaşayan yalnızca bir tane var.

Ancak bu yalnızca kaynak kodudur, dağıtılabilir bir derleme değildir (düşünün: kendi işletim sisteminiz için derlenmiş java komutuyla .zip dosyanız). Teorik olarak, sen ve ben bu kaynak koddan bir yapı üretebilir, buna MarcoJDK diyebilir ve dağıtmaya başlayabiliriz. Ancak dağıtımımızın, kendimizi yasal olarak Java SE uyumlu olarak adlandırabilmemiz için sertifikası eksik olacaktır .

Bu nedenle pratikte, bu yapıları yaratan, sertifikalandıran (bkz. TCK ) ve ardından dağıtan bir avuç satıcı vardır.

Satıcılar, örneğin, yeni bir Java derlemesi üretmeden önce String sınıfından bir yöntemi kaldıramasalar da, marka bilinci oluşturma (yaşasın!) veya yararlı buldukları diğer bazı (örneğin CLI) yardımcı programları ekleyebilirler. Ancak bunun dışında orijinal kaynak kodu tüm Java dağıtımları için aynıdır .

OpenJDK derlemeleri (Oracle tarafından) ve OracleJDK derlemeleri
Java'yı kaynaktan oluşturan satıcılardan biri Oracle'dır. Bu , ilk başta çok kafa karıştırıcı olabilen iki farklı Java dağıtımına yol açar .


OpenJDK, Oracle(!) tarafından derlenir. Bu derlemeler ücretsiz ve markasızdır, ancak Oracle, Java 16 çıkar çıkmaz Java 15 gibi eski sürümler için güncellemeler yayınlamaz.
2019'daki lisans değişikliği ile başlayan markalı, ticari bir yapı olan OracleJDK. Bu, geliştirme sırasında ücretsiz olarak kullanılabileceği anlamına gelir, ancak üretimde kullanıyorsanız Oracle'a ödeme yapmanız gerekir. Bunun için daha uzun süreli destek alırsınız, yani sürüm güncellemeleri ve JVM'niz çıldırırsa arayabileceğiniz bir telefon numarası vardır.

Şimdi, tarihsel olarak (Java 8 öncesi), OpenJDK yapıları ile OracleJDK yapıları arasında, OracleJDK'nin 'daha iyi' olduğunu söyleyebileceğiniz gerçek kaynak farklılıkları vardı. Ancak bugün itibariyle, her iki sürüm de küçük farklılıklar dışında temelde aynıdır .


Ardından, kurulu Java sürümünüz için ücretli, ticari destek (telefon numarası) istemeniz gelir.

Adoptium's Eclipse Temurin (eski adıyla AdoptOpenJDK)

2017'de bir grup Java Kullanıcı Grubu üyesi, geliştiricisi ve satıcısı (Amazon, Microsoft, Pivotal, Redhat ve diğerleri), AdoptOpenJDK adlı bir topluluk başlattı . Ağustos 2021 itibarıyla AdoptOpenJDK projesi yeni bir eve taşındı ve artık Eclipse Adoptium projesi olarak adlandırılıyor.


Adoptium, çeşitli işletim sistemlerinde, mimarilerde ve sürümlerde daha uzun kullanılabilirlik/güncellemelerle ücretsiz, kaya gibi sağlam OpenJDK Eclipse Temurinyapıları sağlar .


Java'yı yüklemek istiyorsanız şiddetle tavsiye edilir.

Azul Zulu, Amazon Corretto, SAPMachine

OpenJDK derlemelerinin tam listesini OpenJDK Wikipedia sitesinde bulabilirsiniz. Bunların arasında Azul Zulu , Amazon Corretto ve SapMachine sayılabilir . Fazla basitleştirmek gerekirse, farklı destek seçeneklerine/bakım garantilerine sahip olmanıza bağlıdır.


Yine de, örneğin, AWS üzerinde çalışıyorsanız, kullanmak istediğiniz sürümü sunmaları koşuluyla, Amazon Corretto OpenJDK yapılarıyla devam etmek mantıklıdır.

Tam Bir OpenJDK Dağıtımına Genel Bakış

Rafael Winterhalter , işletim sistemleri, mimarileri, lisanslama, destek ve bakım pencereleri dahil olmak üzere mevcut tüm OpenJDK yapılarının harika bir listesini derledi.


Buradan kontrol edin: https://rafael.codes/openjdk/ .

ÖneriBaştan tekrarlamak için, 2022 ve 2023'te, çok özel gereksinimleriniz yoksa https://adoptium.net'ten jdk.zip (.tar.gz/.msi/.pkg) dosyanızı alın ( Eclipse Temurin) veya işletim sistemi satıcınız / bulut sağlayıcınız tarafından sağlanan bir paket seçin.

Java Özellikleri 8-19


Bu kılavuzun en başında belirtildiği gibi: Esasen tüm Java 8 dil özellikleri (şu anda seçici olmayın) Java 19'da da çalışır. Aynı şey, aradaki diğer tüm Java sürümleri için de geçerlidir.


Bu da, Java 8'deki tüm dil özelliklerinin çok iyi Java temel bilgisi olarak hizmet ettiği ve diğer her şeyin (Java 9-19) bu temelin üzerinde hemen hemen ek özellikler olduğu anlamına gelir.


Belirli sürümlerin neler sunabileceğine dair hızlı bir genel bakış:

-Java 8-




Java 8 çok büyük bir sürümdü ve tüm özelliklerin bir listesini Oracle web sitesinde bulabilirsiniz . Yine de burada bahsetmek istediğim iki ana özellik seti var:

Dil Özellikleri: Lambdalar vb.
Java 8'den önce, örneğin yeni bir Runnable örneğini başlatmak istediğinizde, şu şekilde anonim bir iç sınıf yazmanız gerekiyordu:
Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } };
Lambdalarda aynı kod şöyle görünür:


Runnable runnable = () -> System.out.println("Hello world two!");
Ayrıca yöntem referansları, yinelenen ek açıklamalar, arabirimler için varsayılan yöntemler ve birkaç başka dil özelliği de var.

Koleksiyonlar ve AkışlarJava 8'de koleksiyonlar için Stream API olarak da bilinen işlevsel stilde işlemlere de sahipsiniz. Hızlı bir örnek:


List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");


Şimdi, Java 8 öncesi, temelde bu listeyle bir şeyler yapmak için for-döngüleri yazmanız gerekiyordu.


Akışlar API'si ile aşağıdakileri yapabilirsiniz:


list.stream() .filter(name -> name.startsWith("f")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);


Daha fazla Java 8 pratiği istiyorsanız

Açıkçası, bu kılavuz kapsamında Java 8'de yeni eklenen her bir Akış, Lambda veya İsteğe bağlı yöntem hakkında yalnızca hızlı bir genel bakış sunabilirim.


Alıştırmalar da dahil olmak üzere daha ayrıntılı ve eksiksiz bir genel bakış istiyorsanız, Java 8 temel özellikler kursuma göz atabilirsiniz .

-Java 9-




Java 9 ayrıca birkaç eklemeyle oldukça büyük bir sürümdü:

Koleksiyonlar
Koleksiyonlar, Listeleri, Kümeleri ve Haritaları kolayca oluşturmak için birkaç yeni yardımcı yönteme sahiptir.
List<String> list = List.of("one", "two", "three"); Set<String> set = Set.of("one", "two", "three"); Map<String, String> map = Map.of("foo", "one", "bar", "two");


Canlı YayınlarAkışlara, takeWhile,dropWhile,iterate yöntemleri biçiminde birkaç ekleme yapıldı.


Stream<String> stream = Stream.iterate("", s -> s + "s") .takeWhile(s -> s.length() < 10);


opsiyonelOpsiyonel seçenekler, ifPresentOrElse yöntemini çok özledi.


user.ifPresentOrElse(this::displayAccount, this::displayLogin);


arayüzlerArayüzlerin özel yöntemleri var:


public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); } }


Diğer Dil Özellikleriİyileştirilmiş bir kaynaklarla try-with-resources veya diamond operatör uzantıları gibi birkaç başka iyileştirme.

JShellSonunda Java, basit komutları deneyebileceğiniz ve anında sonuç alabileceğiniz bir kabuğa sahip oldu.


% jshell | Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> int x = 10 x ==> 10


HTTP İstemcisiJava 9, yeni bir HttpClient'in ilk önizleme sürümünü getirdi. O zamana kadar, Java'nın yerleşik Http desteği oldukça düşük seviyedeydi ve Apache HttpClient veya OkHttp (ki bunlar harika kütüphaneler, btw!)


Java 9 ile Java kendi modern istemcisine sahip oldu - önizleme modunda olmasına rağmen, yani sonraki Java sürümlerinde değişikliğe tabidir.

Project Jigsaw: Java Modülleri ve Çok Sürümlü Jar Dosyaları

Java 9, eski güzel OSGI spesifikasyonuna biraz benzeyen Yapboz Modül Sistemine sahiptir . Jigsaw ile ilgili tüm ayrıntılara girmek bu kılavuzun kapsamında değildir, ancak daha fazla bilgi edinmek için önceki bağlantılara göz atın.


Çoklu Sürüm .jar dosyaları, farklı JVM sürümleri için farklı sınıflar içeren bir .jar dosyasına sahip olmayı mümkün kıldı. Böylece, örneğin Java 8 ve Java 10'da çalıştırıldığında programınız farklı davranabilir/kullanılan farklı sınıflara sahip olabilir.

Daha fazla Java 9 pratiği istiyorsanızYine, bu Java 9 özelliklerine hızlı bir genel bakıştır ve daha ayrıntılı açıklamalar ve alıştırmalar istiyorsanız, Java 9 temel özellikler kursuna bir göz atın.

-Java 10-Java 10'da Çöp Toplama vb. gibi birkaç değişiklik oldu. Ancak bir geliştirici olarak muhtemelen göreceğiniz tek gerçek değişiklik, yerel değişken türü çıkarımı olarak da adlandırılan "var" anahtar sözcüğünün kullanıma sunulması olacaktır.

Yerel Değişken Türü Çıkarımı: var-keyword
// Pre-Java 10 String myName = "Marco"; // With Java 10 var myName = "Marco"
Javascript-y hissi veriyor, değil mi? Yine de güçlü bir şekilde yazılmıştır ve yalnızca yöntemlerin içindeki değişkenler için geçerlidir ( bunu tekrar işaret ettiğiniz için teşekkürler, dpash ).

-Java 11-




Java 11 ayrıca geliştirici açısından biraz daha küçük bir sürümdü.

Dizeler ve Dosyalar
Dizeler ve Dosyalar birkaç yeni yönteme sahiptir (hepsi burada listelenmemiştir):


"Marco".isBlank(); "Mar\nco".lines(); "Marco ".strip(); Path path = Files.writeString(Files.createTempFile("helloworld", ".txt"), "Hi, my name is!"); String s = Files.readString(path);


Kaynak Dosyalarını ÇalıştırJava 10'dan başlayarak, Java kaynak dosyalarını önce derlemek zorunda kalmadan çalıştırabilirsiniz . Komut dosyası oluşturmaya doğru bir adım.


ubuntu@DESKTOP-168M0IF:~$ java MyScript.java


Lambda parametreleri için Yerel Değişken Tür Çıkarımı (var)Başlık her şeyi söylüyor:


(var firstName, var lastName) -> firstName + lastName


HttpClientJava 9'dan HttpClient'in önizlemesiz son sürümü.

Diğer şeyFlight Recorder, No-Op Çöp Toplayıcı, Nashorn-Javascript-Motor kullanımdan kaldırıldı vb.

-Java 12-Java 12'de birkaç yeni özellik ve temizleme var , ancak burada bahsetmeye değer olanlar yalnızca Unicode 11 desteği ve bir sonraki bölümde ele alınacağını göreceğiniz yeni switch ifadesinin bir önizlemesidir.

-Java 13-Tam bir özellik listesini burada bulabilirsiniz , ancak temelde Unicode 12.1 desteğinin yanı sıra iki yeni veya geliştirilmiş önizleme özelliği alıyorsunuz (gelecekte değişebilir):

Anahtar İfadesi (Önizleme)

Anahtar ifadeleri artık bir değer döndürebilir. Ayrıca, ifadeleriniz için düşme/kopma sorunları olmadan lambda tarzı bir sözdizimi kullanabilirsiniz:


Eski switch ifadeleri şuna benziyordu:
switch(status) { case SUBSCRIBER: // code block break; case FREE_TRIAL: // code block break; default: // code block }
Oysa Java 13'te, switch deyimleri şöyle görünebilir:
boolean result = switch (status) { case SUBSCRIBER -> true; case FREE_TRIAL -> false; default -> throw new IllegalArgumentException("something is murky!"); };


Çok Satırlı Dizeler (Önizleme)Sonunda bunu Java'da yapabilirsiniz :
String htmlBeforeJava13 = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n"; String htmlWithJava13 = """ <html> <body> <p>Hello, world</p> </body> </html> """;


-Java 14-

Anahtar İfadesi (Standart)Sürüm 12 ve 13'te önizlenen swtich ifadeleri artık standartlaştırılmıştır.
int numLetters = switch (day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; default -> { String s = day.toString(); int result = s.length(); yield result; } };


Records (Önizleme)

Artık Java ile çok sayıda ortak metin yazmanın acısını hafifletmeye yardımcı olan record sınıfları var.


Yalnızca veri, (potansiyel olarak) alıcılar/ayarlayıcılar, eşittir/karma kod, toString içeren bu Java 14 öncesi sınıfına bir göz atın.
final class Point { public final int x; public final int y; public Point(int x, int y) { this.x = x; this.y = y; } } // state-based implementations of equals, hashCode, toString // nothing else
Kayıtlarla artık şu şekilde yazılabilir:
record Point(int x, int y) { }
Yine, bu bir önizleme özelliğidir ve gelecek sürümlerde değişikliğe tabidir.

Yararlı NullPointerİstisnalarSon olarak NullPointerExceptions, tam olarak hangi değişkenin boş olduğunu tanımlar.
author.age = 35; --- Exception in thread "main" java.lang.NullPointerException: Cannot assign field "age" because "author" is null


InstanceOf İçin Desen Eşleştirme (Önizleme)Oysa daha önce nesnelerinizi bunun gibi bir instanceof içinde yapmanız (dökmeniz) gerekiyordu:
if (obj instanceof String) { String s = (String) obj; // use s }



Artık oyuncu kadrosunu etkili bir şekilde bırakarak bunu yapabilirsiniz.
if (obj instanceof String s) { System.out.println(s.contains("hello")); }


Paketleme Aracı (Kuluçka Makinesi)Java uygulamanızı, gerekli tüm bağımlılıklar dahil olmak üzere platforma özel paketler halinde paketlemenize izin veren bir inkübasyon jpackage aracı vardır.


Linux: deb ve rpm


macOS: pkg ve dmg


Windows: msi ve exe

Çöp ToplayıcılarEşzamanlı İşaret Süpürme (CMS) Çöp Toplayıcı kaldırıldı ve deneysel Z Çöp Toplayıcı eklendi.

-Java 15-

Metin Blokları / Çok Satırlı DizelerJava 13'te deneysel bir özellik olarak tanıtılan (yukarıya bakın), çok satırlı diziler artık üretime hazır.
String text = """ Lorem ipsum dolor sit amet, consectetur adipiscing \ elit, sed do eiusmod tempor incididunt ut labore \ et dolore magna aliqua.\ """;


Sealed (Mühürlü) Sınıflar - ÖnizlemeSınıflarınızı kimlerin alt sınıflara ayırmasına izin verildiğini daha da yakından kavramak istediyseniz, şimdi bu sealedözellik var.
public abstract sealed class Shape permits Circle, Rectangle, Square {...}
Bu, sınıf iken, alt publicsınıflara izin verilen tek sınıfların ve sınıfları olduğu Shapeanlamına gelir .CircleRectangleSquare

Kayıtlar ve Kalıp EşleştirmeRecordsJava 14'ün ve özellikleri ( Pattern Matchingyukarıya bakın) hâlâ ön izleme aşamasındadır ve henüz sonlandırılmamıştır.

Nashorn JavaScript MotoruJava 11'de kullanımdan kaldırıldıktan sonra, Nashorn Javascript Engine nihayet JDK 15'te kaldırıldı.

ZGC: Üretime Hazır




Z Çöp Toplayıcı artık deneysel olarak işaretlenmiyor. Artık üretime hazır.

-Java 16-

instanceof için Desen EşleştirmeOnun yerine:
if (obj instanceof String) { String s = (String) obj; // e.g. s.substring(1) }
Şimdi bunu yapabilirsiniz:
if (obj instanceof String s) { // Let pattern matching do the work! // ... s.substring(1) }


Unix-Domain Soket KanallarıArtık Unix etki alanı yuvalarına bağlanabilirsiniz (macOS ve Windows (10+) tarafından da desteklenir).
socket.connect(UnixDomainSocketAddress.of( "/var/run/postgresql/.s.PGSQL.5432"));


Yabancı Bağlayıcı API'sı - ÖnizlemeYerel kitaplıklara bağlanmanıza izin veren (C'yi düşünün) JNI (Java Yerel Arayüzü) için planlanmış bir değiştirme.

Kayıtlar ve Kalıp Eşleştirme




Her iki özellik de artık üretime hazır ve artık işaretlenmiyor in preview.

Mühürlü Sınıflar




Mühürlü Sınıflar (Java 15'ten, yukarıya bakın) hâlâ önizleme aşamasındadır.

-Java 17-




Java 17, Java 11'den sonra Java'nın yeni uzun vadeli destek (LTS) sürümüdür.

Switch için Desen Eşleştirme (Önizleme)
Diğer birçok dilde halihazırda mevcuttur:
public String test(Object obj) { return switch(obj) { case Integer i -> "An integer"; case String s -> "A string"; case Cat c -> "A Cat"; default -> "I don't know what it is"; }; }





Artık Objects anahtar işlevlerine geçebilir ve belirli bir türü kontrol edebilirsiniz.

Mühürlü Sınıflar (Kesinleşmiş)


Java 15'te önizleme olarak sunulan bir özellik artık son haline getirildi.


Özet: Sınıflarınızı kimlerin alt sınıflara ayırmasına izin verildiğini daha da yakından kavramak istediyseniz, şimdi bu sealedözellik var.
public abstract sealed class Shape permits Circle, Rectangle, Square {...}
Bu, sınıf iken, alt publicsınıflara izin verilen tek sınıfların ve sınıfları olduğu Shapeanlamına gelir .CircleRectangleSquare

Yabancı İşlev ve Bellek API'si (Kuluçka Makinesi)Java Yerel Arabiriminin (JNI) yerine geçer. Yerel işlevleri çağırmanıza ve outsideJVM'nin belleğine erişmenize izin verir. Şimdilik Think C çağrıları, ancak zaman içinde ek dilleri (C++, Fortran gibi) destekleme planları var.

Güvenlik Yöneticisini Kullanımdan KaldırmaJava 1.0'dan beri bir Güvenlik Yöneticisi vardı. Artık kullanımdan kaldırıldı ve gelecekteki bir sürümde kaldırılacak.

-Java 18-

Varsayılan olarak UTF-8




Dosyaları açık bir karakter sonu belirtmeden okumayı denediyseniz, işletim sistemi kodlaması önceki Java sürümlerinde kullanılıyordu (örneğin, Linux ve macOS'ta UTF-8 ve Windows'ta Windows-1252). Java 18 ile bu, varsayılan olarak UTF-8 olarak değiştirildi.

Basit Web Sunucusu
Java 18, şimdi başlayabileceğiniz ilkel bir HTTP sunucusuyla birlikte geliyor:
jwebserver
Burada özellikleri hakkında daha fazla bilgi edinin .

Diğer Çok Heyecan Verici Olmayan Şeyler / Kuluçka Özellikleri




Tam liste ve genel bakış için bu makaleye göz atın .

-Java 19-

Virtual ThreadsJava 19, and the new ve and the - Foreign Function & Memory APIgibi birkaç heyecan verici özellik ekledi, ancak bunların tümü önizleme modundadır, dolayısıyla sonraki sürümlerde değişikliğe tabidir.Structured ConcurrencyVector API


Bu özellikler ve gelecek yenilikler hakkında bilgi almak istiyorsanız, bu makaleye göz atın .

Fin
Şimdiye kadar birkaç şey hakkında oldukça iyi bir genel bakışa sahip olmalısınız:
Java nasıl kurulur, hangi sürüm ve nereden alınır (ipucu: Adoptium ).
Java dağıtımı nedir, hangileri vardır ve farkları nelerdir.
Belirli Java sürümleri arasındaki farklar nelerdir?




Geri bildirim, düzeltmeler ve rastgele girdiler her zaman memnuniyetle karşılanır! Aşağıya bir yorum bırakmanız yeterli.


Okuduğunuz için teşekkürler.

teşekkürlerFarklı, mevcut Java dağıtımları hakkında harika bir makale yazan Stephen Colebourne .

Please Select Embedded Mode To Show The Comment System.*

Daha yeni Daha eski

نموذج الاتصال