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/