日期:2014-05-18  浏览次数:20631 次

不执行,能直接说出结果么,为啥?
	public static String get(){

try {
return "1";
} catch (Exception e) {
// TODO: handle exception
}finally{
System.out.println("----");
}
return "2";
}

public static void main(String[] args) {

String s = get();
System.out.println(s);
}

------解决方案--------------------
没啥特别的还以为能输出2的,就一点finally肯定是要执行,即使catch抛异常
------解决方案--------------------
引用:
Quote: 引用:

没啥特别的还以为能输出2的,就一点finally肯定是要执行,即使catch抛异常

可是 都return 了啊


java就是这样设计的,有些资源清理(如关闭文件,数据库连接)必须总是执行,即使有异常发生,
也可以根据把需要总是需要执行的代码放进去
------解决方案--------------------
finally 在return之前执行 ,如果finally中含有return语句,其他的return语句将不执行。
------解决方案--------------------
return 并不是直接就返回值的,它先把值压入栈中等待finally里面的语句执行完毕 再出栈把值返回

如果你的finally里面也有return 就会把原来的那个值覆盖 (个人理解 觉的是这样的)
------解决方案--------------------
引用:
	public static String get(){

try {
return "1";
} catch (Exception e) {
// TODO: handle exception
}finally{
System.out.println("----");
}
return "2";
}

public static void main(String[] args) {

String s = get();
System.out.println(s);
}


结果是
----
1

分析:
在try语句块中return “-1”
只是把return的值返回给main了,但是程序的执行点还没有返回到main方法里面,而是要向下执行finally语句块(无论如何,finally都是会执行的),finally语句块里的print(“----”)执行,然后程序执行回到main方法将return的值-1赋值给s,然后print(s)

所以结果是先  打印  ----   而后打印   s=“1”