2 回答
TA贡献1880条经验 获得超4个赞
try块后catch块不是必须的,但如果try块后没有catch块,就必须有finally块,也就是说try不能单独使用。
try块后不接catch,在框架设计上常出现,本方法若出现Exception时,自己不处理,抛出到框架专门处理Exception的特定位置去统一处理。
这个Exception会向上抛至调用处,如果仍没有catch就会再向上抛,如果程序一直没有处理,这个Exception最后会抛到jvm中,然后jvm就会报告一个错误。
你这里的代码,Exception会在main函数的try-catch中捕获并处理。
20行的catch是属于另一个try块的,与test函数中的finally无关。当test函数的try块中出现异常,就会直接跳进finally,finally块中的内容执行完后,再将产生的异常向调用者抛出,也就是main函数。在main函数的try-catch中捕获并处理。
也就打印了finally exception
最后被catch到的异常是NullPointerException空指针异常。
第13行 String x = null;
对象都不存在,第14行x.toString()就会产生一个NullPointerException。
TA贡献1817条经验 获得超14个赞
12行的try语句可以不用catch.这里发生的空指针异常在20行的catch处理了。
20行的catch是在finally语句之后执行的么? 是的。
错误原因就是x.toString()这个方法,发生空指针异常。
x不能为null。
添加回答
举报