2024.2.10
在java处理异常中,finally语句块一定会执行的吗?
package dada; public class SystemExitAndFinally { public static void main(String[] args) { try{ System.out.println("in main"); throw new Exception("Exception is thrown in main"); //System.exit(0); } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } finally { System.out.println("in finally"); } } }
在这段代码中,无论异常是否被捕获,finally 语句块一定会执行。以下是对代码执行过程的解读:
1. 进入 try 块
输出 "in main"
抛出异常 `Exception("Exception is thrown in main")`
2. 进入 catch 块
捕获到异常,并输出异常信息 "Exception is thrown in main"
调用 `System.exit(0)` 终止程序
由于在 catch 块中调用了 `System.exit(0)`,程序会在此处终止执行,不再执行后续代码。
无论在 catch 块中调用了 `System.exit(0)` 还是在 try 块中抛出了异常,finally 块中的代码始终会被执行。因此,在这段代码中,无论异常是否被捕获,最后一行的代码 `System.out.println("in finally");` 都会执行。