Ana içeriğe atla

Java 6 Yenilikleri

Uzun bir aradan sonra teknik bir konuda yazmaya karar verdim. Yazacağım bu yazıda Java 6 (Kod adı Mustang :) ) ile birlikte gelen yeniliklerden kısaca bahsetmeyi düşünüyorum. Yazı kendi cümlelerimden oluşacağı gibi biraz da çeviri olacaktır.

Öncelikle başlıklar halinde Java 6 ile birlikte gelen yeni özellikleri görelim(Parantez içerisindeki JSR ifadeleri "Java Specification Request" anlamına geliyor ve ilgili özelliğin tanımlandığı belirtim dosya numarasını gösteriyor):
Genel olarak başlıkları gördükten sonra kısaca ne yenilikler getirildiğinden bahsedelim.

Web Servisleri:Web servis istemcileri geliştirmek için kullanımı kolay bir uygulama geliştirme arayüzü sunulmaktadır. (Bkz)
Betik Kullanımı:Java kodunuz içerisinde betik kodu kullanıp ikisini bir arada kullanabiliyorsunuz (Bkz). Bir çok betik dilini ekleyerek genişletebiliyorsunuz (Bkz). Bu bayağı tartışılan bir konuydu. Çoğu insan çok kolay işleri bir betik dili ile yaparak Java'ya eklemeyi önemli olarak görüyor.
JDBC 4.0: Güncel JDBC uygulama geliştirme arayüzü bu sürümle birlikte dağıtılıyor (Bkz). Daha önce bu günlükte bahsettiğim Java DB birlikte dağıtılarak gömülü veritabanı kullanımı destekleniyor (Bkz).
Yeni Masaüstü Özellikleri: Swingworker, JTable sıralama, GroupLayout ve daha fazla yeni özellik bu sürümde eklenmiştir (Bkz).
İzleme ve Yönetim: Tüm izleme ve yönetim araçları (Bkz) gereksinim durumunda eklenecek hale getirildi. Ve yeni bir araç olan jhat eklendi.
Derleyici Erişimi: Program içerisinden javac derleyicisini kontrol edebiliyorsunuz.
Eklenebilir ("pluggable") açıklayıcı bilgiler ("annotation"):Kendi açıklayıcı bilgilerinizi tanımlayarak uygulamanız içerisinde kullanıp işleyebiliyorsunuz.
Masaüstü Konuşlandırma: Swing artık daha güzel görünüp, daha hızlı çalışıyor. Çalışma zamanı ve uygulama kurulumu yenilendi.
Güvenlik: PKI, Java GSS, Kerberos ve LDAP gibi servislerle bütünleştirme desteği geldi.
Başarım ve Kalite: İstemci ve sunucuda iki basamağa kadar başarım artışı sağlandı.

Yukarıdaki özellikler genel olarak Java 6 ile gelen yenilikleri içeriyor. Özelde ne yenilikler var, onları da kod örnekleriyle bir günlük yazısından faydalanarak Türkçeleştiriyorum.

I/O'daki değişiklikler

Şifreleri ekranda göstermeden okuma: Java SE 6 ile terminalden ekranda görünmeden (özellikle şifre okumak için çok iyi) girdi alabilme özelliği sağlanmış durumda. Bunu java.io.Console ile yapabiliyorsunuz:
import java.io.Console;
...
char[] password = System.console().readPassword("password: ");
// sifreyi kullan
...
// sifreyi temizle
java.util.Arrays.fill(password, '\0');
Belirtilmesi gereken bir kaç özellik:
  • System.console() standart giriş veya standart çıkış terminal değilse null döndürür.
  • readPassword() bir dizi döndürür, böylece yukarıda gösterildiği şekilde null haline getirebilirsiniz.
  • readPassword() terminalin karakter kümesini kullanır. Bu Charset.defaultCharset() olmayabilir.
Kritik mesaj kutusu gösterimi: Windows'ta bir hata oluştuğunda ekranda kritik hata mesajı çıkabiliyor. Örneğin disket sürücüye eriştiğinizde bu hata mesajı çıkabilir ve rahatsız edici olabilir. Yeni sürümde bu önleniyor.
    new File("A:\\tmp.txt").exists();
Şeklinde bir kod çalıştığı zaman herhangi bir mesaj çıkmadan eğer A sürücüsünde disket yoksa exists() false döndürüyor.

Disk alanının bulunması: java.io.File içerisinde eklenen aşağıdaki metodlar disk alanı ile ilgili bilgiye erişmenizi sağlıyor:
Dikkat edilmesi gereken nokta bu metodların döndürdüğü değerler, yaklaşık değerlerdir. Arka plandaki işleri dikkate almamaktadırlar.

Konuyla ilgili bir kaç not:
  • getUsableSpace() sadece Microsoft Windows için quota'ları hesaba alıyor.
  • Her metod sonucu long olarak döndürüyor. Dönüş değeri erişim haklarıyla ilgili bir bilgi taşımıyor. Alana yazma izni olmayabilir.
  • 0 dönmesi disk bölümünün olmadığı veya alan olmadığı anlamına gelir.
Erişim kontrolleri:java.io.File içerisinde gelen diğer üç yeni metod erişim kontrollerini ayarlamak için kullanılabilir:
İşlemlerin başarılı olması durumunda metodlar true döndürür.

Microsoft Windows aygıtları artık dosya olarak görülmüyor: CON, NUL ve LPT gibi Windows aygıtları File.isFile() sorgusunda artık false döndürüyor.

File.toURL kullanımdan kaldırılıyor: Dosya isminden doğrudan URL oluşturmak saçma URL'lerin ortaya çıkmasına neden olabiliyor. Bu nedenle toURL metodu yerine
    URL u = File.toURI(dosyaAdi).toURL()
şeklinde bir kullanım yapılması gerekiyor.

Microsoft Windows için uzun yol ismi: Windows için artık 260 karakterlik (bu platformun sınırı) dosya yolu ismi kullanılabiliyor.

Diğer Dosya Sistemi Değişiklikleri:
  • File.length() pagefile.sys gibi özel dosyalar için 0 döndürüyor. (Bkz)
  • File.createNewFile() varolan bir dizin için yanlışlıkla IOException atarken artık false döndürüyor. (Bkz)
  • File.listFiles() bağlanmış nfs dizinleri için artık doğru sonuçlar döndürüyor. (Bkz)
  • File.deleteOnExit() yapılan dosyalar kapanma esnasında doğru çalışması için listeye atılarak çıkarken tek tek siliniyor. (Bkz)
Koleksiyonlardaki Yenilikler
jar ve zip değişiklikleri
  • Açılan jar dosyasındaki dosyaların zaman bilgisi olarak açılma zamanı yerine diğer araçlardaki gibi dosyaların zamanı kullanılmaya başlandı.
  • Açık zip dosyalarının sayısındaki 2036 üst sınırı kaldırıldı. Artık platformun destekleyebildiği sayıda zip dosyası açık olabiliyor.
  • Bir zip dosyasındaki girdi (dosya) sayısı sınırı dosyadaki girdi sayısı sahasının 2 byte olması yüzünden 64k oluyordu. Bu yüzden bu saha gözardı edilerek bu sınır kaldırıldı.
  • Microsoft Windows için uzun isimlendirme zip dosyaları için de gerçekleştirildi.
Buraya kadar yazdıklarım genel olarak yeniliklerdi. Aşağıdaki bağlantılar ve o bağlantılar içerisindeki diğer bağlantılar yardımıyla daha ayrıntılı bilgilere erişebilirsiniz.

Kaynaklar ve Ayrıntılı Bilgiler için Bağlantılar:
Java SE 6
What's New in Java SE 6.0
Java SE 6 Key Features
Java SE 6: Top Ten
Introduction to Java 6.0 New Features, Part I

Yorumlar