system.exit() 是 java 中立即终止 jvm 并返回退出码给操作系统的方法:0 表示成功,非零表示错误;退出码可被 shell 或批处理脚本通过 $? 或 %errorlevel% 捕获;但需避免在 web 容器或单元测试中使用。

System.exit() 是 Java 中用于立即终止 JVM 的方法,它会向操作系统返回一个退出状态码(exit code),这个状态码可以被外部脚本(如 Shell、批处理等)捕获并用于判断程序执行结果。
退出码的含义与约定
Java 中 System.exit(int status) 的参数 status 就是返回给操作系统的退出信号:
- 传入 0 表示正常退出(success)
- 传入非零值(如 1、-1 等)通常表示异常或错误退出
- 不同操作系统对退出码范围有约定(一般 0–255),超出范围可能被截断或取模
在 Java 程序中主动调用 exit
直接在代码逻辑中根据条件调用:
if (someErrorCondition) {
System.err.println("处理失败");
System.exit(1); // 返回 1 给 shell
}
// 正常结束
System.exit(0); // 或让 main 方法自然结束(等价于 exit(0)
注意:一旦调用 System.exit(),JVM 会立即停止,后续代码不会执行,也不会触发 shutdown hooks(除非已注册且未被跳过)。
Shell 脚本中捕获退出码
在 Linux/macOS 的 bash 中,运行 Java 程序后可通过 $? 获取上一条命令的退出状态:
java MyApp
exit_code=$?
if [ $exit_code -eq 0 ]; then
echo "执行成功"
else
echo "执行失败,退出码:$exit_code"
fi
Windows 批处理中使用 %ERRORLEVEL%:
java MyApp
if %ERRORLEVEL% == 0 (
echo 执行成功
) else (
echo 执行失败,退出码:%ERRORLEVEL%
)
替代方案与注意事项
某些场景下不建议直接使用 System.exit():
- 在 Web 容器(如 Tomcat)、应用服务器或测试框架中调用会导致整个进程退出,影响其他组件
- 单元测试中应避免,可用异常或断言代替
- 若需优雅退出,可结合 Runtime.addShutdownHook() 做清理,但 exit 仍会触发它(除非 JVM 已关闭)
真正需要向脚本传递信号时,System.exit(n) 是最直接、标准的方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











