java - Try , finally 执行流程当 return 在 try block 中

标签 java return try-catch finally

try时使用finally组合,try中如果有return语句,为什么finally block 先执行?


class Palindrome
{
    public static void main(String args[]) 
    { 
        System.out.println(Palindrome.test()); 
    }

    public static int test()
    {
        try {  
                //return 0;  
                return 100;
        }  
        finally {  
            System.out.println("finally trumps return.");
        }
    }
}

在上面的代码中,请告诉我执行流程。我知道 finally 将在 try block 之后强制执行。但是在 try block 中,return statement 会将控制权交给主类。在那种情况下,控件将如何最终阻塞?

最佳答案

“第一”是什么意思?

finally 在执行离开方法之前运行。还应该什么时候运行?毕竟,这是方法的一部分。

如果你有

int x = 1;
try{
   return x;
} finally {
   x = x + 1;
}

那么该方法仍将返回 1。因此 return 语句确实在 finally block 之前以某种方式执行(以确定返回值)。

如果问题是为什么 finally block 根本不执行,那么,这就是它们的目的:要在“try” block 完成后“finally”运行,无论什么

But in try block, return statement will take the control to main class. In that case how will the control come to finally block?

如何?好吧,这就是语言(和运行时)的工作方式。

在控制流返回到调用方法之前,执行 finally block 。

从技术上讲,它甚至可以选择更改返回值(通过拥有自己的 return 语句),但强烈建议不要这样做。

关于java - Try , finally 执行流程当 return 在 try block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27117764/

相关文章:

c++ - 返回成员变量时,为什么在函数内外得到不同的结果?

ios - 如何在 Swift 2.0 中获取错误消息?

java - 优化 Java 正则表达式

java - 如何根据属性找出两个数组列表之间的差异?

java - 错误: missing return statement 3

java - 返回方法并在方法之间传递变量?

java - Navigation Drawer关闭后如何执行操作,否则Android App会卡顿

java - java arraylist中的数字按升序排序

java - 在 "try and catch "内使用 "while loop" block 时出现无限循环

r - 如何在R中用超时重启eval的循环?