Answers:
是的,finally块始终运行...除非以下情况:
System.exit(0);
另外,如果您的finally块中的方法抛出未捕获的异常,则此后将不执行任何操作(即,该异常将像在其他任何代码中一样被引发)。发生这种情况的一个非常常见的情况是java.sql.Connection.close()
。
顺便说一句,我猜您所使用的代码示例只是一个示例,但是请小心将实际逻辑放在finally块中。finally块用于资源清理(关闭数据库连接,释放文件句柄等),而不用于必须运行的逻辑。如果必须运行,请在try-catch块之前执行此操作,避免可能引发异常的操作,因为您的意图几乎肯定在功能上是相同的。
finally
然后根据正常终止和突然终止来指定的行为。
最后,块始终执行。
public class ExceptionTest {
public static void someFunction(String input) throws Exception {
try {
if( input.equals("ABC") ) {
System.out.println("Matched");
}
} catch (Exception e) {
throw new Exception(e);
} finally {
System.out.println("Input Is "+input+" Finally Executed!!!");
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println("********* Test with VALUE ********* ");
someFunction("ABC");
System.out.println("\r\n********* Test with NULL ********* ");
someFunction(null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
除非try / catch中有System.exit(0),否则try块退出时将始终执行finally块。
是。finally
除非您调用System.exit(),否则该块始终执行,因为它停止了Java VM。