是的,我们可以 在另一个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