不执行,能直接说出结果么,为啥?
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抛异常
------解决方案--------------------
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”