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
İ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…