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

时间:2010-09-21 08:26:44

标签: 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;
        }
    }
}

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

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

5 个答案:

答案 0 :(得分:14)

由于您的return语句无法访问 - 执行流程永远无法到达该行。

如果throw语句位于if - 子句中,则return可能会被访问​​,错误就会消失。但在这种情况下,return在那里没有意义。

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

答案 1 :(得分:6)

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

Unreachable code    Test2.java  line 11 Java Problem

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

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

 finally block does not complete normally   Test2.javajava  line 14 Java Problem

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

答案 2 :(得分:2)

throw new Exception()无论如何都会被调用,因此try之后的throw块中的任何内容都是无法访问的代码。因此错误。

答案 3 :(得分:2)

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

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

    public static int method() {
        try {
            throw new Exception();
            return 1; //<<< This is unreachable 
        } catch (Exception e) {
            return 2;
        } finally {
            return 3;
        }
    }
}

它应该最终返回3.

答案 4 :(得分:0)

因为try块中的'return'关键字无法访问,所以这就是你得到编译时错误的原因。从try块中省略'return'关键字,然后运行你的程序,你将成功编译。