先看一段代码:java
这个是方法类:函数
//方法类 public class test11 { public int test1(){ int x=1; try{ return x; //返回x }catch(Exception e){ return 9999;//随便返回,不写报错 }finally{ ++x;//x自加 } } }
测试类:测试
public class Mytest { public static void main(String[] args) { System.out.println(new test11().test1()); } }
-----------------控制台输出:------------------spa
这段代码能说出,最起码 finally 是在 return 以后才进行的,不然 ++i 就会变成2。code
可是这么说又不彻底准确,或者说细节没有考虑周全。io
请看下面一段代码:class
方法代码:test
public class test11 { //压制警告的注解,不写的话, finally 就会有黄线警告。 @SuppressWarnings("finally") public int test1(){ int x=1; try{ return x; }catch(Exception e){ return 9999; }finally{ return ++x; } } }
测试代码不变:方法
---------------------控制台输出:---------------------im
这个例子告诉咱们,严禁的说,实际上是在return 以后(并无出这个方法函数),finally 进行一个 return覆盖了前者。
try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 return 语句先执行,
finally 语句后执行,因此,返回的结果是2。return 并非让函数立刻返回,而是 return 语
句执行后,将把返回结果放置进函数栈中,此时函数并非立刻返回,它要执行 finally 语 句后才真正开始返回。