我想知道在Java中以下内容的区别:
System.exit(0);
System.exit(-1);
System.exit(1);
我什么时候需要适当使用上述代码?
我想知道在Java中以下内容的区别:
System.exit(0);
System.exit(-1);
System.exit(1);
我什么时候需要适当使用上述代码?
exit的参数应该能够判断程序的执行是否成功。这是从早期编程语言遗留下来的一种习惯,因为知道是否出现了问题以及出了什么问题很有用。
退出代码是
0
表示执行良好;1
, -1
, whatever != 0
表示发生错误,您可以使用不同的值表示不同类型的错误。如果我没记错的话,在UNIX中退出码只是正数(我的意思是),按范围分为:
1-127
是用户定义的代码(通过调用 exit(n)
生成)128-255
是由于不同unix信号的终止而生成的代码,例如SIGSEGV或SIGTERM但我认为在Java编程时不需要关心这些,这只是一点信息。如果您计划让您的程序与标准工具交互,则这很有用。
java MyApp && echo success
命令的 MyApp 退出码为 0 时,即它调用了 exit(0)
或在主方法结束时没有错误时,才会打印出 "success"。 - sepp2k零
=> 一切正常
正数
=> 我预期的某些事情可能会出错(错误的命令行、找不到文件、无法连接服务器)
负数
=> 我完全没有预料到的事情出错了(系统错误 - 意外异常 - 外部强制终止,例如kill -9
)
(如果您将它们视为8位有符号二进制或二进制补码,则大于128的值实际上是负数)
这里有很多好的标准退出代码
kill -15
)通常导致退出代码为128+signal
,但是(除了9之外)可以处理并返回不同的退出代码。kill -15
中的“-”标记数字为信号而不是pid,它不会使信号变为负数。 - MatthewSystem.exit(-1)
,然后在你的 shell 中输入 echo $?
,你会得到 '255'。这就是为什么我说负数是系统错误的原因,而不是因为 kill 参数中有 '-'。你真的认为我是这么想的吗?但是感谢你解释了 Bash 构建这些代码的机制。 - robertSystem.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
在Unix和Linux系统中,0
表示执行成功,1
或更高表示执行失败。
阅读更多请访问Java
EXIT_*
在Java中不存在。 - juanchito非零的退出状态码通常表示异常终止。如果 n != 0
,则由程序员根据不同的 n 值来赋予意义。
来源:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html。
exit(0)
一般用于表示成功终止。而 exit(1)
或者 exit(-1)
或者其他非零值则是一般表示未成功终止。
这是答案。
System.exit(0);// normal termination - Successful - zero
System.exit(-1);//Exit with some Error
System.exit(1);//one or any positive integer // exit with some Information message
System.exit(0) 按照惯例,零状态码表示成功终止。
System.exit(1) -这意味着由于某些错误而未能成功终止。
在其他答案中已经解释了放在system.exit()中的数字的区别。但是真正的区别在于,System.exit()是一个返回给调用进程的代码。如果程序由操作系统调用,则返回代码将告诉操作系统,如果system.exit()返回0,则一切正常,但如果不是,则出现了问题,那么父进程中可能会有一些处理程序。
看下面的代码
public static void main(String[] args) {
**String s=null;**
try {
System.out.println("Exit");
System.exit(1);
**s.length();**
}catch(Exception e) {
System.out.println("Exception");
}finally {
System.out.println("finally");
}}
这里exit(0):通常用于表示成功终止。 exit(1)或exit(-1)或任何其他非零值-通常表示不成功的终止。 无论您传递什么参数,控制流始终会出来,并且不会打印任何下一个内容,无论是捕获块还是finally,因为s.length在此处将抛出异常。