黑马程序员技术交流社区
标题:
在try catch 中遇到的问题
[打印本页]
作者:
qq563426478
时间:
2015-3-1 20:38
标题:
在try catch 中遇到的问题
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
作者:
sofeel
时间:
2015-3-1 20:47
finally{}肯定会执行。只有一种情况能够阻挡它,那就是System.exit(0).(exit中的参数:jvm正常结束用0;非0的都表示不正常结束)
finally执行必须在return前啊。因为一return,函数就结束了。
另外我猜想:return运行前会检查有没有finally代码块的存在。
作者:
龙行无忌
时间:
2015-3-1 20:48
finally的code会执行,在return之后执行。
作者:
shuren2015
时间:
2015-3-1 20:50
这个问题挺好,我试了一下,会在return前执行
作者:
袁丙轩
时间:
2015-3-1 21:04
在return前执行
作者:
sofeel
时间:
2015-3-1 21:06
没有实践就没有发言权啊,我也动手做试验。
package pre;
public class Final {
/**
* @param args
*/
public static void main(String[] args) {
String s=finall();
System.out.println(s);
}
public static String finall(){
try {
System.out.println("函数体");
return "sad";
}finally{
System.out.println("finally");
}
}
}
复制代码
补充下:每个函数都有返回语句(return),并且是在最后一行。
finally.gif
(10.78 KB, 下载次数: 0)
下载附件
2015-3-1 21:05 上传
作者:
笑望长空,逆转
时间:
2015-3-2 12:04
地板这层受教了。
作者:
yangruijing
时间:
2015-3-2 21:57
public class Test8 {
public static void main(String[] args) {
//调用函数,并打印返回结果
System.out.println(test());
}
//自定义一个测试函数
public static String test()
{
try
{
//呈现正在执行try代码块
System.out.println("执行try!");
return "false";
}
finally
{
//呈现正在执行finally代码
System.out.println("执行finally!");
//return "true";
}
}
}
指定结果:执行try!
执行finally!
false
从执行结果中可以得到结论:try中的return语句只在finally之后执行的,此情况只是在finally中没有return语句时,若finally中也有return语句,那么try中return语句将不会被执行,程序将在执行完finally中的return语句时,直接退出。
作者:
Never、saydie
时间:
2015-3-2 22:09
准确的说,是在return之间执行:victory:
作者:
苏安东
时间:
2015-3-2 22:41
好像是在return之间执行吧
作者:
奋斗小青年
时间:
2015-3-2 23:10
无论try{}内怎么return,finally{}中的语句一定会执行
其执行顺序是try执行完,判断是否有异常,有异常执行catch语句,异常处理完成后,注意即使抛出的RuntimeException,也会执行到finally中的语句。
如果没有异常,即使try中return了,那么依旧会执行finally语句。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2