星期一
动手动脑
CatchWho.java的运行结果
原因分析:
内层先抛出了ArrayIndexOutOfBoundsException异常,直接被内层捕获,第二层又抛出了ArithmeticException异常,被输出发生ArithmeticException捕获
CatchWho2.java的运行结果
原因分析:
内层抛出了ArrayIndexOutOfBoundsException异常,未被内层捕获,故之后的代码没有执行,直接跳到外层的ArrayIndexOutOfBoundsException异常捕获
EmbedFinally.java运行结果:
原因总结:
本程序共三个try-catch-finally嵌套,每个try、catch、finally均有输出语句。输出顺序为从第一个try开始执行三次,catch仅执行最里层level3,finally从最里层向外执行。
Finally主要用于解决资源泄露问题,它位于catch语句块后,JVM保证它一定执行,因此从最里层执行,毫无疑问。
由于finally语块中可能发生异常,比如此处的level3就发生java.lang.ArithmeticException异常,一旦发生此种异常,先前异常就会被抛弃,故仅仅最里层的catch捕获到异常,之后由于异常被抛弃,level2、level3的catch并未捕捉到异常不显示。
另外根据try-catch方法使用,try语句块一有异常,则找相应catch捕获经验得知,三个try中均为异常错误,故依次执行try中语句块
System.exit(0)直接结束程序了,故finally语句未被执行