Upload
cecilia-gould
View
130
Download
0
Embed Size (px)
DESCRIPTION
Melih hilmi uludağ 22.07.2014. Java 7 & java 8 yenilikleri ve özellikleri. Java SE 6 çıkış tarihi 11 Aralık 2006 . Yaklaşık 4,5 yıl farkla Java SE 7 yayınlandı. Bu süreçte Java SE 6 nın 26 kadar güncellemesi verilse de, Java tutkunları JDK 7 için sabırsızlanıyorlardı. - PowerPoint PPT Presentation
Citation preview
MELİH HİLMİ ULUDAĞ
22.07.2014
JAVA 7 & JAVA 8
YENİLİKLERİ VE ÖZELLİKLERİ
Java SE 6 çıkış tarihi 11 Aralık 2006. Yaklaşık 4,5 yıl farkla Java SE 7
yayınlandı. Bu süreçte Java SE 6 nın 26 kadar güncellemesi verilse de, Java
tutkunları JDK 7 için sabırsızlanıyorlardı.
JAVA 7 İLE GELEN YENİLİKLER
Genel olarak,
Performans güçlendirilmiş, kararlılık ve güvenirlilik sağlanmış. Daha zengin internet uygulamaları için Java Eklentisine yönelik
iyileştirmeler yapılmış. Java kodu yazma ve optimize etme üzerine dile yenilikler ve
iyileştirmeler getirilmiş. Java dışı dilleri daha etkin desteklemek için Java Virtual Machine
iyileştirmeleri sağlanmıştır.
Problemi daha akıllı bir biçimde alt problemlere parçalayacak ve bu
alt problemlerin çözümüne götüren iş parçaları arasında düşük eş
zamanlama (synchronization) maliyeti olan yapılara ihtiyacımız var.
Nihayet Java 7 Böl/Katıl çatısı (Fork/Join Framework) olarak
adlandırılan bir çözüm sunarak çok çekirdekli sistemlerde uygulama
geliştirmeyi nispeten kolaylaştırdı.
Problem
t1
t2
t3
t4….
….
….
BÖL VE YÖNET/KATIL
JAVA 7’ nin en iyi yanı,
ÖNE ÇIKAN ÖZELLİKLER
İlkel tiplerden tam sayıların
değerlerini tutabildiğimiz
byte, short, int ve long
tipleri artık binary şekilde
tanımlayabiliyoruz. Yani
sayıların başlarına “0b” ya
da “0B” yazabiliyoruz.
B’nin burada küçük büyük
harf olması herhangi bir
şeyi değiştirmiyor.
1.Değişkenleri Binary olarak tanımlayabiliyoruz.
2.Sayısal değişkenler arasına alt çizgi konulabiliyor. Sayısal tipleri artık
basamaklar arasına alt
çizgi yazarak
tanımlayabiliyoruz. Yalnız
ondalıklı sayılarda
noktadan hemen önce ya
da sonra, long tiplerde de
‘L’ harfinden önce alt çizgi
kullanamıyoruz. Bunun
yanında sayısal değerin en
başına ya da en sonuna da
alt çizgi koyamıyoruz. Alt
çizgi kullanımı bize
okunurluk sağlıyor.
Java’nın sayılı
eksikliklerinden görülen
bu durum giderilmiş.
Artık String değişkenleri
switch komutu ile
kıyaslayabiliyoruz.
3. Switch kullanımında artık String türe izin veriyor.
6.0
Generic tipler kullanırken
yazdığımız <> işaretleri arasındaki
objeler, yaratılan instance’larda da yine aynı şekilde yazılıyordu. Bu da
sadece tanımda bile bir sürü karmaşaya yol açıyordu. Java 7 ile beraber new ile
yarattığımız instance’larda <>
açıp kapatmak yeterli olacak.
4. Generic tiplerde kullanım kolaylığı.
Varargs kullanırken parametre sayısı belli olmayan değişkenleri metot içerisinde dizi
gibi kullanabiliyorduk. Yalnız çalışma anında
nesnelerin birbirlerine cast
edilememesi (ClassCastException)
gibi hatalarla karşılaşıyorduk. Artık
derleyici gelişmiş uyarı ve hata
mesajları veriyor.
5. Varargs’ ta (parametre sayısı belli olmayan metot) iyileştirmeler var.
6. MULTI-CATCH ile hata yakalama daha kolay hale geldi.
Bilindiği üzere
Try-Catch ile Hata
yakalamada birden
fazla hatayı Catch de
karşılamak için hep
yeniden blok açılırdı.
Artık « I » Operatörü
ile birden fazla hata
nesnesini tek seferde
yazmak mümkün
hale geldi.
java7 öncesi;try {…………} catch (NumberFormatException nfe) {…………} catch (XException xe) {…………}...
java7'de ise;try {…………} catch (NumberFormatException nfe | XException xe | …) {…………}
DİĞER ÖZELLİKLER
Graphics2Djava.lang.Object
java.awt.Graphicsjava.awt.Graphics2D
Graphicsjava.lang.Object java.awt.Graphics
Graphics
Graphics2D
Graphics2D iki boyutlu bir grafik, metin ve
görüntüleme yetenekleri ile ilgili 2D Java API
parçasıdır. Eski Graphics sınıfının aksine, Graphics2D
koordinat dönüşümlerini destekler. Ayrıca geometri, renk
ve metin mizanpajı üzerinde daha iyi kontrol sağlar.
Graphics2D
Garbage Collector yapısı Garbage-First Collector yapısı
Garbage-First Collector JDK7 nin 4.versiyonunda dahil olmuştur. GC1 in çoklu işlemcili
bilgisayarlar (sunucu bilgisayar) için tasarlandığını söylemek gerekir. GC ye göre yetenekleri ve
performansı arttırılmış yapıya sahiptir.
Serial GC aynı anda tek thread(iplik) çalışabilir, aynı anda birden fazla thread çalışan GC sistemine ise Parallel GC adı verilmektedir . GC1 i GC den ayıran en belirleyici özellik Seri ve Paralel çalışma biçiminin daha başarılı olmasıdır.
vs
Garbage-First Collector
JDK 7u4 ile birlikte G1 (Garbage First) olarak adlandırılan yeni bir çöp
toplayıcısı geldi. Uzun dönemde, G1’in Java platformunun tek çöp
toplayıcısı olması hedeflenmektedir. JSM’nin en zayıf halkası çöp
toplayıcıdır. Çöp toplama sırasında tüm uygulamanın iş parçalarının
durdurulduğu, "tüm dünyanın durduğu" (stop-the-world) bir evre vardır. Bu
evre boyunca uygulama hiçbir iş yapmaz. Ne yazık ki çöp toplayıcı
algoritmaları Heap boyutuna göre ölçeklenebilir değildir. Heap boyutu
arttıkça bu süre de hızla artmaktadır. Örneğin 64GB heap boyutu olan bir
JSM’de bu süre bir dakikayı aşabilir. G1 bu süre için bir sınır tanımlamamıza
olanak sağlıyor.
Paket yapısında yenilik sağlanmış.
Bu yapı jar yapısını daha düzgün hale getirdi.
Versiyon desteğini, aktif erişimi(reflective), dağıtım formatını(Java Module) bize
sağlayacak.
Dinamik yükleme modülü getirildi. Bu sayede Sistemin başlama süresi kısaltıldı.
Modularity (Modulerlik)
Java Kernel (Java Çekirdeği)
Otamatik Get() ve Set() methodları oluşturulacak.
Date/Time API Problemler çözüldü. İyileştirmeler yapıldı.
Joda Time Library e geçildi.
Joda Time Library: dayOfYear, hourOfDay gibi basit sahalar ile önemli tarihsel bilgileri hızlıca elde etmemizi sağlarken sunduğu hizmet sınıfları ile karmaşık tarih işlemlerini kolayca yapabilmemize olanak verir. Yaygın olarak kullanılan kitaplık şu an için (sürüm 2.0) 8 takvim sistemini desteklemektedir.
Not: Joda Time Library harici olarak indirilip sisteme ekleniyor.
Desktop uygulamaları için kullanılan swing
kütüphanesi yenilenmiş. Swing kütüphanesi kullanarak
daha görsel ve göze hoş gelen uygulamalar
yazılabilecek.
Bean binding özelliği iyileştirilmiş.
Swing
Annatation Type (AT)=>@
Hatırlatma:
Java Uzantıları .xml ya da .properties olan bu dosyalarda tutulan veriler isim ve
isme karşılık gelen değerler şeklinde tutulurlardı. Projelerimizde ayar yapacağımız
zaman bu dosyaları gömerdik sisteme. Java 5.0 ile birlikte dile eklenen Annotation
kavramı ile artık ayar dosyalarından kurtulduk.
Not: Annotation değişkenleri olarak sadece primitive tipleri, String veEnum tipleri ve tek boyutlu dizileri kullanabiliyoruz. Dizi elemanlarının tipleri de yine sadece ilkel tip, String ya da enum olabiliyor
Java 7 de ise,
Annotation desteği genişliyor.
Tür tanımlamada, ifadelerde ve diğer birçok elementde annotation daha çok kullanılacak.
Derleyici ve statik analiz araçları için kodu çalışma zamanında doğrulayacak annotationlar
yazmaya olanak vericek.
Sonuç olarak,
JDK 7 ile sadece Java diline eklemeler yapılmamış. Java virtual machine(JVM)
de bir oldukça iyileştirilmeler yapılmış. Örneğin hello world yazıp çalıştırdığımızda
println çıktısını daha çabuk görebileceğiz. Çünkü Javanın çekirdeğindeki sınıf
yükleme(class loader) kısmı oldukça iyileştirilmiş.
Java dilinin yetenekleri arttırılmış ve JVM; pyhthon, matlab vs. gibi dinamik
dilleri destekler hale geldi. JDK 7 de gelmesi planlanan bir çok özellik JDK 8 e
aktarıldı.
Genel olarak,
Lamda İfadeleri ve Sanal Genişletme Yöntemleri
Java SE 8'in öne çıkan özelliği, Lamda ifadelerinin uygulanması ve Java programlama dili ve platformunu
destekleyen yönleridir.
Tarih ve Saat API'si
Bu yeni API, geliştiricilerin tarih ve saati daha doğal, net ve anlaşılması kolay şekilde ele almasına izin vermektedir.
Nashhorn JavaScript Motoru
JavaScript motorunun hafif ve yüksek performanslı yeni bir uygulaması JDK'ya entegre edilmiştir ve mevcut API'ler
yoluyla Java uygulamaları tarafından kullanılabilir.
İyileştirilmiş Güvenlik
Çağırana duyarlı yöntemlerinin mevcut elle yönetilen listesini, bu gibi yöntemleri doğru şekilde tanımlayan bir
mekanizmayla değiştirir ve çağıranlarının hatasız şekilde keşfedilmesini sağlar.
JAVA 8 İLE GELEN YENİLİKLER
WIN_XP !
Windows 8 ‘i , Windows7 ve Vista dan ayıran küçük fark: Metro Kullanıcı Arabirimi. Yani,
Microsoft, Başlat ekranındaki eklentileri desteklemediğinden, Java Başlat ekranında çalışmayacaktır. Java'yı çalıştırmak için Masaüstü ekranına geçmeniz gerekir.
Java 8 ile birlikte gelen Lambda ifadeleri ise fonksiyonel programlama
yapmamıza olanak sağlıyor. Lambda ifadeleri sayesinde fonksiyonlar artık
dilin birinci sınıf vatandaşı olarak işlem görecek. Fonksiyon tipinden bir
değişken tanımlayabilecek ve fonksiyona parametre olarak başka bir
fonksiyonu geçirebileceğiz.
Lambda Expressions
Buradaki temel amaç, bir metoda bir obje yerine daha fazlasını vermek…
Şimdiye kadar J8 öncesinde, callback classları yazarak bu tip işlemleri yönetiyorduk. Bu da gereksiz yere uzun kodlar yazma gerekliliğini beraberinde getiriyordu. J8 deki Labmda sayesinde, 5,6 satırda yazdığımız kodları tek bir satırda yazabileceğiz.
Bir örnek üzerinden açıklayım,
Üstelik Java 8 ile gelen yeniliklerin bir kısmından kodda basit
değişiklikler yaparak yararlanmak mümkün olacaktır. Örneğin, Java
8'de Arrays yardımcı sınıfına, diziler üzerinde paralel sıralama yapmamızı
sağlayan parallelSort() metodu eklenmiştir. Bu yeteneği kullanmak için
tek yapmamız gereken,Arrays.sort() çağrısını Arrays.parallelSort() çağrısı
ile değiştirmektir. Paralel sıralamada Java 7 ile gelen Böl/Katıl çatısı
kullanılmıştır. Java 8 ile birlikte sadece diziler üzerinde değil Collection API
içinde yer alan kaplar üzerinde de paralel işler çalıştırmak mümkün
olabilmektedir.
Java 7 ile birlikte çok uzun bir süre sonra Java Sanal Makinası (JSM)
yeni bir bytecode ile tanıştı: invokedynamic. Her ne kadar yeni bir
komutla tanışmış olsak da henüz Java 7'de
derlendiğinde invokedynamic kodu ürettirecek herhangi bir Java ifadesi
bulunmuyor. Java 8'de ise fonksiyonel programlama ve arayüz metot
eklentileri (=Method Extensions) içeren kodlar
derlendiklerinde invokedynamic kodu içerebilecek
invokedynamic ve JSM’nin yapısındaki yenilikler Java
programlama dili dışındaki dillerin, JSM üzerinde yüksek başarımla
çalışmasına olanak sağlamaktadır. Java platformu çok dilli bir platforma
doğru evriliyor. Bunun ilk uygulaması Java 8 ile birlikte gelen yeni
Javascript motoru Nashorn olacaktır. Platformdaki bu yenilikler sayesinde
Javascript kodlarının çok hızlı çalıştığına tanık olacaksınız. Java 7 bunun
altyapısını oluşturdu. Java 8 ise ilk uygulamasını bize sunuyor.
Java 8’de çöp toplama ile ilgili dikkate
değer tek gelişme Kalıcı Alan
(=Perm(anent)Gen(eration)) olarak
adlandırılan alanın genel Heap alanına
eklemlenmesidir. Özellikle web
uygulamalarında sık yapılan güncellemelerden
kaynaklanan bu alanının dolmasına nedeni ile
aldığımız taşma hatası ile şimdi daha seyrek
karşılaşmak mümkün oldu.
Sonuç olarak,
Java platformu aynı .Net platformu gibi modüler değildir. Bir projede kullandığımız
iki ayrı kütüphanenin, ortak bir kütüphanenin farklı sürümlerini kullanması
durumunda, yürütme zamanında sınıf yükleyici ilk önce hangi sınıfı yüklemiş ise o
sınıf kullanılacaktır. Sınıf yükleyici aynı sınıfın farklı sürümlerini yüklemesi ve
yönetmesi mümkün değildir.Bu problemi farklı yöntemlerle çözmek mümkün olsa
da projeye geliştirme açısından zorluk katıyor.Uzun süredir beklediğimiz
modülerlik çözümü, Jigsaw projesi ile platforma kazandırılması amaçlansa da Java
8’e yetiştirilemeyeceği anlaşıldığı için çıkartılmıştı. Java 9’da bu problemin
çözülmesini umuyoruz.
Beni dinlediğiniz için Teşekkür Ederim.
Melih Hilmi ULUDAĞ
Kaynaklar:
http://www.java.com/tr/download/faq/release_changes.xml
http://docs.oracle.com/javase/7/docs/
http://www.eclipse.org/jdt/ui/r3_8/Java7news/whats-new-java-7.html
https://www.linkedin.com/today/post/article/20140409042429-11833655-java-8-
ile-gelen-yenilikler
http://emreesirik.com/java-java-7-cikiyor-java-7-yeni-ozellikler.html