我们可以在Java中的另一个try catch块中声明一个try catch块吗?

是的,我们可以 在另一个try-catch块中声明一个try-catch块,这称为嵌套try-catch块。

嵌套的尝试捕获块

  • 如果一个内部的try statemen牛逼没有匹配的catch语句为特定的异常,控制被转移到下一个try语句catch处理器预计于匹配的catch语句。

  • 这一直持续到其中一个catch语句成功执行或所有嵌套的try语句完成为止。

  • 如果没有任何catch语句匹配,则Java运行时系统将处理该异常。

  • 使用嵌套的try块时,首先执行 内部try块。内部try块中引发的任何异常都将在相应的catch块中捕获。如果找不到匹配的catch块,则将检查外部try块的catch块,直到用完所有嵌套的try语句为止。如果找不到匹配的块,则Java运行时环境将处理执行。

语法

try {
   statement 1;
   statement 2;
   try {
      statement 1;
      statement 2;
   }
   catch(Exception e) {
      //捕获相应的异常  
   }  
}
catch(Exception e) {
   //捕获相应的异常
}
   .............

示例

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