ใช่ เราสามารถประกาศ . ได้ บล็อก 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