一个try代码块可以嵌套在另一个try代码块中,由内部try代码块产生的异常如果没有被与该try代码块相关的catch捕获,就会被传送到外部try代码块.例如,下面的程序中捕获ArrayIndexOutOfBoundsException异常的不是内部的try代码块,而是外部try代码块:
public static void main(String args[]) { int nums[] = {1,2,3,4,5,6}; int denom[] = {2,3,0,4,0,4}; try { for(int i=0;i<nums.length+1;i++) { try { System.out.println(nums[i]+"/"+denom[i]+"="+nums[i]/denom[i]); } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("No matching element found"); } catch(Throwable exc) { System.out.println("some exception occurred"); } } } catch(Throwable exc) { System.out.println("some exception occurred by for"); } }
程序输出如下所示:
1/2=0 2/3=0 some exception occurred 4/4=1 some exception occurred 6/4=1 No matching element found
本例中,内部try可以处理的异常(这里是除以0错误)允许程序继续执行,而由外部try捕获的数组越界错误则使程序终止.
前面的程序总结了嵌套的try语句的重要作用之一.通常,嵌套的try代码用于以不同方式处理不同类型的错误.某些类型的错误是致命的,无法纠正.某些错误则较轻,可以马上处理.许多程序员使用外部try代码块捕获最严重的错误,让内部try代码块处理不太严重的错误.