最后使用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
。 这没有意义。