Java İstisna İşleme (Exceptions) II

watch_later 1/16/2016
Denetlenmeyen İstisnalar (Unchecked Exceptions)
Normal istisnalar denetlenen istisnalardır (checked exceptions)
       Metotlar try-catch bloğuna sahip olmalı yada throws deyimi kullanılmalıdır.
       Derlenme zamanında bu kural kontrol edilir
Denetlenen istisnalar gereksiz kod bloklarının oluşturulmasına neden olabilir.
       Bir istisna hiç bir zaman gerçekleşmeyecek olsa bile yakalanmalıdır.
java.lang.RuntimeException sınıfı ve bu sınıfın alt sınıfları da denetlenmeyen istisnalardır.


RuntimeException sınıfının java.lang paketinde bulunan ve sık karşılaşılan alt sınıfları:
       ClassCastException: temel sınıftan alt sınıfa dinamik çevrim gerçekleşmezse
       IllegalArgumentException: metoda kabul edilemeyecek bir parametre gönderilirse            
       IndexOutOfBoundsException: tanımlı olmayan bir dizi elemanına erişilmeye çalışılırsa
       NullPointerException: nesne referansı hafızada yer almayan bir nesneyi gösteriyorsa ve nesnenin üyesine erişilmeye çalışılırsa


Denetlenen ve Denetlenmeyen İstisna Hiyerarşisi
                                    
İstisna Oluşturma
       Java’nın istisnaları pek çok hatayı yönetebilmenizi sağlar ama bazen kendi uygulamalarınıza özgü durumları veya hataları yönetmek için kendi istisnalarımızı oluşturmamız gerekebilir.
       İstisnalarınızı oluşturmak için Exception sınıfından bir alt sınıf oluşturmalısınız.
       İstisnalarınızın için en azından bir yapıcı tanımlamanız ve toString() metodunun üzerinde oluşturmanız uygun olacaktır.

class BenimException extends Exception {
 private int detay;
 MyException(int income) {
  
  detay = income;
 }
 public String toString() {
  
  return "BenimException[" + detay + "]";
 }
}
static void istisnaYakala(int income) throws MyException {
 
 if (income % 2==0) throw new MyException(income);
 System.out.println("Hata yok devam et");
}

public static void main(String args[]) {
 try {
  istisnaYakala(1);
  istisnaYakala(2);
 } catch (BenimException e) {
  System.out.println("Yakalandı" + e);
 }
}


Zincirleme İstisnalar (Chained Exceptions)
       Bir istisna ile başka bir istisnayı ilişkilendirmeyi sağlar.
       Bir istisna diğer istisnanın nedenini tanımlar.
       Zincirleme istisnaların kullanımı için Throwable sınıfına iki yeni yapıcı ve iki yeni metot eklenmiştir.
            Throwable(Throwable istisnaNedeni)
            Throwable(String mesaj, Throwable istisnaNedeni)
            Throwable getCause()
            Throwable initCause(Throwable istisnaNedeni)

 static void istisnaYakala() {
        NullPointerException e = new NullPointerException("ilk istisna");

        e.initCause(new ArithmeticException("diger istisna"));
        throw e;

    }

    public static void main(String[] args) {
        try {
            istisnaYakala();
        } catch (NullPointerException e) {

            System.out.println("Yakalandı" + e);

            System.out.println("Digeri Yakalandı" + e.getCause());
        }
    }
Çoklu İstisna Yakalama
  public static void main(String[] args) {
        int sayi_1 = 10, sayi_2 = 0;
        int dizi[] = {1, 2, 3};
        try {
            sayi_2 = sayi_1 / sayi_2; // ArithmeticException istisnası için
            // dizi[3] = 4; //ArrayIndexOutOfBoundsException istisnası için

        } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
            System.out.println("Çoklu istisna yakalandı" + e);
        }
      }







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



sentiment_satisfied Emoticon