如果它们跟随返回,里面的语句最终会被执行吗? [复制]

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里面的代码还会执行吗?

java面试题20--如果catch里面有return语句,finally里面的代码还会执行吗?

从Mybatis中#和$的区别到SQL预编译

异常处理机制中的return关键字