ใช่ เราสามารถประกาศ . ได้ บล็อก try-catch ภายในบล็อก try-catch อื่น ซึ่งเรียกว่า บล็อก try-catch ที่ซ้อนกัน
บล็อก Try-Catch ที่ซ้อนกัน
- ถ้าเป็น นักลองชั้นใน ท ไม่มีคำสั่ง catch . ที่ตรงกัน สำหรับข้อยกเว้นโดยเฉพาะ การควบคุมจะถูกโอนไปยังคำสั่ง try ถัดไป ตัวจัดการการดักจับ ที่คาดไว้สำหรับคำสั่ง catch ที่ตรงกัน
- สิ่งนี้จะดำเนินต่อไปจนกว่า คำสั่ง catch ตัวใดตัวหนึ่งจะสำเร็จ หรือจนกว่า การลองซ้อน . ทั้งหมด เสร็จสรรพ
- หากไม่มีคำสั่ง catch ที่ตรงกัน ระบบรันไทม์ของ Java จะจัดการกับข้อยกเว้น
- เมื่อลองบล็อกซ้อนกัน ถูกนำมาใช้ บล็อกการลองภายใน จะถูกดำเนินการก่อน ข้อยกเว้นใด ๆ ที่เกิดขึ้นในบล็อกการลองภายในจะติดอยู่ในบล็อกการดักจับ หากไม่พบบล็อก catch ที่ตรงกัน ให้ catch block ของ outer try block จะถูกตรวจสอบจนกว่าคำสั่ง try ที่ซ้อนกันทั้งหมดจะหมดลง หากไม่พบบล็อกที่ตรงกัน Java Runtime Environment จัดการการดำเนินการ
ไวยากรณ์
try {
statement 1;
statement 2;
try {
statement 1;
statement 2;
}
catch(Exception e) {
// catch the corresponding exception
}
}
catch(Exception e) {
// catch the corresponding exception
}
............. ตัวอย่าง
import java.io.*;
public class NestedTryCatchTest {
public static void main (String args[]) throws IOException {
int n = 10, result = 0;
try { // outer try block
FileInputStream fis = null;
fis = new FileInputStream (new File (args[0]));
try { // inner trty block
result = n/0;
System.out.println("The result is"+result);
}
catch(ArithmeticException e) { // inner catch block
System.out.println("Division by Zero");
}
}
catch (FileNotFoundException e) { // outer catch block
System.out.println("File was not found");
}
catch(ArrayIndexOutOfBoundsException e) { // outer catch block
System.out.println("Array Index Out Of Bounds Exception occured ");
}
catch(Exception e) { // outer catch block
System.out.println("Exception occured"+e);
}
}
} ผลลัพธ์
Array Index Out Of Bounds Exception occured