public class FinallyTest { public static String getString(String s) { try {
return s;
} catch (Exception e) {
e.printStackTrace();
return e.toString();
} finally {
System.out.println("Run Finally");
}
} public static void main(String[] args) { String s = getString("return test...");
System.out.println(s);
}
}
运行结果:
Run Finally
return test...请解释一下为什么会先finally后return?
解决方案 »
- java接口(interface)
- 请问 带冒号的 for 循环 用法
- 有没有会osworkflow的人啊?帮忙解释下什么意思.
- javamail smtp.sina.com.cn 的连接问题
- 下载了一个poi包开发读excel文件的applet,应该把这个包放在哪个目录下面才能用
- 弱弱的问:如何知道返回的ResultSet中有几条数据???谢谢!!!!!!
- 调用JTextField 的 setText方法时出现IllegalStateException: Attempt to mutate in notification的异常
- 讨厌的启动问题
- java高手好!
- 关于package 的问题
- 关于打印对象的问题-toString()
- 关于replaceAll函数
如果返回或者抛出异常,finally里的code一定被执行,并且是在return或throw前执行。
然后程序才执行到System.out.println(s);
finally是这个方法完成后要执行的东西.你别理解成main方法后才能执行的东东.呵呵.
你先调用getString()输出Run Finally
然后又执行System.out.println(s)输出:return test...
我还没傻到像你说的那样理解if(先执行finally){
Run Finally 先打印;
}else{
return test... 先打印;
}这段代码我只是想知道先执行return还是先执行finally而已。
getString(String)方法理所当然要执行finally 的内容..System.out.println("Run Finally");
然后main()方法再执行System.out.println(s);
所以你的运行结果当然是
Run Finally
return test...
不对的地方,还请指教
再说return就退出了
你这句是运行了return s;但却没有输出,接着又执行finally,当然Run finally;
而后来才System.out.println(s);当然是接着Run finally后输出的啊!
这都不会?
别玷污了java这个词。finally的存在,就是为了不管程序发生了什么情况,他都会执行
这样确实无法证实先走finally还是return。
不过大家可以debug一下,确实是先走的finally。
//return s;
System.out.println(s);
// return "";
} catch (Exception e) {
e.printStackTrace();
//return e.toString();
} finally {
System.out.println("Run Finally");
}
} public static void main(String[] args) { getString("return test...");
// System.out.println(s);
}
}
//看下这个结果,可能会更明白点。