猿问

这段程序运行以后输出什么?为什么?

public class TestFinal{
    public static void main(String args[]){
        System.out.println(doSomething());
    }
    
    public static int doSomething(){
        try{
            return 1;
        }catch(Exception e){
        }finally{
            return 2;
        }
    }
}


我什么都不知道
浏览 1758回答 4
4回答

乔小欠儿

我的理解是,当走到try里时return返回的1被存在一个临时的变量里,此时若没有发生异常,一定会进入到finally代码块里(听我这的一个老工程师说底层其实是使用了goto方法进入到finally里的)。此时finally里再次使用return把2赋到了刚才存储1的临时变量里。然后返回的值就变成了2。不过在项目中是不推荐在finally里使用return的

J_Coder

try catch finally 这种机制要求finally块中的语句必须执行,所以最终会返回2而不是1.

Caballarii

当try中语句return之前会先执行finally中的语句,但这里在finally里面return了,所以实际不会return 1,而是return 2最后结果是2

天启之魂

.................我觉得编译应该会失败把.....语法明显有问题啊返回1以后,finally语句就执行不到了
随时随地看视频慕课网APP

相关分类

Java
我要回答