编译:
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”);错误。为什么会这样?
答案 0 :(得分:7)
最后有一个返回,所以你可能会得到一个无法访问的代码块错误。
finally
{
System.out.println("Finally");
return 40;
}
System.out.println("hello"); // unreachable code
return 20;
这实际上是Java中的编译时错误。请参阅14.20部分。
如果a是编译时错误 声明无法执行,因为 它无法到达。
答案 1 :(得分:7)
这是unreachable code
。根据编译器,System.out.println("hello");
永远不会被执行。
除此之外,请勿在{{1}}块内写return
。 (请参阅Hidden Features of Java了解您不应该这样做的原因)。
编辑:
是的,但终于让回归的原因 这样做?
这不是因为它处于最后一块或其他东西中。即使你删除了finally关键字,你仍然会收到错误。
finally
显然,如果你 class ex15 {
public int show() {
int a = 10 / 0;
return 40;
System.out.println("hello");
return 20;
}
}
,你无法执行下一行。 return 40
只是意味着“无论如何都要做”。如此。
答案 2 :(得分:1)
当你在“finally”块中放入“return”时,之后的任何内容都将永远不会被执行。 “return”语句在那里结束了方法。
如果在第一个方法中放入System.out.println(),在其中的“return”语句之后,您将得到相同的错误。
答案 3 :(得分:0)
return
区块中有finally
。这使得任何声明无法访问之后。此外,return
块中有try
,finally
块中也有{{1}}。这没有意义。