Mari kita ambil pertanyaan wawancara. Ada metode yang menampilkan NullPointerException di superclass. Bisakah kita menggantinya dengan metode yang melempar RuntimeException?
Untuk menjawab pertanyaan ini, beri tahu kami apa yang merupakan pengecualian Tidak Dicentang dan Dicentang.
Pengecualian yang dicentang harus ditangkap atau disebarkan secara eksplisit seperti yang dijelaskan dalam Penanganan Pengecualian coba-tangkap-akhirnya Dasar. Pengecualian yang tidak dicentang tidak memiliki persyaratan ini. Mereka tidak harus ditangkap atau dinyatakan dibuang.
Pengecualian yang dicentang di Java memperluas kelas java.lang.Exception. Pengecualian yang tidak dicentang memperpanjang java.lang.RuntimeException.
public class NullPointerException memperluas RuntimeException
Pengecualian yang tidak dicentang memperpanjang java.lang.RuntimeException. Itulah mengapa NullPointerException merupakan pengecualian Uncheked.
Mari kita ambil contoh: Contoh 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 akan berhasil dikompilasi. Contoh 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 juga akan berhasil dikompilasi. Oleh karena itu jelas, bahwa tidak ada yang terjadi dalam kasus pengecualian yang Tidak Dicentang. Sekarang, mari kita lihat apa yang terjadi dalam kasus pengecualian yang Dicentang. Contoh 3: Ketika kelas dasar dan kelas anak keduanya melontarkan pengecualian yang dicentang
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 akan berhasil dikompilasi. Contoh 4: Ketika metode kelas anak melempar pengecualian yang diperiksa batasnya dibandingkan dengan metode kelas dasar yang sama.
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 akan gagal untuk dikompilasi. Jadi, kita harus berhati-hati saat menggunakan pengecualian yang Dicentang.