最后使用return时无法访问的语句?

时间:2010-03-23 17:38:19

标签: java

编译:

class Ex1 {
    public int show() {
        try {
            int a=10/10;
            return 10;
        }   
        catch(ArithmeticException e) {
            System.out.println(e);
        }
        finally {
            System.out.println("Finally");
        }
        System.out.println("hello");
        return 20;
    }
}

另一方面,这不是:

class Ex15 {
    public int show() {
        try {
            int a=10/0;
            return 10;
        }
        catch(ArithmeticException e) {
            System.out.println(e);
        }
        finally {
            System.out.println("Finally");
            return 40;
        }

        System.out.println("hello");
        return 20;
    }
}

并给出无法访问的语句System.out.println(“hello”);错误。为什么会这样?

4 个答案:

答案 0 :(得分:7)

最后有一个返回,所以你可能会得到一个无法访问的代码块错误。

finally
{   
    System.out.println("Finally"); 
    return 40;
}
System.out.println("hello"); // unreachable code
return 20;

这实际上是Java中的编译时错误。请参阅14.20部分。

  

如果a是编译时错误   声明无法执行,因为   它无法到达。

答案 1 :(得分:7)

这是unreachable code。根据编译器,System.out.println("hello");永远不会被执行。

除此之外,请勿在{{1​​}}块内写return。 (请参阅Hidden Features of Java了解您不应该这样做的原因)。

编辑:

  

是的,但终于让回归的原因   这样做?

这不是因为它处于最后一块或其他东西中。即使你删除了finally关键字,你仍然会收到错误。

finally

显然,如果你 class ex15 { public int show() { int a = 10 / 0; return 40; System.out.println("hello"); return 20; } } ,你无法执行下一行。 return 40只是意味着“无论如何都要做”。如此。

答案 2 :(得分:1)

当你在“finally”块中放入“return”时,之后的任何内容都将永远不会被执行。 “return”语句在那里结束了方法。

如果在第一个方法中放入System.out.println(),在其中的“return”语句之后,您将得到相同的错误。

答案 3 :(得分:0)

return区块中有finally。这使得任何声明无法访问之后。此外,return块中有tryfinally块中也有{{1}}。这没有意义。