您好,欢迎访问一九零五行业门户网

java中finally语句的实例详解

至少有两种情况下finally语句是不会被执行的:
(1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
(2)在try块|catch块中有system.exit(0);这样的语句。system.exit(0)是终止java虚拟机jvm的,连jvm都停止了,所有都结束了,当然finally语句也不会被执行到。
在try-catch-finally中, 当return遇到finally,return对finally无效,即:
     1.在try catch块里return的时候,finally也会被执行。
     2.finally里的return语句会把try catch块里的return语句效果给覆盖掉。
结论:return语句并不一定都是函数的出口,执行return时,只是把return后面的值复制了一份到返回值变量里去了。
class exc{ int a; int b; } public class except { @suppresswarnings("finally") static int compute (){ exc e = new exc(); e.a = 10; e.b = 10; int res = 0 ; try{ res = e.a / e.b; system.out.println("try ……"); return res + 1; }catch(nullpointerexception e1){ system.out.println("nullpointerexception occured"); }catch(arithmeticexception e1){ system.out.println("arithmeticexception occured"); }catch(exception e3){ system.out.println("exception occured"); }finally{ system.out.println("finnaly occured"); } system.out.println(res); return res+3; } public static void main(string[] args){ int b = compute(); system.out.println("mian b= "+b); } }
输出:
try …… finnaly occured mian b= 2
结论: 如果没有异常, 则执行try 中的代码块,直到 try 中的 return,接着执行 finally 中的代码块,finally 执行完后 , 回到try 中执行 return 。退出函数。
class exc{ int a; int b; } public class except { @suppresswarnings("finally") static int compute (){ exc e = new exc(); // e.a = 10; // e.b = 10; int res = 0 ; try{ res = e.a / e.b; system.out.println("try ……"); return res + 1; }catch(nullpointerexception e1){ system.out.println("nullpointerexception occured"); }catch(arithmeticexception e1){ system.out.println("arithmeticexception occured"); }catch(exception e3){ system.out.println("exception occured"); }finally{ system.out.println("finnaly occured"); } system.out.println(res); return res+3; } public static void main(string[] args){ int b = compute(); system.out.println("mian b= "+b); } }
输出:
arithmeticexception occured finnaly occured 0 mian b= 3
结论: 如果try 中有异常, 则在异常语句处,跳转到catch 捕获的异常代码块, 执行完 catch 后,再执行 finally ,跳出 try{}catch{}finally{} ,继续向下执行,不会去执行try中 后面的语句。
以上就是java中finally语句的实例详解的详细内容。
其它类似信息

推荐信息