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

时间:2010-03-12 17:33:31

标签: java system.exit

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

System.exit(0);
System.exit(-1);
System.exit(1);

我何时必须正确使用上述代码?

12 个答案:

答案 0 :(得分:234)

如果程序的执行好或坏,退出的参数应该是合格的。这是一种来自旧编程语言的遗传,知道出了什么问题和出了什么问题都很有用。

退出代码

    执行顺利时
  • 0;
  • 1-1whatever != 0发生错误时,您可以针对不同类型的错误使用不同的值。

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

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

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

答案 1 :(得分:116)

Zero =>一切都好的

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

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

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

有一大堆好standard exit-codes here

答案 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个字符