Java 9 – Yeni Java'nın Özellikleri Hakkında Bilmeniz Gereken Her Şey
Yayınlanan: 2018-04-24Son derece erişilebilir programlama dili olan Java, dünya çapındaki geliştiriciler için hiç de kolay olmadı. 1995'teki başlangıcından bu yana, dil çeşitli endüstrilerde geniş bir kullanım gördü.
Bugün, telefonlarınızda Java'yı bulacaksınız. Android işletim sistemini ve Android'in sunduğu sayısız uygulamayı destekler. Büyük bir oyuncu tabanına sahip Minecraft gibi oyunlar geliştirmek için kullanılır. Mağaza kasalarında kredi kartı bilgilerinin okunması ve sistemler ile bankalar arasında bilgi beslemesi gibi iş uygulamalarında da kullanım alanı bulmaktadır.
3 yıllık bir aradan sonra Java, yeni sürümü Java SE 9'u çıkardı. Birkaç önemli mimari değişiklik ve eklenti özelliğiyle Java SE 9, geliştiricilerin özlemini duyduğu güçlü bir çözüm sunuyor.
Java 7, 2011'de daha iyi kaynak yönetimi işlevselliği sunan kaynakla deneme özelliğini ekledi.
Java 8, lambda ifadeleri ekledi, iyi bir hareket ama OOP paradigması altında biraz kusurlu.
Artık Java Çözümleri , programcıların özel yöntemlere sahip olmasına izin veriyor. Özel statik yöntemler! EVET, doğru okudunuz!
Java SE 8, geliştiriciler tarafından karışık duygularla karşılanan birçok yapısal değişiklik sundu. Büyük ölçüde, Java SE 9'un üstesinden gelmeye çalıştığı Java SE 8'in eksiklikleri şunlardır:
- JDK, küçük bilgi işlem aygıtı için gezilebilir değildi
- Uygulama performansında genel bir gelişme olmadı
- JDK'nın genel güvenliği ve bakımı yoktu
- Java geliştiricileri, kod kitaplıklarını ve daha büyük uygulamaları oluşturmak ve sürdürmek için zorluklarla karşılaştı
Öyleyse, Java 9'un öncekilere göre sunduğu önemli değişikliklere ve geliştirmelere bakalım.
Java 9'da API güncellemelerini işle
Geleneksel olarak, Java'nın API'si doğası gereği ilkel olmuştur. Bu, yeni süreçleri başlatmayı, çıktıları ve hata akışlarını yeniden yönlendirmeyi destekler. Java 9'da, Process API'deki yeni güncellemeler şunları sağlar:
- Mevcut ve diğer herhangi bir JVM işleminin PID'sini alma
- Alt süreçleri yönetme
- Alt süreçleri yönetme
- Sistemde çalışan süreçlerin PID, isim, kaynak kullanımı gibi bilgileri alın.
Bu, geçerli PID'nin yanı sıra geçerli işlem bilgilerini de yazdıran örnek bir koddur:
public class NewFeatures
{
public static void main(String [] args)
{
ProcessHandle currentProcess = ProcessHandle.current();
System.out.println("PID:"+ currentProcess.getPid());
ProcessHandle.Info currentProcessInfo = currentProcess.info();
System.out.println("Info:" + currentProcessInfo);
}
}
Java 9'da HTTP/2 istemcisi
Bu özelliğin sonraki sürümlerde yeniden düzenlenmesi veya hatta tamamen kaldırılması bekleniyor.
Önceden geliştiriciler, örneğin Apache HTTP, Jersey ve diğerleri gibi üçüncü taraf kitaplıklarına güvenirdi. Java'nın HTTP API'si, HTTP/1.1 belirtiminden önce gelir ve eşzamanlıdır ve bakımı zordur. Bu sınırlamalar, yeni bir API ekleme ihtiyacını doğurdu. Yeni HTTP istemci API'si aşağıdakileri sağlar:
- Çoğu HTTP isteğiyle başa çıkmak için basit ve özlü bir API
- HTTP/2 belirtimi desteği
- Daha iyi performans
- Daha iyi güvenlik
- Birkaç geliştirme daha
İşte yeni API'leri kullanarak bir HTTP GET isteği yapmak için bir kod parçacığı. Bu, module-info.java dosyasında tanımlanan modüldür:
module newfeatures{
requires jdk.incubator.httpclient;
}
Aşağıdaki kod, HTTP İstemci API'sini kullanır. Bu, jdk.incubator.httpclient modülünün bir parçasıdır:
import jdk.incubator.http.*;
import java.net.URI;
public class Http2Feature{
public static void main(String[] args) throws Exception{
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest
.newBuilder(new URI(http://httpbin.org/get;))
.GET()
.version(HttpClient.Version.HTTP_1_1)
.build();
HttpResponse.String response = client.send(request,
HttpResponse.BodyHandler.asString());
System.out.println("Status code:" + response.statusCode());
System.out.println("Response Body:" + response.body());
}
}
}
Java 9'da Daha Fazla Eşzamanlılık Güncellemesi özelliği
Java 9 ile, yayınla-abone ol çerçevesinin uygulanmasını destekleyen java.util.concurrent.Flow adlı yeni bir sınıf tanıtıldı. Bu çerçeve, geliştiricilerin bileşenler oluşturmasını sağlar. Bu bileşenler, verileri üreten yayıncıları ve verileri tüketen aboneleri ayarlayarak canlı bir veri akışını eşzamansız olarak tüketebilir. Bunlar yeni arayüzler:
- java.util.concurrent.Flow.Publisher
- java.util.concurrent.Flow.Subscriber
- java.util.concurrent.Flow.Subscription
- java.util.concurrent.Flow.Processor (hem Yayıncı hem de Abone olarak işlev görür).
Java 9'da Java Kabuk Komut Dosyası (Okuma-Değerlendirme-Baskı-Döngüsü)
Kulla Projesi'nin amacı, Java 9 için REPL (Okuma-Değerlendirme-Baskı-Döngü) aracının eklenmesini araştırmaktı. Java'nın bu sürümü, JShell adlı özel bir komut satırı aracı içeriyor. Buradaki amaç REPL kullanımını yaygınlaştırmak ve maksimize etmektir. Peki bunun anlamı nedir? Şimdi, bunları çalıştırmak için birkaç satır kodu ayrı bir yönteme sarmanız gerekmez. Verimli? Evet dedim.
Örneğin, Scala'da basit bir Hello World programı scala>println(“Merhaba Dünya”);
Aşağıdaki resimde gösterildiği gibi JShell komutunu çalıştıralım:
Java 9'da Proje Yapbozu
Java 9'daki yeni özelliklerin en önemli kozu tamamen yeni modül sistemidir. Karmaşık sistemler oluşturmak genellikle belirsizliğe neden olan yüksek seviyeli, karmaşık kodları içerir. Kod karmaşıklığı ile iki temel sorunla karşı karşıya kalınır: Kodun kapsüllenmesi zordur ve bir sistemin farklı JAR dosyaları arasında açık bir bağımlılık kavramı yoktur. Her genel sınıfa, sınıf yolundaki diğer herhangi bir genel sınıf tarafından erişilebilir. Bu, genel API olması amaçlanmayan sınıfların gereksiz kullanımına yol açar. Ayrıca, sınıf yolunun kendisi sorunludur: Gerekli tüm JAR'ların orada olup olmadığını nasıl anlarsınız ve yinelenen girişlere ne dersiniz? Modül sistemi her iki sorunu da çözer.
Java 9'un sağlam yapısının görüldüğü yer burasıdır. Modüler JAR dosyaları ek bir modül tanımlayıcı içerir. Bu modül tanımlayıcısında, diğer modüllere olan bağımlılıkları ifade etmek için 'requires' ifadeleri kullanılır. Ek olarak, 'exports' ifadeleri, hangi paketlerin farklı modüller tarafından erişilebilir olduğunu kontrol eder. Varsayılan olarak, dışa aktarılmayan tüm paketler modülde kapsüllenir.
Aşağıdaki gibi bu projenin bir parçası olan çeşitli JEP'ler vardır:
JEP 200 – modüler JDK: Bu, derleme zamanında, oluşturma zamanında veya çalışma zamanında birleştirilebilen JDK'yı modülerleştirmek için Java platform modül sistemini uygular.
JEP 201 – modüler kaynak kodu: modüller oluşturmak için kullanılır ve oluşturma araçlarının oluşturulan modülleri derlemesine izin verir
JEP 220 – modüler çalışma zamanı görüntüleri: Bu JEP, JDK ve JRE çalışma zamanı görüntülerini modülleri barındıracak şekilde yeniden yapılandırarak performansı, güvenliği ve sürdürülebilirliği artırır
JEP 282 – Java bağlayıcısı olarak bilinen jlink: paketleme modülleri olarak kullanımlar ve bunların daha kısa çalışma sürelerine bağımlılıkları.
Çok sürümlü JAR dosyaları
Java platformunun yeni özelliklerinden daha yeni sürümlerde yararlanmak için kitaplık geliştiricilerinin kitaplıklarının daha yeni bir sürümünü yayınlaması gerekir. Yakında, geliştiriciler tarafından sürdürülen kütüphanenin birden fazla sürümü olacak ve bu felaket olabilir. Bu sınırlamanın üstesinden gelmek için Java 9, geliştiricilerin farklı Java sürümleri için farklı sınıf dosyalarının sürümleriyle JAR dosyaları oluşturmasına olanak tanıyan JAR dosyalarının çoklu yayımını içerir. Bu örneğe bir göz atın.
Geçerli JAR dosyalarının bir gösterimi aşağıdaki gibidir:
kavanoz kökü
- Bir sınıf
– B.sınıfı
– C.sınıfı
Çok sürümlü JAR dosyalarının nasıl göründüğü aşağıda açıklanmıştır:
kavanoz kökü
- Bir sınıf
– B.sınıfı
– C.sınıfı
– META-INF
– versiyonlar
– – 9
- - - - Bir sınıf
– – 10
– – – – B.sınıfı
Önceki çizimde, JAR dosyaları iki Java sürümü 9 ve 10 için sınıf dosyalarını destekledi. Dolayısıyla, JAR Java'nın 9 sürümünde yürütüldüğünde, sürümler altındaki A.class – 9 klasörleri yürütme için alınır.
Java'nın çok sürümlü JAR dosyalarını desteklemeyen önceki sürümleri, sürümler dizini altındaki sınıflar asla kullanılmaz. Bu nedenle, çok sürümlü JAR dosyasını Java 8'de çalıştırırsanız, basit bir JAR dosyası çalıştırmak kadar iyidir.
Bence Java ile işler değişmeye başlıyor. Ve bu büyüyen bir trend. Java'nın popülaritesinin ve kullanımının etkileneceği anlamına mı geliyor? Hiç de bile. Java, bugün teknoloji endüstrisinde inanılmaz derecede güçlü ve sağlam bir programlama dili olmuştur ve hala öyledir. Java öğrenmeye başlayın ve kariyerinizde fark yaratmasını izleyin. İyi şanlar!
Yazarın notu:
Bu teknoloji makalesine DevOps, Big Data ve Python gibi trend teknolojiler üzerinde çalışan Sumit katkıda bulunuyor. Ve Edureka'da Dijital Pazarlama ekibinde.