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…

