笔友城堡 - 可定义的个人主页

前言

简单记录一下Java面试System.exit(0)System.exit(1)等相关知识点,记录于此,方便自己查阅和学习。

正文

System.exit(0)和System.exit(1)都会立即终止JVM,区别仅在于退出状态码(status code)。

  1. System.exit(0)表示 JVM 正常退出

  2. 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✅ 执行✅ 执行
退出状态成功失败

使用场景

  1. 使用System.exit(0)

    • 程序正常结束

    • 批处理任务成功

    • 命令行工具执行成功

  1. 使用System.exit(1)

    • 参数校验失败

    • 初始化失败

    • 业务异常导致程序无法继续

    • 运维 / Shell 脚本判断失败

    java App
    echo $?   # 0 表示成功,1 表示失败

问答

  1. 为什么 finally 不执行?

    因为 JVM 被强制终止,不再执行正常方法栈流程。

  1. 能不能用 exit(2)、exit(-1)?

    可以,只要是非 0 都表示异常退出,具体含义由程序自行约定。

  2. exit(0) / exit(1) / return 的区别

    对比点returnSystem.exit(0)System.exit(1)
    退出方法
    退出 JVM
    停止所有线程
    返回状态码01

小结

  1. System.exit(0)表示 JVM 正常退出,System.exit(1)表示 JVM 异常退出

  2. 两者的本质区别在于 退出状态码,0 通常表示成功,非 0 表示失败

  3. 调用该方法会立即终止 JVM,finally 块不会执行,但会触发已注册的 shutdown hook

  4. 在实际开发中,通常用 exit(0) 表示程序正常结束,exit(1) 表示程序因异常结束

参考文章

AI

相关网址

笔友城堡 - 可定义的个人主页

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

none
暂无评论...