Skip to content

面试速答(先看这里)

**一句话结论:**通常情况下,finally的代码一定会被执行,但是这是有一个前提的,:

60秒标准回答:

通常情况下,finally的代码一定会被执行,但是这是有一个前提的

1、对应 try 语句块被执行

2、程序正常运行

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**如果没有符合这两个条件的话,finally中的代码就无法被执行,如发生以下情况,都会导致finally不会执行:
  • **要点2:**1、System.exit()方法被执行
  • **要点3:**2、Runtime.getRuntime().halt()方法被执行
  • **要点4:**4、操作系统强制杀掉了JVM进程,如执行了kill -9
  • **要点5:**7、如果一个finally是由守护线程执行的,那么是不保证一定能执行的,如果这时候JVM要退出,JVM会检查其他非守护线程,如果都执行完了,那么就直接退出了。

**记忆锚点:**finally → JVM → try → RuntimegetRuntime → finally执行顺序 → Systemexit

加分表达:

  • 如果没有符合这两个条件的话,finally中的代码就无法被执行,如发生以下情况,都会导致finally不会执行: 1、System.exit()方法被执行 2、Runtime.getRuntime().halt()方法被执行 3、try或者catch中有死循环 4、操作系统强制杀掉了JVM进程,如执行了kill -9 5、其他原因导致的虚拟机崩溃了 6、虚拟…

追问准备:

  • 围绕「finally」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「JVM」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「try」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

📄 ✅final、finally、finalize有什么区别

打开文档:✅final、finally、finalize有什么区别

通常情况下,finally的代码一定会被执行,但是这是有一个前提的,:

1、对应 try 语句块被执行,

2、程序正常运行。

如果没有符合这两个条件的话,finally中的代码就无法被执行,如发生以下情况,都会导致finally不会执行:

1、System.exit()方法被执行

2、Runtime.getRuntime().halt()方法被执行

3、try或者catch中有死循环

4、操作系统强制杀掉了JVM进程,如执行了kill -9

5、其他原因导致的虚拟机崩溃了

6、虚拟机所运行的环境挂了,如计算机电源断了

7、如果一个finally是由守护线程执行的,那么是不保证一定能执行的,如果这时候JVM要退出,JVM会检查其他非守护线程,如果都执行完了,那么就直接退出了。这时候finally可能就没办法执行完。

📄 ✅什么是守护线程,和普通线程有什么区别?

打开文档:✅什么是守护线程,和普通线程有什么区别?

扩展知识 ​

finally执行顺序 ​

📄 ✅try中return A,catch中return B,finally中return C,最终返回值是什么?

打开文档:✅try中return A,catch中return B,finally中return C,最终返回值是什么?