[英]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”语句之后,则会出现相同的错误。
您return
在finally
块中获得return
。 这使得此后的任何语句均无法访问。 同样,您在try
块中有return
,在finally
块中也有return
。 这没有道理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.