someVar即使执行了catch块并且抛出了第二个异常,这段代码也会被设置?
someVar
public void someFunction() throws Exception { try { //CODE HERE } catch (Exception e) { Log.e(TAG, "", e); throw new Exception(e); } finally { this.someVar= true; } }
是的,finally 块总是运行......除非:
System.exit(0);
此外,如果您的 finally 块中的方法抛出未捕获的异常,则此后将不会执行任何操作(即,将像在任何其他代码中一样抛出异常)。发生这种情况的一个非常常见的情况是java.sql.Connection.close().
java.sql.Connection.close()
顺便说一句,我猜您使用的代码示例只是一个示例,但请注意将实际逻辑放在 finally 块中。finally 块用于资源清理(关闭数据库连接、释放文件句柄等),而不是用于必须运行的逻辑。如果它必须在 try-catch 块之前运行,请远离可能引发异常的东西,因为您的意图在功能上几乎肯定是相同的。