如果我最终只使用了catch块,将如何处理异常
答案 0 :(得分:3)
异常将在调用堆栈中向上传递,就像你的try块不存在一样,除了finally中的代码将被执行。
一些示例代码
try {
// an exception may be thrown somewhere in here
}
finally {
// I will be executed, regardless of an exception thrown or not
}
答案 1 :(得分:2)
您的异常不会被捕获,但最终会调用并执行'finally'块。您可以编写如下快速方法并查看它:
public void testFinally(){
try{
throw new RuntimeException();
}finally{
System.out.println("Finally called!!");
}
}
答案 2 :(得分:2)
如果我最终只使用了catch块,将如何处理异常
在这种情况下,不会捕获或处理异常。会发生什么,取决于finally
子句中发生的事情。
finally
子句中的语句序列“正常”完成,则原始异常将继续传播。 finally
子句中的语句序列由于某种原因“突然”完成,则整个try
语句将终止 原因。突然终止包括抛出异常,执行return
,break
或continue
。在这种情况下,原始异常会丢失而不会被“处理”。这有一些相当有趣的后果。例如,以下内容会压缩try块中抛出的任何异常。
public void proc () {
try {
// Throws some exception
} finally {
return;
}
}
try
条款finally
语句的详细信息载于JLS 14.20.2