Java İstisna İşleme (Exceptions) I

watch_later 1/15/2016

       Programlar hatalı kod bloklarında beklenmedik durumlar ortaya çıkarabilir.
       Yeni programlama dillerinde hata yönetim mekanizmaları (exception handling mechanism) kullanılmaktadır.
       Hata yönetim mekanizmaları daha güçlü ve esnek bir şekilde beklenmedik durumların yönetimini sağlar.


İstisna Yakalama
       İstisnalar, hatalı durumların yakalanmasını ve kontrol edilmesini sağlarlar.
       java.lang.Exception sınıfından türetilir.
       Herhangi bir kod bloğunda hatayla karşılaşan kod istisna fırlatır (throw an exception)
       Hatanın kontrol edilmesini sağlayan kod bloğu da istisnayı yakalar. (catch the exception)
Java’da istisnalar Throwable sınıfından türetilir ve hiyerarşiye sahiptir.


Java Throwable Hiyerarşisi
Java çalışma ortamı, sıfıra bölme girişimine rastladığı zaman, yeni bir istisna nesnesi oluşturur(/by zero)ve bu istisnayı fırlatır.       
class ExpClass {
 public static void main(String args[]) {
  int sayi_1 = 0;
  int sayi_2 = 42 / sayi_1;
  System.out.println(«İstisna yakalanıyor…»);
 } 
}

İstisna Yaşam Döngüsü
  • Bir istisna fırlatıldığında, bir istisna yöneticisi tarafından yakalanarak yönetilmelidir.
  • İstisna yakalanana kadar metot çağırım yığınında (method call stack) yukarı doğru ilerler.
  • Oluşan bir istisna Java çalışma ortamı tarafından sağlanan varsayılan istisna yöneticisi tarafından yakalandığı an hatanın başladığı yerden itibaren istisna yığın izi ekrana yazdırılır ve program akışı yarıda kesilir.
public static void main(String args[]) {
 int sayi_1, sayi_2;
 try { 
  sayi_1 = 0;
  sayi_2 = 42 / sayi_1;
  System.out.println("Bunu ekrana basmayacak…");
 } catch (ArithmeticException e) { 
  System.out.println("Sıfıra bölme hatası aldınız…");
 }
 System.out.println("Tanımlı diger catch bloklarına geçiş yapılır…");
}
Sınıf Metotlarındaki İstisnalar
Metotlar bir istisna fırlatabileceklerini throws ifadesi ile belirtirler ve bu metotları çağıran metotlar, ya 
bu istisnayı yakalamalıdır ya da throws ifadesini kullanmalıdır.
class ExpClass {
 static void byZeroMethod() {
  int sayi_1 = 0;
  int sayi_2 = 10 / sayi_1;
 }
 public static void main(String args[]) {
  ExpClass.byZeroMethod();
 } 
}
Yığın İzi(Stack Trace)
İstisna yakalanana kadar metot çağırım yığınında(method call stack) yukarı doğru ilerler.
İstisnanın yığın izini printStackTrace() metodunu kullanarak ekrana yazdırılır.
public static void main(String args[]) {
 int sayi_1, sayi_2;
 try { 
  sayi_1 = 0;
  sayi_2 = 42 / sayi_1;
  System.out.println("Bunu ekrana basmayacak…");
 } catch (ArithmeticException e) {
  e.printStackTrace(); 
 }
 
 System.out.println("Tanımlı diger catch bloklarına geçiş yapılır…");
}
‘throw’ Deyimi ile İstisna Fırlatma
throw anahtar kelimesi ile kendi istisnalarımızı oluşturabiliriz.
boolean hatam;
if (hatam)
    throw new Exception("Benim Hatam");
Farklı İstisna Tiplerinin Yakalanması
Birden fazla catch ifadesi kullanılarak farklı istisna tiplerinin farklı şekillerde kontrol edilmesi sağlanabilir.İstisna sadece ilk uyumlu catch ifadesi tarafından kontrol edilir.
try {
    
} catch (ExceptionSubClass e) {
   // ExceptionSubClass istisna işlendiğinde bu blok çalışır.
} catch (Exception e) {
   // ExceptionSubClass haricinde bu blok çalışır.
}
Bu kod bloğunda Exception ve ExcepitonSubClass catch deyimlerinin yerleri değişince oluşacak hatayı görebilirsiniz.

Finally Deyimi
İstisna oluşması durumunda bile çalışması istenilen kod blokları finally içerisinde yazılır.
try {
    
} catch (Exception e) {
   
} finally {
   // catch bloğuna girdikten sonra bu blok çalışır.
}




Bir sonraki yazımda görüşmek üzere…



sentiment_satisfied Emoticon