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