Feature of Java by seekpng

Java Versiyonları ve Gelen Yenilikler : 8–16

Ubeyde Akgül
Huawei Developers - Türkiye
7 min readApr 19, 2021

--

Selamlar 👋

Bu yazımda, Mart 2014 te yayınlanmış Java 8 sürümünden Mart 2021 de yayınlanmış olan Java 16 versiyonuna kadar java versiyonlarının getirdiği yenilikleri ve özellikleri kısaca aktarmaya çalıştım, umarım faydalı olur.

Hepimizi bildiği gibi Java ; Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış, nesne yönelimli, ortam bağımsız, yüksek performanslı, çok işlevli, yüksek seviye, adım adım işletilen (interpreted) açık kaynak kodlu bir programlama dili.

İlk release 1996’da çıkarılmış olan Java dilinin geliştirmeleri ve Java platformuna eklemeler şuan Java Spesifikasyon İsteklerini (JSR) kullanan Java Community Process (JCP) tarafından yönetiliyor.

Java version history— by wiki

Java 8 Features : ( 2014 Mart (LTS))

Lambda ifadelerini uygulayabilmek için getirilen arayüzler ile javanın functional programming yetenekleri geliştirilmeye başlandı.

Herhangi bir sınıfa ait olmadan iş yapabilen pratik fonksiyonlar olan Lambda ifadeler ile birlikte Java, funtional programming dünyasına da girmiş oldu.

Metodları, nesneler veya primitive değerlermiş gibi kullanabilmemizi ve bunları başka bir metoda parametre olarak gönderebilmemizi sağlıyor.

:: söz dizimi aracılığıyla static methodlar class name ile, static olmayan methodlar ise instance objeleri ile referans verilebilmekte.

Collection’lar üzerinde filter, forEach, map, count, min/max gibi sık kullanılan çeşitli işlemleri yapmayı çok daha kolay hale getiriyor.

File, connection, network vb. açık kaynakları kapatmaya gerek duymadan, AutoClosable interface ile dene-kullan-kapat şeklinde otomatik olarak kapanacak bir kullanım imkan sağlar. Bkz : oracleDoc , oracleDoc1

Nesnelerin kullanılmadan önce yapılan NullCheck işlemlerini daha okunabilir ve kontrol edilebilir olmasını sağlayan Optional<T> utility sınıfını sağlıyor.

Tarih ve saat verilerinin daha doğal, net ve anlaşılması kolay şekilde elde edilmesini sağlıyor.

Thread nesneleri oluşturmak ve yönetmek zorunda kalma eşzamanlı concurrent/multitasking işlemlerini daha anlaşılır ve kolay kullanılabilir hale getiriyor.

Java 9 Features : ( 2017 Eylül )

Modul sistemli projelerin geliştirilmesi, önceden maven, gradle gibi ek araçlarla gerçekleştirilebilirken bu özellik ile ek bi yapıya gerek duymadan da yapılabiliyor.

List, Set and Map gibi collection’ların basit şekilde initialize edilmesi için .of(...) keyword kullanımını sağlar.

Anonim sınıflarda diamond operatörü <> kullanmamızı sağlar.

HttpURLConnection API yerine artık daha iyi şekilde bağlantı kurmayı sağlayan bu özellik ile HttpClient, HttpRequest, HttpResponse sınıfları java içerisine eklenerek daha kolay bir kullanım sağlandı.

Komut satırında java kodu çalıştırmayı sağlayan interaktif shell tool.

Java.util.logging API service interface ile tüm platform log mesajlarının günlüğe kaydedilmesine ve Logger ile birlikte kullanılması sağlandı.

  • Lightweight JSON

JSON verilerini ayrıştırmak, oluşturmak ve tüketmek için java.util paketi aracılığıyla, lightweight bir JSON API’si sağlar.

Java 10 Features : ( 2018 Mart )

Yerel değişken oluşturma ve atama işlemlerinde değişkenin türünü atlamaya izin veren yeni var anahtar sözcüğü kullanarak tür çıkarımı sağlar.

Mevcut Sınıf-Veri Paylaşımı (Class-Data Sharing (CDS)) özelliğini application sınıflarının paylaşılan arşive yerleştirilmesine izin verecek şekilde genişletir. Önyükleme süresinin kritik olduğu sunucusuz mimaride sorun yaşamamak adına, uygulama başlatma süresini azaltmak için kullanılabilir.

Değiştirilemez collection’lar desteklenerek, List-Map-Set için copyOf(Collection) static metodu ile değişirilemez bir kopya collection sağlar.

  • Garbage Collector Improvements

Garbage Collector paralelleştirilerek çöp toplama için eşzamanlı iş parçacıkları ile daha hızlı sağlanır.

Tek tek istenilen thread üzerinde callback, durdurma gibi vb işlem yapmayı sağlar.

Java SE Root CA programı ile JDK’da varsayılan kök sertifika yetkilisi (CA) sağlanarak sertifikalar açık kaynak haline getirildi.

  • Container Awareness

Linux-based platforlarda JVM’lerin bir Docker konteynerinde çalıştırıldıklarının farkında olmalarını ve konteynere özgü konfigürasyonu çıkarmalarını sağlar.

Java 11 Features : ( 2018 Eylül (LTS))

Lambda ifadeler için yerel değişken kullanımı sağlar.

String api sınıfına isBlank, lines, strip, repeat gibi faydalı methodlar eklendi.

Dosyadan string okuma ve dosyaya string yazma işlemlerini kolaylaştıran readString, writeString, isSameFile methodlarını sağlar.

  • Running Java File with single command

Dosyanın önce javac ile derlenip sonra java ile çalıştırılma gerekliliğini ortadan kaldırıp, dosyayı doğrudan java komutu ile çalıştırabilmeyi sağlar ve dolaylı olarak derler.

Java 12 Features : ( 2019 Mart )

Daha gelişmiş lambda destekli ( case L -> ) switch ifadesi kullanımı sağlar.

Path verisi verilen iki dosyayı karşılaştırmak için sağlanan yardımcı method.

String api sınıfına indent, transform, describeConstable, resolveConstantDesc gibi faydalı methodlar eklendi.

Belirli bir local ayar tarafından sağlanan kalıplara bağlı olarak bir sayıyı daha kısa bir biçimde temsil edebilen NumberFormat sınıfını ve getCompactNumberInstance yöntemini sağlar. ( ör: 150000 -> 150K )

Java 13 Features : ( 2019 Eylül )

Java10 versiyonunda gelen (Class-Data Sharing (CDS)) özelliğinin update olmuş halidir ve Artık sınıf paylaşımı arşivinin oluşturulması ve kullanılmasın çok daha kolay olmasını sağlar.

java.net.Socket ve java.net.ServerSocket API’lerine büyük güncelleme geldi ve PlainSocketImpl sınıfı yerine, geliştirmesi ve debug yapması daha kolay olan NioSocketImpl tanıtıldı.

Java12 de yapılan lambda destekli swicth ifadelerindeki break yerine yield kullanılmaya başladı. break -> yield

Kod içinde gömülü JSON, XML, HTML vb. gibi multi-line String verileri append , stringbuilder, + vs kullanmadan metin blokları halinde kullanmayı sağlar.

Java 14 Features : ( 2020 Mart )

Swicth ifadeleri daha da geliştirilerek JDK standardı haline getirilmiştir. Durum (case) başına birden çok sabite izin veren lambda ifadelerin kullanımını sağlar.

record anahtar sözcüğüyle declare edilen Data sınıfları , otomatik olarak getter/setter, constructor, equals() gibi standart methodlara sahip olarak bazı kod parçalarından kurtulmayı sağlar.

Nesnenin türünü kontrol etmek ve kullanmak için instanceof kontrolünün ardından cast özelliğini kullanmadan işlem yapmamızı sağlar.

Önceden, NullPointerException (NPE) için belirli bir sınıf ve satırda bazı değerlerin boş olduğu bildiriliyor ve hata ayıklaması-tespiti kabus olabiliyordu. Artık Java, belirli bir kod satırında tam olarak neyin-hangi verinin null olduğunu göstererek problemin kolayca çözülmesini sağlıyor.

Java 15 Features : ( 2020 Eylül )

Önceki versiyonlara oranla daha az yeni özellik bulunuyor. Daha çok 14 versiyonundaki özelliklere geliştirme ve güncellemeler gelmiş durumda.

sealed(mühürlü) söz dizimi; bireysel sınıflara ve interfacelere, permits söz dizimi ile hangi sınıfların kendilerini extend veya implement ederek kullanılabileceğini bildirme izni vererek, kalıtım(inheritance) üzerinde erişim belirleyicilerden(access modifiers) daha iyi kontrol sağlamaya imkan verir.

Otomatik olarak getter/setter, constructor, equals() gibi standart methodlara sahip olarak birçok kod parçasından kurtulmayı sağlayan record anahtar sözcüğüyle declare edilen Data sınıfları üzerinde iyileştirmeler yapıldı.

Nesnenin türünü kontrol etmek instanceof kullanımı ardından cast özelliğini kullanmadan işlem yapmamızı sağlayan altyapıda iyileştirmeler yapıldı.

Java 16 Features : ( 2021 Mart )

Önceki versiyonlara oranla daha az yeni özellik bulunuyor. Daha çok 15 ve 14 versiyonlarında yayınlanan özelliklere güncellemeler gelmiş durumda.

Bireysel sınıflara ve interfacelere, permits söz dizimi ile hangi sınıfların kendilerini extend veya implement ederek kullanılabileceğini bildirme izni vererek, kalıtım(inheritance) üzerinde erişim belirleyicilerden(access modifiers) daha iyi kontrol sağlamaya imkan veren sealed class üzerinde iyileştirmeler yapıldı.

Otomatik olarak getter/setter, constructor, equals() gibi standart methodlara sahip olarak birçok kod parçasından kurtulmayı sağlayan record anahtar sözcüğüyle declare edilen Data sınıfları üzerinde iyileştirmeler yapıldı.

Nesnenin türünü kontrol etmek instanceof kullanımı ardından cast özelliğini kullanmadan işlem yapmamızı sağlayan altyapıda iyileştirmeler yapıldı.

--

--