
"Saya ingin membicarakan satu hal lagi hari ini. Di Java, semua pengecualian dibagi menjadi dua jenis: dicentang dan tidak dicentang (yang harus ditangkap dan yang tidak harus Anda tangkap). Secara default, semua pengecualian harus tertangkap."
"Bisakah Anda dengan sengaja memasukkan pengecualian ke dalam kode Anda?"
"Anda dapat memasukkan pengecualian apa pun ke dalam kode Anda sendiri. Anda bahkan dapat menulis pengecualian Anda sendiri. Tapi kita akan membicarakannya nanti. Sekarang, mari berkonsentrasi pada pengecualian yang dilemparkan oleh Mesin Java."
"OKE."
"Jika ClassNotFoundException atau FileNotFoundException dilempar (terjadi) dalam suatu metode, pengembang harus menunjukkannya dalam deklarasi metode. Ini adalah pengecualian yang dicentang . Begini biasanya tampilannya:"
Contoh pengecualian diperiksa |
---|
|
|
|
"Jadi kita hanya menulis 'lemparan' diikuti dengan daftar pengecualian yang dibatasi koma, kan?"
"Ya. Tapi masih ada lagi. Agar program dapat dikompilasi, metode yang memanggil method1
dalam contoh di bawah ini harus melakukan salah satu dari dua hal: menangkap pengecualian ini atau mengembalikannya (ke pemanggil) , menunjukkan pengecualian yang dilemparkan kembali dalam deklarasinya. "
"Lagi. Jika metode utama Anda perlu memanggil metode yang deklarasinya berisi ' throws FileNotFoundException , …', maka Anda perlu melakukan salah satu dari dua hal berikut:
1) Tangkap FileNotFoundException , …
Anda harus membungkus kode yang memanggil metode tidak aman dalam blok try-catch .
2) Jangan tangkap FileNotFoundException , …
Anda harus menambahkan pengecualian ini ke daftar lemparan metode utama Anda ."
"Bisakah Anda memberi saya contoh?"
"Lihatlah ini:"
public static void main(String[] args)
{
method1();
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"Kode dalam contoh ini tidak dapat dikompilasi, karena metode main memanggil method1() , yang melontarkan pengecualian yang harus ditangkap."
"Untuk membuatnya dikompilasi, kita perlu menambahkan penanganan pengecualian ke metode utama. Anda dapat melakukannya dengan salah satu dari dua cara:"
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"Dan di sini kita menangkapnya dengan try-catch :"
public static void main(String[] args)
{
try
{
method1();
}
catch(Exception e)
{
}
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"Ini mulai menjadi lebih jelas."
"Lihatlah contoh berikut. Ini akan membantu Anda memahami sisanya."
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method3() throws ClassNotFoundException
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
}
public static void method4()
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
catch (ClassNotFoundException e)
{
System.out.println("ClassNotFoundException has been caught.");
}
}
"Ada satu lagi jenis pengecualian, RuntimeException dan kelas yang mewarisinya. Anda tidak perlu menangkapnya. Ini adalah pengecualian yang tidak dicentang. Mereka dianggap sulit untuk diprediksi. Anda dapat menghadapinya dengan cara yang sama, tetapi Anda tidak perlu menunjukkannya dalam klausa melempar ."
GO TO FULL VERSION