AI面试总结:Kotlin中的闭包
前言 简单记录一下Kotlin中的闭包,Java中没这个概念...
简单记录一下Java面试中System.exit(0)和System.exit(1)等相关知识点,记录于此,方便自己查阅和学习。
System.exit(0)和System.exit(1)都会立即终止JVM,区别仅在于退出状态码(status code)。
System.exit(0)表示 JVM 正常退出
System.exit(1)表示 JVM 异常或非正常退出
public static void exit(int status) { Runtime.getRuntime().exit(status); }
位于 java.lang.System
退出状态码的含义
| 状态值 | 含义 | 约定 |
|---|---|---|
| 0 | 正常退出 | ✅ 程序执行成功 |
| 非 0(通常是 1) | 异常退出 | ❌ 程序执行失败 |
这只是约定俗成,JVM 并不强制逻辑含义
| 对比点 | System.exit(0) | System.exit(1) |
|---|---|---|
| JVM 是否终止 | ✅ 是 | ✅ 是 |
| 是否立即退出 | ✅ 是 | ✅ 是 |
| finally 是否执行 | ❌ 不执行 | ❌ 不执行 |
| shutdown hook | ✅ 执行 | ✅ 执行 |
| 退出状态 | 成功 | 失败 |
使用System.exit(0)
程序正常结束
批处理任务成功
命令行工具执行成功
使用System.exit(1)
参数校验失败
初始化失败
业务异常导致程序无法继续
运维 / Shell 脚本判断失败
java App echo $? # 0 表示成功,1 表示失败
为什么 finally 不执行?
因为 JVM 被强制终止,不再执行正常方法栈流程。
能不能用 exit(2)、exit(-1)?
可以,只要是非 0 都表示异常退出,具体含义由程序自行约定。
exit(0) / exit(1) / return 的区别
| 对比点 | return | System.exit(0) | System.exit(1) |
|---|---|---|---|
| 退出方法 | ✅ | ✅ | ✅ |
| 退出 JVM | ❌ | ✅ | ✅ |
| 停止所有线程 | ❌ | ✅ | ✅ |
| 返回状态码 | ❌ | 0 | 1 |
System.exit(0)表示 JVM 正常退出,System.exit(1)表示 JVM 异常退出
两者的本质区别在于 退出状态码,0 通常表示成功,非 0 表示失败
调用该方法会立即终止 JVM,finally 块不会执行,但会触发已注册的 shutdown hook
在实际开发中,通常用 exit(0) 表示程序正常结束,exit(1) 表示程序因异常结束