看别人代码记录2(关于finally)

来源:互联网 发布:最大的mac论坛 编辑:程序博客网 时间:2024/04/28 17:45

public class Test1 {public static void main(String args[]) {Test1 t = new Test1();int b = t.get();System.out.println(b);System.out.println(t.get2());System.out.println(t.get3().getI());}public int get() {try {return 1;} finally {return 2;}}public int get2() {int i=1;try {return i;} finally {i=i+1;}}public MyDate get3() {MyDate x=new MyDate();x.setI(1);try {return x;} finally {x.setI(2);}}class MyDate{int i;public int getI() {return i;}public void setI(int i) {this.i = i;}}}



相信 绝大数的java开发者 看到这个代码对输出结果都犹豫。 很少有很干脆的 确定知道输出结果的。这个结果是2  我顺便写了更多的测试语句 这样会理解的跟清楚一点。

输出是2,1,2

其实看着结果 应该都能知道 究竟怎么一回事。 在try 的return之前 无论什么情况 都肯定要执行finally的 而执行finally的时候。 返回值其实 赋值给了一个新的对象。然后执行完finally后 返回之前备份的那个值。 所以对原始类型 和 对象类型的处理 会不同。


原创粉丝点击