35
MELİH HİLMİ ULUDAĞ 22.07.2014 JAVA 7 & JAVA 8 YENİLİKLERİ VE ÖZELLİKLERİ

Melih hilmi uludağ 22.07.2014

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

Page 1: Melih  hilmi uludağ 22.07.2014

MELİH HİLMİ ULUDAĞ

22.07.2014

JAVA 7 & JAVA 8

YENİLİKLERİ VE ÖZELLİKLERİ

Page 2: Melih  hilmi uludağ 22.07.2014
Page 3: Melih  hilmi uludağ 22.07.2014

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ı.

Page 4: Melih  hilmi uludağ 22.07.2014

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.

Page 5: Melih  hilmi uludağ 22.07.2014

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ı,

Page 6: Melih  hilmi uludağ 22.07.2014

ÖNE ÇIKAN ÖZELLİKLER

Page 7: Melih  hilmi uludağ 22.07.2014

İ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.

Page 8: Melih  hilmi uludağ 22.07.2014

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.

Page 9: Melih  hilmi uludağ 22.07.2014

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

Page 10: Melih  hilmi uludağ 22.07.2014

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ığı.

Page 11: Melih  hilmi uludağ 22.07.2014

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.

Page 12: Melih  hilmi uludağ 22.07.2014

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 | …) {…………}

Page 13: Melih  hilmi uludağ 22.07.2014

DİĞER ÖZELLİKLER

Page 14: Melih  hilmi uludağ 22.07.2014

 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

Page 15: Melih  hilmi uludağ 22.07.2014

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

Page 16: Melih  hilmi uludağ 22.07.2014

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.

Page 17: Melih  hilmi uludağ 22.07.2014
Page 18: Melih  hilmi uludağ 22.07.2014

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)

Page 19: Melih  hilmi uludağ 22.07.2014

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.

Page 20: Melih  hilmi uludağ 22.07.2014

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

Page 21: Melih  hilmi uludağ 22.07.2014

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

Page 22: Melih  hilmi uludağ 22.07.2014

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.

Page 23: Melih  hilmi uludağ 22.07.2014

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ı.

Page 24: Melih  hilmi uludağ 22.07.2014
Page 25: Melih  hilmi uludağ 22.07.2014

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

Page 26: Melih  hilmi uludağ 22.07.2014

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. 

Page 27: Melih  hilmi uludağ 22.07.2014

 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.

Page 28: Melih  hilmi uludağ 22.07.2014

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,

Page 29: Melih  hilmi uludağ 22.07.2014

  Ü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.

Page 30: Melih  hilmi uludağ 22.07.2014
Page 31: Melih  hilmi uludağ 22.07.2014

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

Page 32: Melih  hilmi uludağ 22.07.2014

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.

Page 33: Melih  hilmi uludağ 22.07.2014

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.

Page 34: Melih  hilmi uludağ 22.07.2014

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.

Page 35: Melih  hilmi uludağ 22.07.2014

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