我想知道Java中的以下内容之间的区别
System.exit(0);
System.exit(-1);
System.exit(1);
我何时必须正确使用上述代码?
答案 0 :(得分:234)
如果程序的执行好或坏,退出的参数应该是合格的。这是一种来自旧编程语言的遗传,知道出了什么问题和出了什么问题都很有用。
退出代码
0
; 1
,-1
,whatever != 0
发生错误时,您可以针对不同类型的错误使用不同的值。如果我正确的退出代码曾经只是正数(我的意思是在UNIX中)并且根据范围:
1-127
是用户定义的代码(通过调用exit(n)
生成)128-255
是由于不同的unix信号(如 SIGSEGV 或 SIGTERM 但我不认为你在编写Java时应该关心,这只是一些信息。如果您计划让您的程序与标准工具交互,这将非常有用。
答案 1 :(得分:116)
Zero
=>一切都好的
Positive
=>我预期可能出错的东西出错了(命令行错误,无法找到文件,无法连接到服务器)
Negative
=>我根本没想到的东西出错了(系统错误 - 意料之外的异常 - 外部强制终止,例如kill -9
)
(大于128的值实际上是负数,如果您将它们视为8位有符号二进制或二进制补码)
答案 2 :(得分:46)
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
在Java
了解详情在Unix和Linux系统上,0
表示成功执行,1
或更高版本表示执行失败。
答案 3 :(得分:11)
非零退出状态代码,通常表示异常终止。如果n != 0
,则由程序员对各种n进行应用。
来自https://docs.oracle.com/javase/7/docs/api/java/lang/System.html。
答案 4 :(得分:3)
exit(0)
通常用于表示成功终止。 exit(1)
或exit(-1)
或任何其他非零值表示一般不会成功终止。
答案 5 :(得分:2)
这是答案。
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
答案 6 :(得分:2)
好的问题是任何错误代码> 255将转换为错误代码%256。 如果他们使用自定义错误代码>,应特别注意这一点。 255并期望应用程序逻辑中的确切错误代码。 http://www.tldp.org/LDP/abs/html/exitcodes.html
答案 7 :(得分:0)
其他人回答0
意味着成功,否则。
如果使用bat文件(窗口)System.exit(x)
将起作用。
代码java(myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
bat文件:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
答案 8 :(得分:0)
在其他答案中解释了system.exit()中放置的数字的差异。但真正的不同之处在于System.exit()是一个返回到调用过程的代码。如果操作系统正在调用该程序,则返回代码将告诉操作系统,如果system.exit()返回0而不是一切正常,但如果没有出错,那么在父进程中可能会有一些处理程序
答案 9 :(得分: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) 或任何其他非零值 - 通常表示不成功终止。 无论你作为参数传递什么,控制流总是出来并且接下来不会打印任何东西,它可能是 catch 块,因为 s.length 会在这里抛出异常或最终
答案 10 :(得分:-2)
<强> System.exit(0)强> 按照惯例,非零状态代码表示异常终止。
<强> System.exit(1)强> - 这意味着由于某些错误而导致终止失败
答案 11 :(得分:-3)
class calc{
public static void main(String args[])
{
int a, b, c;
char ch;
do{
Scanner s=new Scanner(System.in);
System.out.print("1. Addition\n");
System.out.print("2. Substraction\n");
System.out.print("3. Multiplication\n");
System.out.print("4. Division\n");
System.out.print("5. Exit\n\n");
System.out.print("Enter your choice : ");
ch=s.next().charAt(0);
switch (ch)
{
case '1' :
Addition chose1=new Addition();
chose1.add();
break;
case '2' :
Substraction chose2=new Substraction();
chose2.sub();
break;
case '3' :
Multiplication chose3= new Multiplication();
chose3.multi();
break;
case '4' :
Division chose4=new Division();
chose4.divi();
break;
case '5' :
System.exit(0);
break;
default :
System.out.print("wrong choice!!!");
break;
}
System.out.print("\n--------------------------\n");
}while(ch !=5);
}
}
在上面的代码中,当它的System.exit(0);当我按下案例5时它会正常退出,但是当我使用System.exit(1)时;并且按下案例5它会以错误退出并且当我尝试使用案例15它正确地退出时我知道了,当我们在任何int内部参数中指定它时,它从该位置获取字符,即如果我放(4)它表示从该字符串中取第5个字符,如果它(3)则表示从该字符串中取第4个字符