黑马程序员技术交流社区
标题: try和finally执行问题 [打印本页]
作者: 位俊鹏 时间: 2014-3-2 23:33
标题: try和finally执行问题
public class smallT
{
public static void main(String args[])
{
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}
public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}
这个代码输出的竟然是2
为什么不是1呢?在执行时先执行try,还是finally呢??
作者: ixiangfeng 时间: 2014-3-2 23:40
先执行try 然后执行finally 没问题啊
作者: 遗忘的青春年华 时间: 2014-3-2 23:44
这是java基础里面的异常问题,异常有三种格式:1,try{}catch(Exception e){};2,try{}catch(){}finally{};3,try{}finally{};而return1是抛的待处理的异常,也可以抛出去,而finally里面的代码块是一定会输出的,不管是什么内容,我也是新手,希望多多探讨!
作者: twtzhongxin 时间: 2014-3-2 23:47
在try{}中,用return,break退出,程序还是要跳到finally{}块下执行。
但try{}中用exit()退出时,就不会这样,finally{}不会执行。
作者: 行如止水 时间: 2014-3-3 00:03
finally里的语句是必须要执行的,即使在try中return了,finally还是要执行的;执行时当然先执行try再执行finally,只是finally是无论如何都会执行的语句,因此renturn 2会覆盖return 1,最终返回的是2;
作者: 位俊鹏 时间: 2014-3-3 00:10
那就是返回的1被后来的2给覆盖了,可以这么理解吗?
作者: 位俊鹏 时间: 2014-3-3 00:11
喔,咱俩理解的一样.
作者: 还是回去火星吧 时间: 2014-3-3 00:22
先执行try ,然后执行finally , finally是这个语句块中一定会执行到的语句。 为什么会出现2而没有出现1, 这个应该是覆盖了,如果是打印的话,则不会覆盖。
作者: 小周务商 时间: 2014-3-3 00:48
先执行try 然后执行finally
不管前面的try执不执行。finally后面的都会执行的。
作者: chenfc8578 时间: 2014-3-3 09:01
try finally楼上的都说的很好了,smallT t = new smallT();类名应该首字母大写
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |