Java 捕获应用程序停止异常时是否应使用System.exit(1)?
假设我有以下代码:Java 捕获应用程序停止异常时是否应使用System.exit(1)?,java,exception,exception-handling,Java,Exception,Exception Handling,假设我有以下代码: try { //Do something with File } catch (FileNotFoundException e) { outputInfo("Error in IO Redirection", true); e.printStackTrace(); System.exit(1); } 我的程序就在这个捕获位置之后退出,是一个单线程(一个主方法)程序,不应该期望从这样的异常中恢复 我真的应该使用System.exit(1)?如果
try {
//Do something with File
} catch (FileNotFoundException e) {
outputInfo("Error in IO Redirection", true);
e.printStackTrace();
System.exit(1);
}
我的程序就在这个捕获位置之后退出,是一个单线程(一个主方法)程序,不应该期望从这样的异常中恢复
我真的应该使用
System.exit(1)代码>?如果您希望其他人运行您的程序,并且他们依赖进程状态代码来了解您的程序是否成功,那么您应该使用系统。退出(1)代码>
终止当前运行的Java虚拟机。争论
用作状态代码;按照惯例,非零状态代码
表示异常终止
在应用程序失败时使用非零退出代码的原因之一是它们可以在批处理文件中使用。如果您的应用程序是控制台应用程序,请始终使用正确的退出代码。你不知道它将来会怎么用 在system.exit中使用整数1-127表示程序异常终止。如果您不想在catch block之后执行任何其他操作,您可以使用它或捕获异常并打印正确的错误消息。您考虑用什么替代系统。退出(1)代码>?别无选择,我只是想知道当我使用系统时需要考虑什么。退出(1)我应该理解的是,在我所有的异常处理捕获中使用它可能会出错。如果您的程序也使用finally子句呢System.exit(1)
肯定会产生干扰,这是否意味着您可能必须在调用exit之前复制完成代码?您可以将exit
语句从catch
块中删除,或者创建一个将在JVM终止时执行的语句(在调用exit
之后)。我同意。我喜欢未来证明,退出代码在我遇到的程序中很少见到,奇怪的是。。。也许对大多数人来说,开销太大了。