JAVA 7 & JAVA 8 YENİLİKLERİ VE ÖZELLİKLERİ



Benzer belgeler
Android e Giriş. Öğr.Gör. Utku SOBUTAY

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Java JDK (Java Development Kit) Kurulumu:

Sunum İçeriği. Programlamaya Giriş

Android Ders Notları

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

4. Bölüm Programlamaya Giriş

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

NESNEYE YÖNELİK PROGRAMLAMA

Java Class Yapısında Finalize Metotunun Kullanımı

Java Temel Özellikleri

... ROBOTİK VE KODLAMA EĞİTİMİ ÇERÇEVESİNDE ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ DERSİ ÜNİTELENDİRİLMİŞ YILLIK DERS PLANI

KONAKLAMA ÇÖZÜMLERİ Eylül 2016

Lambda İfadeleri (Lambda Expressions)

Lecture 11: Generics

Programlama Dillerinde Kullanılan Veri Tipleri

HSancak Nesne Tabanlı Programlama I Ders Notları

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

Üst Düzey Programlama

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Temel Bilgi Teknlolojileri 1. Ders notları 5. Öğr.Gör. Hüseyin Bilal MACİT 2017

1.1 Metodolojiyi Gerçeklemek Üzere Geliştirilen Altyapı

Akademik Dünyada Özgür Yazılım. Akademik Dünyada. Onur Tolga Şehitoğlu

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Bilgisayar Sistemlerine Genel Bakış

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Metin Editörleri YRD. DOÇ. DR. ENGİN CEMAL MENGÜÇ. ALINTI:

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

Dr. Fatih AY Tel: fatihay@fatihay.net

İÇERİK 2 Java Kodlaması için Gerekli Programlar JRE, JDK kurulması ve Başlangıç Ayarları Java Kodlamayı Kolaylaştıran IDE ler Java Kod Yapısı İlk Java

Qt Temelleri. Eren BAŞTÜRK.

BEDEN EĞİTİMİ I: Haftalık ders 1 saattir (T-0 ) (U-l) (K-0).

HSancak Nesne Tabanlı Programlama I Ders Notları

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

1.1. Yazılım Geliştirme Süreci

Microsoft SQL Server Sorgulama

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

// hataları işaret eden referans

COĞRAFİ BİLGİ SİSTEMLERİ SERVER MİMARİSİ SERVER UYGULAMA GELİŞTİRME EĞİTİMİ

C# nedir,.net Framework nedir?

SAB 103 TEMEL BİLGİSAYAR KULLANIMI

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

C#(Sharp) Programlama Dili

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

ALGORİTMA VE PROGRAMLAMA I

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

ALGORİTMA VE PROGRAMLAMA I

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Java ve Linux. Bora Güngören Portakal Teknoloji Akademik Bilişim

R ile Programlamaya Giriş ve Uygulamalar

Ders Adı Kodu Yarıyılı T+U Saati Ulusal Kredisi AKTS

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

YZM 2105 Nesneye Yönelik Programlama

=~ Metodu 92 Karakter Sınıfları 94 sub ve gsub metotları 101 Hızlı Tekrar 102 Kontrol Noktası 103 Düello 106 Sonraki Bölümde 109

5. PROGRAMLA DİLLERİ. 5.1 Giriş

Öğr. Gör. Serkan AKSU 1

BMH-303 Nesneye Yönelik Programlama

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

Bölüm1. İlk Bilgiler ISBN

T.C. MALTEPE ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ YAZILIM MÜHENDİSLİĞİ LİSANS PROGRAMI Bahar Yarıyılı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Genel Programlama II

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

Java diğer programlama dilleri gibi başlı başına bir ürün değildir.

İnternet Programcılığı

Version Yeni Modüller, Eklentiler, Altyapı Güncellemeleri... 2 İşlevsel Yenilikler... 3 İşlevsel İyileştirmeler ve Düzenlemeler...

BİLGİSAYAR PROGRAMLARININ TASARIMLARINDAKİ VE KODLARINDAKİ SORUNLARIN BELİRLENMESİ ALPER FİLİZ MEHMET ALİ SERT

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

PROGRAMLAMA DERSİ 1. İNTERNET

C# ile e-posta Göndermek

Java ile OpenGL e Giriş. NetBeans IDE si üzerinden kurulum

JAVA API v2.0 Belge sürümü: 2.0.2

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

1 PROGRAMLAMAYA GİRİŞ

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Görsel Programlama 1

Vmware Esx Server Nedir Ve Ne İşe Yarar

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Java da Program Denetimi ve Operatörler

Tableau Yenilikler

Transkript:

JAVA 7 & JAVA 8 YENİLİKLERİ VE ÖZELLİKLERİ MELİH HİLMİ 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ı.

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.

t1. t2 Problem JAVA 7 nin en iyi yanı,.. t4 t3 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ı.

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

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

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.

Bilindiği üzere Try-Catch ile Hata java7 öncesi; try { } catch (NumberFormatException nfe) { } catch (XException xe) { }... java7'de ise; try { } catch (NumberFormatException nfe XException xe ) { } 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.

DİĞER ÖZELLİKLER

Graphics2D java.lang.object java.awt.graphics java.awt.graphics2d Graphics java.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.

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

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

Otamatik Get() ve Set() methodları oluşturulacak. Problemler çözüldü. İyileştirmeler yapıldı. Joda Time Library e geçildi. Not: Joda Time Library harici olarak indirilip sisteme ekleniyor. 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.

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

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

JAVA 8 İLE GELEN YENİLİKLER 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.

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-ilegelen-yenilikler http://emreesirik.com/java-java-7-cikiyor-java-7-yeni-ozellikler.html