【发布时间】:2010-10-30 09:44:46
【问题描述】:
如果我只放 finally 没有 catch 块将如何处理异常
【问题讨论】:
-
相关问题在这里 stackoverflow.com/questions/3954656/… 与 JLS 引用。
标签: java
如果我只放 finally 没有 catch 块将如何处理异常
【问题讨论】:
标签: java
异常会向上调用堆栈,就好像你的try块不存在一样,除了finally中的代码会被执行。
一些示例代码
try {
// an exception may be thrown somewhere in here
}
finally {
// I will be executed, regardless of an exception thrown or not
}
【讨论】:
return),异常不会向上传播。
您的异常不会被捕获,但最终会调用并执行“finally”块。您可以编写如下快速方法并查看:
public void testFinally(){
try{
throw new RuntimeException();
}finally{
System.out.println("Finally called!!");
}
}
【讨论】:
如果我只放 finally 没有 catch 块将如何处理异常
在这种情况下,异常不会被捕获或处理。会发生什么,取决于finally 子句中发生的事情。
finally 子句中的语句序列“正常”完成,原始异常将继续传播。 finally 子句中的语句序列由于某种原因“突然”完成,那么整个try 语句将因那个 原因终止。突然终止包括抛出异常、执行return、break 或continue。在这种情况下,原始异常会丢失而不会被“处理”。这有一些相当有趣的结果。例如,以下内容会压制 try 块中抛出的任何异常。
public void proc () {
try {
// Throws some exception
} finally {
return;
}
}
带有finally子句的try语句的详细信息在JLS 14.20.2中列出
【讨论】: