java中的try块中的return语句和异常

ank*_*kur 1 java exception-handling try-catch

public class Test2 {
    public static void main(String args[]) {

        System.out.println(method());
    }

    public static int method() {
        try {
            throw new Exception();
            return 1;
        } catch (Exception e) {
            return 2;
        } finally {
            return 3;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个问题中try块有return语句并抛出异常...它的输出是COMPILER ERROR ....

我们知道finally块会覆盖try/catch块中的return或exception语句...但是这个问题在try块中都有...为什么输出是错误的?

Boz*_*zho 14

因为您的return语句无法访问 - 执行流程永远无法到达该行.

如果throw语句在if-clause中,那么return可能会到达并且错误将消失.但在这种情况下,拥有它是没有意义的return.

另一个重要的注意事项 - 避免从finally条款返回.例如,Eclipse编译器在finally子句中显示有关return语句的警告.


Rid*_*del 6

编译器异常来自,就像我的Eclipse老兄说的那样

Unreachable code    Test2.java  line 11 Java Problem
Run Code Online (Sandbox Code Playgroud)

永远不会达到主代码块的return语句,因为之前会抛出异常.

Alos注意到你的finally块的return语句至少是一个设计缺陷,就像Eclipse再次说的那样

 finally block does not complete normally   Test2.javajava  line 14 Java Problem
Run Code Online (Sandbox Code Playgroud)

实际上,因为finally块只是在这里提供一些干净的关闭,所以不希望返回会覆盖通常由方法返回的结果的东西.