Bir röportaj sorusu alalım. Süper sınıfta NullPointerException oluşturan bir yöntem vardır. RuntimeException oluşturan bir yöntemle onu geçersiz kılabilir miyiz?
Bu soruyu yanıtlamak için, Kontrol Edilmemiş ve Kontrol Edilmiş istisnanın ne olduğunu bize bildirin.
Kontrol edilen istisnalar, Temel try-catch-nihayet Özel Durum İşleme'de açıklandığı gibi açıkça yakalanmalı veya yayılmalıdır. Kontrol edilmeyen istisnaların bu şartı yoktur. Yakalanmaları veya atılmaları gerekmiyor.
Java'da denetlenen istisnalar, java.lang.Exception sınıfını genişletir. Kontrol edilmeyen istisnalar java.lang.RuntimeException'ı genişletir.
genel sınıf NullPointerException RuntimeException'ı genişletir
Kontrol edilmeyen istisnalar java.lang.RuntimeException'ı genişletir. Bu nedenle NullPointerException bir Uncheked istisnasıdır.
Bir örnek alalım: Örnek 1:
public class Parent {
public void name() throws NullPointerException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws RuntimeException{
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
parent.name();// output => child
}
}
Program başarıyla derlenecektir. Örnek 2:
public class Parent {
public void name() throws RuntimeException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws NullPointerException {
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
parent.name();// output => child
}
}
Program ayrıca başarıyla derlenecektir. Bu nedenle, Kontrolsüz istisnalar durumunda hiçbir şeyin olmadığı açıktır. Şimdi, Checked istisnaları durumunda ne olduğuna bir göz atalım. Örnek 3: Temel sınıf ve alt sınıfın her ikisi de kontrol edilen bir istisna attığında
public class Parent {
public void name() throws IOException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws IOException{
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
try {
parent.name();// output=> child
}catch( Exception e) {
System.out.println(e);
}
}
}
Program başarıyla derlenecektir. Örnek 4: Alt sınıf yöntemi, aynı temel sınıf yöntemine kıyasla sınır denetimli istisna attığında.
import java.io.IOException;
public class Parent {
public void name() throws IOException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws Exception{ // broader exception
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
try {
parent.name();//output=> Compilation failure
}catch( Exception e) {
System.out.println(e);
}
}
}
Program derlenemeyecek. Bu nedenle, İşaretli istisnaları kullanırken dikkatli olmalıyız.