Apr 28

Java’nın en son geliştirilmiş hali yayınlandı. Java SE 6 update 10 sürümü içerisinde önceki Java sürümlerinde bile bulunmayan özellikler barındırmakta.

Bu sürüm Java 6 versiyonunun 10. update halidir. Bilindiği üzere update’lerde yeni özellik eklenip API değişikliğine gidilmez, daha çok var olan hatalar(bugfix) düzeltilmeye çalışılır. Fakat buna rağmen Java’nın bu 10. update’inde önemli değişiklikler yapılmış.

Java Kernel

Java içerisinde birçok API barındırıyor. Bunlar Swing, AWT, SQL, RMI gibi API’ler. Bu API’lerin işimizi kolaylaştırdığı bir gerçek fakat her bir versiyonda yeni API’lerin de ortaya çıkmasıyla JRE(Java Runtime Environment) boyutu giderek büyüyor. Java geriye dönük bir dil olduğu için 1.1 versiyonunda da olan API’ler 6. versiyonda yer almaktadır.

Yukarıdaki resimden Java boyutunun nasıl hızla büyüdüğünü görebilirsiniz.

Java’nın çekirdeği(kernel) değiştirildi ve böyle bütün JRE indirmek yerine sadece basit bir Java sınıfını çalıştırabilecek JRE indiriyoruz. Eğer JRE kendisinde bulunmayan bir API’ye ihtiyacı olursa internetten kendisi indirmeye çalışıyor.

Yukarıda tüm JRE boyutunun 14.4 MB olduğunu ama ana çekirdeğin boyutunun yaklaşık olarak 3MB olduğunu görebilirsiniz. Daha detaylı bilgiyi buradan bulabilirsiniz.

Java Plug-In
Appletlerin browser içerisinde çalışma şekli değişti. Artık browserdan bağımsız olarak farklı bir süreç olarak çalışacaklar fakat appletler browser içerisinde görüntülenecek.

Performance
Java her geliştirilmesinde biraz daha hız kazanıyor. Bu update ile de performans sorunları çözüldü. Özellikle 3D API’sinde performans oynamaları yapıldı.

Nimbus Look and Feel
Bahsetmek istediğim son değişiklik ise görsel bir değişiklik.
Nimbus Look and Feel görüntüsü Java 6 Swing görseli olarak eklendi.

Fakat halen default olarak Metal Look and Feel geliyor. Bunu Java 6 update 10 kullanıyorsanız bir satır kod ile Nimbus Look and Feel görseline geçirebilirsiniz.

UIManager.setLookAndFeel(”com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel”);

yada komut satırında

-Dswing.defaultlaf=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel

Java 6 update 10 sürümünü indirebilirsiniz.

SwingSet3 örneğini buradan görebilirsiniz fakat bilgisayarınızda Java 6 kurulu olması gerekmekte.

yazan ekocaman \\ tags: , ,

Jul 08

log4jYazdığınız kod içerisine log cümlecikleri eklemek aslında basit bir debugging mantığıdır. Bazen bu tek kullanışlı yöntemde olabilir. Debug etmek için loglama daha çok dağınık sistemler için kullanılır.

Bir başka görüş ise kod içerisindeki loglama satırları kodu hem kirletmekte hem de kodun performansını azaltmakta olduğunu belirtir. Ve daha sonradan log satırlarını kaldırmak istediğinizde tekrardan kodun içerisinde teker teker aramamız gerekecek.

log4j ile kod içerisine yazdığınız log satırlarını kodu değiştirmeden properties dosyalarını değiştirerek kontrol edebilirsiniz. Ayrıca log4j normal loglamadan daha performanslı çalışmaktadır.

log4j’yi kullanmak için yukarıdaki kütüphaneyi projenizin classpathi içerisine koymanız gerekecek.

log4j size 4 ayrı uyarı seviyesi sunacak. Bunlar önem sırasına göre : DEBUG, INFO , WARN, ERROR ve FATAL. Eğer siz uyarı seviyenizi WARN yaparsanız sadece WARN ve onun üst seviyesi olan ERROR ve FATAL loglarını göreceksiniz.

log4j’nin hangi properties dosyasını okuyacağını
PropertyConfigurator.configure(”path/to/log4j.properties”);
komutuyla sağlayabilirsiniz.

log4j.properties dosyanızda örnek olarak aşağıdakini yazabilirsiniz.

# root log level DEBUG olarak ayarlandı
log4j.rootLogger=DEBUG, A1
 
# loglar konsola yazılacak
# istersek bir dosyaya yada veritabanına da yazabiliriz
log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
# PatternLayout kullanılıyor
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

Aşağıda ise örnek kod bulunmaktadır.

import org.apache.log4j.*;
 
public class Demo {
    // Bu sınıf için log değişkeni oluşturuluyor
    static Logger log = Logger.getLogger(Demo.class.getName());
 
    public static void main(String[] args) {
        BasicConfigurator.configure();
 
        // bu yazı ekrana yazılacak
        log.info("başlıyor...");
 
        // log seviyesi runtime'da değiştiriliyor
        // WARN ve üst seviyedekiler(ERROR, FATAL) 
        // ekranda gözükecek
        log.setLevel(Level.WARN);
 
        // INFO, WARN'dan alt seviyeden olduğu için 
        // ekranda gözükmeyecek
        log.info("Bu mesaj ekranda gözükmeyecek!");
 
        try {
            // Burada exception attırıyoruz
            int x = 5;
            int y = 20 / (5 - x);
        } catch (Exception e) {
            // Ekranda gözükecek
            log.error("Hata!..", e);
        }
    }
}

yazan ekocaman

Jul 06

Dynamic Translation olarak da bilinen just-in-time compilation(JIT) yöntemi virtual machine üzerinde çalışan programlama dillerinde performans arttırmak için ortaya çıkmıştır.

Java’da kodunuzu javac komutuyla compile ettiğiniz zaman size Java Virtual Machine(JVM) tarafından anlaşılan bytecode üretilir. Bytecode işletim sistemi tarafından tanınmaz. Bu nedenle bytecode işletim sisteminden bağımsızdır ve Java ile yazdığınız bir kodu istediğiniz sistemde çalıştırabilirsiniz. Tabiki bu özelliğinden dolayı bir dezavataj oluşmaktadır. Bytecode JVM üzerinde çalıştığı için normal sistem hızından yavaş çalışmaktadır.

JIT yöntemi sayesinde Java ile yazılmış bazı kodlar JIT kütüphanesinden Java Native Interface(JNI) kullanılarak çağırılır. Bu da bize büyük bir performans artışı sağlar. Bu özellik Java’da açık olarak bulunmaktadır. JIT özelliğini kapamak için
-Djava.compiler=NONE
parametresini yazmanız yeterli olacaktır.

yazan ekocaman

Jun 26

MavenMaven adını yavaş yavaş duyurmaya başlayan bir Java Deployment Tool’dur.

Çoğu Java Projeleri Ant Tool kullanılarak otomatik deployment sağlanmaktadır. Ve Ant java geliştiricileri arasında bir standard(de facto) haline gelmiştir. Hatta Netbeans kendi projelerini Ant Script olarak hazırlamaktadır. Fakat gün geçtikçe Ant’in Proje Geliştirme Sürecinde yetersiz kaldığı alanlar ön plana çıktı. Mesela Ant proje ile ilgili Meta Datalar içermiyordu ve çok uzun kod yazmanız gerekiyordu. İşte bu ihtiyaçtan dolayı Maven ortaya çıktı.

Başta da dediğim gibi Maven Ant gibi bir Java Deployment Tool’dur. Maven ile Ant’in yapabileceği herşeyi yapabilirsiniz ve hatta artıları da var.

Maven Amacı

  • Proje geliştirme işlemini kolaylaştırmak.
  • Kaliteli proje bilgisi sağlamak.
  • Düzenli bir geliştirme sistemi sağlamak.
  • Tam ve dikkatli test etme pratiği sağlamak.
  • Yeni niteliklere saydam bir geçiş sağlamak.

Maven’ı http://maven.apache.org/download.html adresinden indirebilirsiniz. İndirdiğiniz sıkıştırılmış dosyayı C:/maven olacak şekilde açınız. Aynı Java’da olduğu gibi burada da Path ayarları yapmamız gerekecek. C:/maven/bin klasörünü Path değişkeni içerisine koymamız gerekecek. Kurulumumuzu tamamladık.

mvn –version

diyerek maven kurulumunu kontrol edelim. Ekrana Maven versiyonunu basması gerekecek.

Şimdi basit bir proje oluşturalım. Projemizin adı javaciMaven ve paketi ise net.javaci olsun. Aşağıdaki komutu kullanarak Maven bizim için otomatik proje yapısını oluşturacaktır.

mvn archetype:create -DgroupId=net.javaci -DartifactId=javaciMaven

Burada -DgroupId ile ana paket adını, -DartifactId ise proje adını belirtir. Yukarıdaki komutu çalıştırdığımız zaman proje isminde bir klasörün oluştuğunu göreceğiz.

Maven’ın standard bir klasör yapısı vardır.

src/main/java dizini Java kaynak dosyalarını, src/test/java test kaynak dosyalarını içerir. pom.xml ise Maven’ın proje yönetim dosyasıdır. pom(Project Object Model) dosyası sayesinde sadece birkaç satırlar proje build işlemimizi yapabiliriz.

pom.xml içeriği aşağıdaki gibi olacaktır.

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Maven geliştirme süreci birkaç aşamadan oluşur. Bunlardan bazıları;

mvn compile: proje dosyalarını compile eder.
mvn test: src/test/java klasörü altındaki test dosyalarını çalıştırır.
mvn package: compile edilmiş kodu Jar olarak paketler.
mvn install: projenin bağlı olduğu kütüphaneleri indirir.

mvn package

diyerek projeminizi deploy edelim.

java -cp target/javaciMaven-1.0-SNAPSHOT.jar net.javaci.App

komutuyla projemizi çalıştıralım.

Maven’ın en güzel yönü uyguladığımız projelerde Continous Integration‘ı kolayca uygulayabiliyor olabilmemiz. Bunun için Hudson veya Team City gibi araçları kullanabilirsiniz.

yazan ekocaman

Jun 22

Java 5 ile gelen özelliklerden biri de Autoboxing/Unboxing’dir.

Java’da iki tip vardır. Birincisi int, long, double, boolean … gibi ilkel tipler, ikincisi ise objeler için kullanılan referans tiplerdir.

Java’da Collection sınıfları parametre olarak obje almaktadır. Bu nedenle Collection içerisine bir sayı koymak istediğinizde Java 1.4 ve öncesinde ayrı bir sınıf oluşturup o sınıf içerisinde sayınızı tanımlamanız gerekecekti. Fakat Java5 ile gelen Autoboxing özelliği ile bu ilkel tip otomatik olarak referans tipine çevrilir. Örnek vermek gerekirse;

ArrayList list = new ArrayList();
int i = 10;
list.add(i); // Autoboxing 
// Java 1.4 ve öncesinde aşağıdaki satırı yazmalısınız
list.add(new Integer(i));

Eğer bu kodu Java 1.4 ve önceki versiyonda çalıştırırsanız hata alırsınız.

Unboxing ise bu işlemin tam tersidir. Yani referans tipinden ilkel tipe çevrilme işlemidir.

int sayı = new Integer(10); // Unboxing

yazan ekocaman

Jun 15

Java’da throw ve throws tanımları karıştırılan kavramlardan biridir. Aslında yazılışları aynı gibi de görünse anlamları çok farklıdır.

throw: Bu tanımlama kod içerisinde istediğimiz Exception’ı atmamızı sağlar. Bu Exception hiyerarşik olarak programın başka bölümleri tarafından tutulur.

throws: Bu tanımlama ise methodun içerisindeki işlemler sırasında bu Exception’ları atabileceği ve bu nedenden dolayı methodun try/catch blokları arasında çağırılması gerektiğini söyler.

Örnek vermek gerekirse;

public int myException(int num) throws NumberFormatException {
  if(num < 0) {
    throw new NumberFormatException();
  }
  return num;
}

Yukarıdaki örnekte myException methodu NumberFormatException atabilir çünkü mehod tanımlamasında “throws NumberFormatException” denilmiş. Eğer parametre olarak negatif bir sayı verilirse “throw new NumberFormatException();” komutuyla Exception atıyoruz. Bu method pozitif bir sayı girilirse parametre olarak girdiğimiz sayıyı dönecektir.

try {
  myException(-1);
} catch(NumberFormatException exc) {
  System.out.println("Negatif sayı girdiniz...");
}

Yukarıdaki kod atılan Exception’ı try/catch bloğu içerisinde yakalayıp ekrana “Negatif sayı girdiniz…” yazısını basacaktır.

yazan ekocaman

Jun 14

ArrayList ve Vector sınıfları hemen hemen aynı işleri yapmakla beraber aralarında farklılıklar bulunmaktadır.

  • ArrayList ve Vector içeriklerini Array içerisinde tutarlar. Fakat eklenen içerikler arttıkça bu Array’in boyutunu arttırmak gerekli. Bu artış Vector’de 2N şeklinde yani her seferinde iki katı boyutunda Array oluşturur. Fakat ArrayList’de bu işlem %50 boyutunda arttırılır.
  • ArrayList’i oluştururken başlangıç boyutunu belirtebilirsiniz. Fakat Vector’de hem başlangıç boyutunu hem de artış miktarını belirtebilirsiniz.
  • Vector’ler synchronized iken ArrayList synchronized değildir. Aynı ArrayList üzerinde aynı anda birden fazla işlem yapılırsa data kaybı yaşanabilir.

yazan ekocaman

Jun 05

Java’da programı 3 aşamada yazabilirsiniz.
1. Programın kodunu yazın ve kaydedin.
2. “javac” komutunu kullanarak java kodunuzu java byte koduna çevirin. Bu işleme “Compile” denilir.
3. “java” komutunu kullanarak java byte koduna çevirdiğimiz kodu çalıştırmak.

Bu 3 aşamada kendi programımızı yazıp çalıştırabiliriz. Şimdi örnek bir program yazalım.

1. Aşama
Window kullanıyorsanız notepad veya Linux kullanıyorsanız kwrite editörünü kullanarak “.java” uzantılı dosya oluşturacağız. Ama burada dikkat etmemiz gereken sınıf ismi ile dosya ismi aynı olmak zorundadır. Yani HelloWorld isimli bir sınıf oluşturacaksak bu sınıfı barındıran dosyanın ismide “HelloWorld.java” olmalıdır, aksi halde bize hata verecektir.

  public class HelloWorld {
    public static void main(String args[]) {
      System.out.println(“Hello World Sınıfı");
    }
  }

Yukarıdaki program ekrana “Hello World Sınıfı” yazısını basacaktır.

2. Aşama
Sıra kodumuzu compile etmeye geldi. İşletim sistemimize uygun bir konsol açıp kodumuzun bulunduğu dizine gidelim. Eğer kodunuzu “C:/java” altına kaydettiyseniz “cd C:/java” komutuyla bu dizine girebilirsiniz. “javac HelloWorld.java” komutuyla sınıfımızı compile edebiliriz. Eğer kodumuzu hatalı yazdıysak javac komutu bizi uyaracaktır. Bu hataları düzelttikten sonra tekrar compile etmemiz gerekecek.

2.JPG

3. Aşama
“.class” uzantılı dosyamızı compile işleminden sonra oluşturduk. Bu dosya içinde java byte kod yazılıdır. Bu kodumuz çalıştırmak için “java HelloWorld” dememiz yeterli olacaktır. Dikkat edin “.class” uzantısını belirtmiyoruz.

3.JPG

Ve sonuç olarak ekrana bir yazı yazdırdık.

Biz en zor yöntemle java kodumuzu yazıp, çalıştırdık. Bunun için Java Editörü kullanabiliriz. En çok kullanılan Java Editörlerinden biri de Eclipse’dir. www.eclipse.org adresinden son versiyonunu indirebilirsiniz.

yazan ekocaman

May 26

Linux işletim sistemlerinde default olarak aslında bir Java sürümü gelmektedir. GCJ (GNU Compiler for the Java) olarak bilinen bu Java sürümü Sun’ın yayınladığından farklı bir sürümdür. Paket yapısı Sun’ınki ile uyuşmadığı için GCJ’yi kullanmıyorum.

Java’yı linux’da kurmak biraz daha kolay olacak.

http://java.sun.com/javase adresinden “bin” uzantılı sisteminize uygun Java versiyonunu indiriniz. İndirdikten sonra linux’da konsolu kullanarak “chmod +x jdk1.6.0.bin” ve “./jdk1.6.0.bin” komutlarını çalıştırın. Dikkat edin jdk1.6.0.bin benim internetten indirdiğim java kurulum dosyasının ismidir.

snapshot1.jpg

Java kendini bulunduğunuz klasör altında “jdk1.6.0_01″ isminde kurmuş olacaktır. Şimdi Linux’da path ayarlarını yapmamız gerekecek. Konsolda “cd” komutunu çalıştırın, böylece kullanıcı klasörünüzün bulunduğu yere gideceksiniz. Burada bulunan .bashrc dosyasını değiştirmemiz gerekli. Bu işlem için herhangi bir editör kullanabilirsiniz. “kwrite .bashrc” komutuyla dosyayı açın ve en sonuna

#/usr/jdk1.6.0_01 Javanin kuruldugu yer
alias java='/usr/jdk1.6.0_01/bin/java'
 
JAVA_HOME=/usr/jdk1.6.0_01
export JAVA_HOME
 
PATH=$PATH:$JAVA_HOME/bin
export PATH

satırlarını yazın. Dikkat edin “/usr/jdk1.6.0_01″ adresi Java’nızı kurduğunuz klasördür. Buradaki ayarları kendi bilgisayarınıza göre yapmalısınız.

Linux’da Java kurulumunu tamamladınız. Artık yeni bir konsol açarak “java -version” komutuyla kurulumu test edebilirsiniz.

yazan ekocaman

May 24

Java Sun Microsystem’in oluşturduğu bir programlama dilidir. 1996 yılında oluşturulan ve zaman içerisinde popülerlik kazanın bu dilin en önemli özelliği sisteme bağlı olmadan yazdığınız programın her sistemde çalışmasıdır. Yani Java’da yazdığınız bir programı Apple’da, PC’de, Linux’da ve hatta cep telefonlarında bile çalıştırabilirsiniz.

Java’nın sistemden bağımsız olmasını sağlayan JVM(Java Virtual Machine - Java Sanal Makinesi)dir. Java Sanal Makinesi kendisine gönderilen komutları sistemin kaynaklarını kullanarak gerçekleştirir.

Java Object Oriented bir dildir. Java’da program yazarken gerçek dünyadaki nesneleri ifade eden sınıflar yazabilirsiniz. Mesela Araba adında bir sınıf yazarak arabanın bütün özelliklerini bu sınıf içerisinde barındırabilirsiniz. Arabanın bütün işlemlerini sınıf içerisinde işleyebilirsiniz. Bu Araba sınıfını kullanarak alt sınıflar da üretebilirsiniz.

Java’da programlamaya başlamak için Java’yı kurmanız gerekli. Şu an 1.6 versiyonu mevcut. www.java.sun.com/j2se adresinden Java son versiyonunu indirebilirsiniz. Java’yı indirirken sisteminize uygun olan seçmeye dikkat ediniz. Window, Linux ve Mac versiyonları mevcuttur.

Java’yı indirdikten sonra kurulum dosyasını çalıstırın. Java kendisini default olarak c:\Program Files\java\jdk1.6.0 dizini altına kurmaya çalışacaktır.

1.JPGKurulumun tamamlanmasından sonra PATH ayarlarını yapmamız gerekecek. Bilgisayarım’a sağ tıklayıp Özellikler’e tıklayın. Çıkan pencerede Gelişmiş sekmesini tıklayın. Aşağıdaki pencereyi görmelisiniz. Benim sistem ingilizce…

2.JPG

Sonra alt tarafta bulunan Sistem Değişkenleri düğmesine tıklayın.

3.JPG

Burada Yeni düğmesine tıklayarak

4.JPGDeğerlerini girmelisiniz. Dikkat edin alttaki değer sizin Java’yı kurduğunuz dizindir. Gerekli değerleri girdikten sonra OK diyin.

Şimdi sistem değişkeni olan Path’i ayarlayalım. Aşağıdaki gibi satırı seçin ve Değiştir düğmesine basın.

5.JPG

Değiştir düğmesine tıkladıktan sonra

6.JPG



Java’yı kurduğunuz dizin ve yanında “/bin” olacak şekilde yani benim Java “C:\Program Files\Java\jdk1.6.0″ dizininde kurulu ve bunun altındaki “bin” dizinini de katarak “C:\Program Files\Java\jdk1.6.0\bin” yazın. Dikkat edin buradaki değerler birbirleriyle “;” (noktalı virgül) ile ayrılmıştır.

Bu işlemide tamamladığımız zaman Java kurma işlemimiz bitmiştir. Şimdi Java’nın sorunsuz kurulup kurulmadığını kontrol edelim.

Sol alt taraftaki Başlat düğmesinden Çalıştır düğmesine tıklayalım. Asağıdaki pencereyi göreceksiniz.

7.JPG“cmd” komutu yazınız. Çıkan pencerede “java -version” komutunu çalıştırdığınız zaman Java’nın kurulu versiyonunu görmelisiniz.


8.JPGJava’yı başarılı bir şekilde kurdunuz. Artık kendi programınızı Java’da yazabilirsiniz.


Java dünyasına hoşgeldiniz.

yazan ekocaman