主题
面试速答(先看这里)
**一句话结论:**通常情况下,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,最终返回值是什么?