java中Finally块的执行_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java中Finally块的执行

java中Finally块的执行

 2014/11/15 19:06:47  得小白者天下得  程序员俱乐部  我要评论(0)
  • 摘要:在try{}catch{}finally{}块中,都知道finally子块是肯定会执行的。当然也有个别情况,当在try{}或者catch{}块中出现强制退出System.exti(int)时,finally子块就不会执行了。这种情况不在今天的谈论范围以内。看代码更加直观些:packagepractice;publicclassFinallyRun{privateinta=0;publicintgetInt(){try{a=1;returna;}finally{a=2;//returna;}
  • 标签:all Java 执行
在try{}catch{}finally{}块中,都知道finally子块是肯定会执行的。当然也有个别情况,当在try{}或者catch{}块中出现强制退出System.exti(int)时,finally子块就不会执行了。这种情况不在今天的谈论范围以内。
看代码更加直观些:
class="java">package practice;

public class FinallyRun {
	private int a = 0;

	public int getInt() {
		try {
			a = 1;
			return a;
		} finally {
			a = 2;
//			return a;
		}
	}

	public static void main(String[] args) {
		FinallyRun f = new FinallyRun();
		int tmp = f.getInt();
		System.out.println("f.getInt() = " + tmp);
		System.out.println("f.a = " + f.a);
	}

}

我在a=1出打了断点,单步跟踪发现:尽管try中包含return,并且try中的return语句执行完,程序就会跳到finally中,继续跑下去,然后返回退出getInt()方法。结果如下:
f.getInt() = 1
f.a = 2

从结果中可以看出,getInt()方法返回值的1,而变量a的值为2。把代码中的注释取消,运行程序结果如下:
f.getInt() = 2
f.a = 2

这次变量a的值和方法返回值都为2。
过程比较简单。在try{}中return执行后,会带着这个return流进入finally子块中,虽然finally中修改了变量a的值,但是没有影响到return流中的数据;如果finally中也有return语句,那么finally子块中的return流就会覆盖之前try{}中的return流,然后从方法退出。

如有不对,敬请指正。
上一篇: 小议Java中==、equals 下一篇: C# 6.0那些事
发表评论
用户名: 匿名