系统差异.Java中的exit(0),System.exit(-1),System.exit(1)

gir*_*iri 274 java system.exit

我想知道Java中的以下内容之间的区别

System.exit(0);
System.exit(-1);
System.exit(1);
Run Code Online (Sandbox Code Playgroud)

我何时必须适当使用上述代码?

Jac*_*ack 243

如果程序的执行好或坏,退出的参数应该是合格的.这是一种来自旧编程语言的遗传,它可以帮助我们了解出现问题和出错的地方.

退出代码是

  • 0 执行顺利的时候;
  • 1,-1,whatever != 0发生了一些错误时,可以为不同类型的错误使用不同的值.

如果我是正确的退出代码曾经只是正数(我的意思是在UNIX中)并根据范围:

  • 1-127是用户定义的代码(通过调用生成exit(n))
  • 128-255是由于不同的unix信号(如SIGSEGVSIGTERM)而终止生成的代码

但我认为你在编写Java时不应该关心,这只是一些信息.如果您计划让程序与标准工具交互,这将非常有用.

  • 另请注意,退出代码0在shell中计为true,任何其他代码都计为false.因此,如果MyApp的退出代码为0,那么`java MyApp && echo success`将打印"success",即如果它调用`exit(0)`或者只是在没有错误的情况下到达main方法的末尾. (29认同)
  • 如果您的应用可以在脚本中使用,请始终关注退出代码.让一个工具在脚本中间静默失败(或打印一些堆栈跟踪并以0退出)是非常烦人的. (16认同)
  • 需要注意的一点是:当返回-1时,在无符号上下文中返回最大可能的正数(在二进制补码表示中,-1总是设置所有位,而不管数字中的字节数).因此,当您返回非特定错误并且不希望它与已定义和记录的可能错误代码冲突时,通常会返回-1.例如,错误代码1可能已被记录为写入错误; 错误代码2可能是读错误等 (6认同)

rob*_*ert 121

Zero =>一切都好

Positive =>我预期可能出错的东西出错了(命令行错误,无法找到文件,无法连接到服务器)

Negative=>我根本没想到的东西出错了(系统错误 - 意外异常 - 外部强制终止例如kill -9)

(大于128的值实际上是负数,如果您将它们视为8位有符号二进制或二进制补码)

这里有很多标准的退出代码

  • "我想出错的东西出了问题"听起来像"一切都好". (12认同)
  • @tobe这真的更像是"我想要的东西**可能**出错了实际上是错的";) (6认同)

Pre*_*raj 51

System.exit(system call)通过启动其关闭序列来终止当前运行的Java虚拟机.该参数用作状态代码.

按照惯例,非零状态代码表示异常终止.

  System.exit(0) or EXIT_SUCCESS;  ---> Success
  System.exit(1) or EXIT_FAILURE;  ---> Exception
  System.exit(-1) or EXIT_ERROR;   ---> Error
Run Code Online (Sandbox Code Playgroud)

阅读更多Java

在Unix和Linux系统上,0成功执行1或更高版本的失败执行.

  • 这个答案似乎与@ robert的回答相矛盾 (3认同)

Fre*_*old 11

非零退出状态代码,通常表示异常终止.如果n != 0,它由程序员来应用各种n的含义.

来自https://docs.oracle.com/javase/7/docs/api/java/lang/System.html.


小智 8

exit(0)一般用于表示成功终止。exit(1)exit(-1)或任何其他非零值通常表示不成功的终止。