这编译:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
另一方面,这不是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
并给出无法访问的语句System.out.println("hello"); 错误.为什么会这样?
最后有一个返回,所以你可能会得到一个无法访问的代码块错误.
finally
{
System.out.println("Finally");
return 40;
}
System.out.println("hello"); // unreachable code
return 20;
Run Code Online (Sandbox Code Playgroud)
这实际上是Java中的编译时错误.见14.20节.
如果由于无法访问语句而无法执行语句,则会发生编译时错误.
是的unreachable code.根据编译器,System.out.println("hello");永远不能执行.
除此之外,不要return在一个finally块内写.(请参阅Java的隐藏功能,了解为什么不应该这样做).
编辑:
是的,但是什么让回报终于做到了?
这不是因为它处于最后一块或其他东西中.即使你删除了finally关键字,你仍然会收到错误.
class ex15 {
public int show() {
int a = 10 / 0;
return 40;
System.out.println("hello");
return 20;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,如果你return 40,你无法执行下一行.finally只是意味着"永远做,无论如何".所以.
| 归档时间: |
|
| 查看次数: |
5561 次 |
| 最近记录: |