繁体   English   中英

最后在使用return时无法到达的语句?

[英]Unreachable statement when using return in finally?

这样编译:

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”); 错误。 为什么会这样呢?

最后有一个返回,因此您可能会遇到无法到达的代码块错误。

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

这实际上是Java中的编译时错误。 参见第14.20节。

如果由于语句无法访问而无法执行该语句,则是编译时错误。

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

除此之外,永远不要在finally块中写入return (有关为什么不应这样做的信息,请参见Java的隐藏功能 )。

编辑:

是的,但是最终使返回的原因是什么?

这不是因为它处于finally块之内。 即使您删除了finally关键字,您仍然会收到错误消息。

   class ex15 {
        public int show() {
            int a = 10 / 0;
            return 40;
            System.out.println("hello");
            return 20;
        }
    }

显然,如果return 40 ,则无法执行下一行。 finally只是意味着“无论做什么都要做”。 所以。

当您在“ finally”块中放置“ return”时,其后的所有内容将永远不会执行。 “ return”语句在那里结束该方法。

如果将System.out.println()放在第一个方法中的“ return”语句之后,则会出现相同的错误。

returnfinally块中获得return 这使得此后的任何语句均无法访问。 同样,您在try块中有return ,在finally块中也有return 这没有道理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM