302

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

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

我什么时候必须适当地使用上面的代码?

4

12 回答 12

265

如果程序的执行是好是坏,exit 的参数应该是合格的。这是旧编程语言的一种遗传,在这种语言中,知道是否出了问题以及出了什么问题是很有用的。

退出代码是

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

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

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

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

于 2010-03-12T17:37:01.403 回答
140

Zero=> 一切都好

Positive=> 我预计可能会出错的事情出错了(命令行错误,找不到文件,无法连接到服务器)

Negative=> 我完全没想到的事情出错了(系统错误 - 意外异常 - 外部强制终止,例如kill -9

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

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

于 2012-11-06T08:42:37.957 回答
58

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或更高版本用于失败的执行。

于 2015-07-27T07:05:53.567 回答
11

非零退出状态码,通常表示异常终止。如果n != 0,则由程序员对各种 n 应用含义。

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

于 2010-03-12T17:37:11.373 回答
8

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

于 2018-01-31T07:07:33.790 回答
4

这是答案。

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
于 2016-12-28T14:16:51.583 回答
2

一个好的问题是任何大于 255 的错误代码都将转换为错误代码 % 256。如果他们使用自定义错误代码 > 255 并期望应用程序逻辑中有确切的错误代码,则应特别注意这一点。 http://www.tldp.org/LDP/abs/html/exitcodes.html

于 2017-04-07T18:31:54.893 回答
1

其他答案中解释了 system.exit() 中输入的数字的差异。但真正的区别在于 System.exit() 是返回给调用进程的代码。如果操作系统正在调用该程序,则返回代码将告诉操作系统,如果 system.exit() 返回 0,则一切正常,但如果没有出现问题,则父进程中可能有一些处理程序

于 2018-01-31T07:19:55.820 回答
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会在此处或最终抛出异常

于 2021-04-22T15:09:52.237 回答
0

其他人回答0意味着成功,否则。

如果你使用bat文件(window)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 --
于 2017-03-03T03:44:42.407 回答
0

System.exit(0) 按照惯例,零状态码表示成功终止。

System.exit(1) - 表示由于某些错误而终止不成功

于 2017-01-06T15:21:26.467 回答
-9
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); 当我按下 case 5 时它会正确退出但是当我使用 System.exit(1); 并按 case 5 它退出时出现错误,当我尝试使用 case 15 时它再次正确退出我知道,当我们在参数中放入任何 int 时,它指定它从那个位置获取字符,即如果我放(4) 表示从该字符串中取出第 5 个字符,如果 (3) 表示从输入的字符串中取出第 4 个字符

于 2017-07-21T20:01:47.013 回答