一道关于Java的try-catch类型的题目,麻烦大佬帮忙看看

Given:
11. static void test(){
12. try{
13. String x = null;
14. System.out.print(x.toString() + " ");
15. }
16. finally{System.out.print("finally ");}
17. }

18. public static void main(String[] args){
19. try{test();}
20. catch(Exception ex){System.out.print("exception ");}
21. }
What is the result?
A. null
B. finally
C. null finally
D. Compilation fails.
E. finally exception
答案:E

12行的try语句中,可以没有catch语句么?
20行的catch是在finally语句之后执行的么?
最后就是20行catch的错误是什么呢?因为x.toString()这个方法的问题么?

开满天机
浏览 160回答 2
2回答

慕村225694

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。

大话西游666

12行的try语句可以不用catch.这里发生的空指针异常在20行的catch处理了。20行的catch是在finally语句之后执行的么? 是的。错误原因就是x.toString()这个方法,发生空指针异常。x不能为null。
打开App,查看更多内容
随时随地看视频慕课网APP