java finally 问题

Triangle23 发布于 2013/09/14 15:25
阅读 298
收藏 0

谁可以帮我解释一下下面程序的执行过程,谢谢。

public class Test {
	public static void main(String[] args) {
		System.out.println("i = " + new Test().test());
	}

	private int test() {
		int i = 1;
		try {
			return i;
		} finally {
			++i;
			System.out.println("finally is Executed…");
		}
	}
}
运行结果是:

finally is Executed…
i = 1

我知道在执行return前要先执行finally,可是为什么i的值没有++操作?麻烦帮忙解释一下,谢谢各位。

加载中
1
sdzzboy
sdzzboy
try或者catch遇到return,就会计算return的值并保存在一个地址,接着执行finally中的内容,然后再最终return。
Xsank
Xsank
这种知识从哪里看到的?
Triangle23
Triangle23
非常感谢
火烧
火烧
正解。
0
就是个精虫上脑的地方
出云之月
出云之月
回复 @Triangle23 : ++i也不行
就是个精虫上脑的地方
就是个精虫上脑的地方
回复 @Triangle23 : 哈 不好意思 写反了
Triangle23
Triangle23
@燃烧的火鸟 return i++是不行的,return ++i可以
就是个精虫上脑的地方
就是个精虫上脑的地方
回复 @Triangle23 : 我的意思是 如果你要在finally块里这样返回就可以达到改变值的目的 只是运算是不行的 原因就是楼上说的
Triangle23
Triangle23
你的楼上是正解,可以参考一下
0
出云之月
出云之月

因爲在finally里没有 return, 如果有返回值则能够更改返回值.

package testing;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("i = " + new Test().test());

	}

	@SuppressWarnings("finally")
	private int test() {
		int i = 1;
		try {
			return i;
		} finally {
			i=2;
			System.out.println("finally is Executed…");
			return i;
		}
	}
}


0
踏血无痕
嘿嘿,加深基础知识
返回顶部
顶部