java中关于try语句中加入return语句,其执行顺序是什么样的

源代码如下:输出结果为
aaaa1
bbbb2

public class Test {
public static void main(String[]args) {
System.out.println("aaaa"+Test.test());;
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
System.err.println("bbbb"+x);
}
}
}
疑惑:个人理解如下,由输出结果表明,先执行了return,输出了aaaa1。然后在执行了finally,输出了bbbb2。但是如果先执行了return,不就代表了该方法结束了,所以finally不在执行?如果先执行了fanally,不应该是先输出bbbb2吗?

24个回答

简单点来说,其实是先执行return,但是return并没有执行完,然后执行finally,最后执行return的剩下部分。你可以参考下

都统一用out err这个会有不一样

try catch finally 常常一块使用, finally 代表的是最终执行语句 不管你前面执行什么 最后都会走到这段语句块中的,
finally 常常用来关闭流操作、连接等 以防资源浪费或出现堆溢出情况 ;

除非 你在try 或 catch 中 执行了 System.exit(2); 停掉JVM 这样就不会走 finally了 哈哈。

好久没写java了,怎么会这样,我记得当时学的是,try catch,如果try中有返回,会对返回值进行临时储存,然后执行finally,执行完了,才会把值返回去啊,这样,你把test方法拎出来,声明一个int保存它,然后再用system输出看顺序会不会固定

qq_34658785
卖太妃糖的古尔丹 我现在在外面,没法试
大约 3 年之前 回复

还是有点规律的,你的aaa后跟的都是1,bbb后面跟的都是2

先按顺序执行,直到return语句,在判断是否有finally,如果有,执行finally语句。
当执行finally语句时,如果fina;lly语句中有return语句,他就会覆盖前面的return语句,即使是catrch语句中,也会被覆盖

不管return执行还是不执行,都会执行finally

m0_37892044
歪桃 回复转角人生: 刚刚试了下,多运行几次,居然得到不同的结果
大约 3 年之前 回复
xuanzhangran
转角人生 就是这个顺序呀,执行return也会执行finally,不执行return也会执行finally
大约 3 年之前 回复
m0_37892044
歪桃 我就想知道他们执行的逻辑顺序是怎样的,想了一个下午了,还是没想明白
大约 3 年之前 回复
m0_37892044
歪桃 回复我的名字叫徐帆: 刚刚多运行了几次,结果居然不一样
大约 3 年之前 回复
qq_35728177
Tsui丶 第三条就是你的情况
大约 3 年之前 回复

图片说明

finally 才不管你return 在哪呢╭(╯^╰)╮

共24条数据 1 3 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问