Java 在finally中使用return时无法访问语句?

Java 在finally中使用return时无法访问语句?,java,Java,这包括: class Ex1 { public int show() { try { int a=10/10; return 10; } catch(ArithmeticException e) { System.out.println(e); } finally { System.out.println("

这包括:

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.printlnholl;错误为什么会这样?

最终有一个返回,因此您可能会遇到无法访问的代码块错误

finally
{   
    System.out.println("Finally"); 
    return 40;
}
System.out.println("hello"); // unreachable code
return 20;
这实际上是Java中的编译时错误。见第节

如果 语句无法执行,因为 这是遥不可及的


finally有一个返回值,因此您可能会遇到无法访问的代码块错误

finally
{   
    System.out.println("Finally"); 
    return 40;
}
System.out.println("hello"); // unreachable code
return 20;
这实际上是Java中的编译时错误。见第节

如果 语句无法执行,因为 这是遥不可及的

这是无法访问的代码。根据编译器,System.out.printlnholl;永远不会被执行

除此之外,永远不要在finally块中编写return。看看为什么你不应该

编辑:

是的,但什么能让你最终得到回报呢 这样做

这不是因为它在最后一个街区或什么的。即使删除finally关键字,仍然会出现错误

   class ex15 {
        public int show() {
            int a = 10 / 0;
            return 40;
            System.out.println("hello");
            return 20;
        }
    }
显然,如果返回40,则无法执行下一行。最后只是意味着无论发生什么,都要一直做。所以。

这是不可访问的代码。根据编译器,System.out.printlnholl;永远不会被执行

除此之外,永远不要在finally块中编写return。看看为什么你不应该

编辑:

是的,但什么能让你最终得到回报呢 这样做

这不是因为它在最后一个街区或什么的。即使删除finally关键字,仍然会出现错误

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

显然,如果返回40,则无法执行下一行。最后只是意味着无论发生什么,都要一直做。因此。

当您在finally块中放置一个return时,它后面的任何内容都将永远不会执行。return语句在这里结束方法


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

当将return放在FINAL块中时,它后面的任何内容都将永远不会执行。return语句在这里结束方法



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

在finally块中有一个return。这使得之后的任何语句都无法访问。此外,在try块中有一个返回,在finally块中又有一个返回。这没有意义。

您在finally块中有一个返回。这使得之后的任何语句都无法访问。此外,在try块中有一个返回,在finally块中又有一个返回。这没有意义。

编译器会出现什么错误?只是一个10/0不是好主意的警告?可能是一个关于由于finally中的返回而无法访问的代码块的警告。请向我们显示编译器错误,否则将很难提供帮助。@pablochan:只需在行首添加4个空格。为什么这个问题是community wiki?编译器会出现什么错误?只是一个10/0不是好主意的警告?可能是一个关于由于finally中的返回而无法访问代码块的警告。请告诉我们编译器错误,否则将很难提供帮助。@pablochan:只需在行首添加4个空格。为什么这个问题是社区wiki?默认情况下是错误吗?我想我可以在Eclipse中将其更改为警告。为什么只有当finally的返回是一个错误而不是以前的编译器错误时。我不知道如何配置Eclipse来抑制它。@绝对-每个执行路径都会到达finally并返回。打印hello的代码不可能执行。Java将此视为编译器错误。第一个示例运行良好,因为finally块中没有返回。L:Eclipse有一个死代码选项,但我不确定今天晚些时候可能会检查它。这是默认错误吗?我想我可以在Eclipse中将其更改为警告。为什么只有当finally的返回是一个错误而不是以前的编译器错误时。我不知道如何配置Eclipse来抑制它。@绝对-每个执行路径都会到达finally并返回。打印hello的代码不可能执行。Java将此视为编译器错误。第一个示例运行良好,因为finally块中没有返回。L:Eclipse有一个死代码选项,但我不确定今天晚些时候是否会检查相同的内容。