我有以下代码
public static void nocatch()
{
try
{
throw new Exception();
}
finally
{
}
}
这给出了错误
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unhandled exception type CustomException
正如预期的那样,但在finally
块中添加return
语句会使错误消失
public static void nocatch()
{
try
{
throw new Exception();
}
finally
{
return; //makes the error go away!
}
}
有人能解释一下发生了什么事吗?为什么错误会消失?
注意:我写这段代码纯粹是为了实验!
由于您的代码现在是有效的,所以错误消失了。(不好,但有效。)
如果一个finally
块只有一个直接的return;
语句,那么整个try/catch/finaly或try/finaly语句不能抛出任何异常,因此您不需要声明它可以抛出异常。
在您的原始代码中,您的try
块可以(嗯,它将)抛出Exception
(或者实际代码中的CustomException
)-这是一个已检查的异常,这意味着您必须捕获它,或者声明该方法可能抛出它
根据javadoc。。。
The finally block always executes when the try block exits.
This ensures that the finally block is executed even if an unexpected exception occurs.
所以您的代码现在做得很正确。