欢迎来到天天文库
浏览记录
ID:25418168
大小:66.18 KB
页数:5页
时间:2018-11-20
《[计算机]try、catch、finally、return的执行顺序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、try、catch、finally、return的执行顺序publicclassJVMTest{publicstaticvoidmain(String[]args){System.out.println("aa:"+aa());}publicstaticintaa(){inta=1;intb=10;try{System.out.println("abc");returna;}finally{a=2;System.out.println("a:"+a);}}}运行结果为:abca:2aa:1由此可知:在try语句中,在执行return语句时,要返回的结果已
2、经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,因此,即使finally中对变量a进行了改变,但是不会影响返回结果。但是,如果在finally子句中最后添加上returna会怎样呢?执行结果如下:Compiling1sourcefiletoE:sunInsideJVMbuildclassesE:sunInsideJVMsrcJVMTest.java:37:warning:finallyclausecannotcomplete
3、normally}1warningcompile-single:run-single:abca:2aa:2 测试1: publicstaticinttest1() { inti=1; try { return++i; } finally { ++i; Console.WriteLine("finally:"+i); } } staticvoidMain(string[]args) {
4、 Console.WriteLine("Main:"+test1()); }结果:finally:3Main:2测试2: publicstaticinttest2() { inti=1; try { thrownewException(); } catch { return++i; } finally { ++i; Console.WriteLine("f
5、inally:"+i); } } staticvoidMain(string[]args) { Console.WriteLine("Main:"+test2()); }结果:finally:3Main:2测试3: publicstatic inttest3() { try{} finally { return1; } }结果:编译错误,控制不能离开finally子句主体。结论:1.不管出没出现异常,finally块中的语句都会执行;2
6、.当try或catch块中有return语句时,finally块中的语句仍会执行;3.finally块中的语句是在return语句执行之后才执行的,即函数返回值是在finally块中语句执行前确定的;4.finally块中不能包含return语句。总结:finally在return前执行,在finally的操作,不会改变已经确定的return的值,finally不能加return语句。出现异常,先找是否有处理器可以处理这个异常.再finally。Finally里面可以有返回语句,也可以执行,但是eclipse中会有警告。因为这样的话,finally中的r
7、eturn会覆盖掉正常和非正常return的信息,导致用户无法判断当前的情况。
此文档下载收益归作者所有