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

这编译:

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的隐藏function,了解为什么不应该这样做)。

编辑:

是的,但是什么让回报终于做到了?

这不是因为它处于最后一块或其他东西中。 即使你删除了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”语句之后,您将得到相同的错误。

你在finally块中有一个return 。 这使得任何声明无法访问之后。 您还可以在try块中return ,并在finally块中再次return 。 这没有意义。