面试题答案
一键面试- 正常情况下的执行顺序:
- 程序首先进入
try
块执行其中的代码。 - 如果
try
块中没有发生异常,那么try
块执行完毕后,会跳过catch
块,直接执行finally
块。
- 程序首先进入
- 异常情况下的执行顺序:
- 当
try
块中发生异常时,会立即停止执行try
块中剩余的代码。 - 然后检查
catch
块,寻找与抛出异常类型匹配的catch
块,如果找到,则执行该catch
块中的代码,执行完毕后再执行finally
块。 - 如果没有找到匹配的
catch
块,异常会继续向上层调用栈抛出,若最终都没有合适的catch
块处理异常,程序会终止,但finally
块依然会在异常向上抛出前执行(除非在try
或catch
块中执行了System.exit()
等导致JVM退出的操作)。
- 当
- 若
try
块中有return
语句:finally
块仍然会执行。- 执行顺序为:当执行到
try
块中的return
语句时,会先将返回值暂存起来(如果有返回值)。 - 然后执行
finally
块中的代码。 - 最后再返回之前暂存的返回值。例如:
public class Test {
public static int test() {
try {
return 1;
} finally {
System.out.println("finally block");
}
}
public static void main(String[] args) {
System.out.println(test());
}
}
在上述代码中,会先输出finally block
,然后再返回1
。