如果它们跟随返回,里面的语句最终会被执行吗? [复制]
Posted
技术标签:
【中文标题】如果它们跟随返回,里面的语句最终会被执行吗? [复制]【英文标题】:Will the statements inside finally get executed if they are following return? [duplicate] 【发布时间】:2011-07-16 11:08:23 【问题描述】:可能重复:In Java, does return trump finally?
想知道如果finally语句在return语句之后是否还会被执行?
【问题讨论】:
你能给出一个代码示例吗?因为它,这个问题对我来说似乎有点太模糊了 是什么阻碍了您简单地测试它而不是在这里问一个是-否的问题? 【参考方案1】:是的,唯一的例外是 try 块中的 System.exit(1)
【讨论】:
这是你通常不想做的事情:-)【参考方案2】:是的,即使你return
,最终也会被执行
public static void foo()
try
return;
finally
System.out.println("Finally..");
public static void main(String[] args)
foo();
输出:
Finally..
【讨论】:
【参考方案3】:如果 return 语句在其关联的 try 块之前,则不会。
如果 return 语句在关联的 try 块内,则是。
public void foo(int x)
if (x < 0)
return; // finally block won't be executed for negative values
System.out.println("This message is never printed for negative input values");
try
System.out.println("Do something here");
return;
finally
System.out.println("This message is always printed as long as input is >= 0");
【讨论】:
顺便说一句,只有当代码进入 'try' 块时,'finally' 才会出现。【参考方案4】:是的,finally 会在return
语句之后执行。
【讨论】:
请参考:***.com/questions/2824746/finally-and-return【参考方案5】:是的,当然。如果执行将进入 try 语句,finally 语句被设计为在任何情况下执行。
【讨论】:
【参考方案6】:finally 块只有在我们通过调用System.exit(int)
或Runtime.getRuntime().exit(int)
终止JVM 时才会失败。
【讨论】:
【参考方案7】:除了其他答案之外,如果您的 finally 块中有 return,则不会执行 return 之后的语句。
finally
System.out.println("In finally");
if ( 1 == 1 )
return;
System.out.println("Won't get printed.);
在上面的 sn-p 中,显示“In finally”而不显示“Won't get print”。
【讨论】:
以上是关于如果它们跟随返回,里面的语句最终会被执行吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Java - 如果我在 catch 块中返回,finally 块会被执行吗? [复制]
Java - 若try中有return语句,finally会执行吗?在return之前还是之后呢?
java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗?