Разница в системе. выход (0), System.exit (-1), System.exit (1) в Java - PullRequest
262 голосов
/ 12 марта 2010

Хотелось бы узнать разницу между следующим в Java

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

Когда мне нужно использовать вышеуказанный код соответствующим образом?

Ответы [ 11 ]

235 голосов
/ 12 марта 2010

Параметр выхода должен определяться, если выполнение программы прошло хорошо или плохо. Это своего рода наследство от старых языков программирования, где полезно знать, если что-то пошло не так и что пошло не так.

Код выхода

  • 0 когда исполнение прошло нормально;
  • 1, -1, whatever != 0 Когда произошла какая-либо ошибка, вы можете использовать разные значения для разных типов ошибок.

Если я прав, коды выхода были просто положительными числами (я имею в виду в UNIX) и в соответствии с диапазоном:

  • 1-127 - это определяемые пользователем коды (генерируемые путем вызова exit(n))
  • 128-255 - это коды, генерируемые завершением из-за различных сигналов Unix, таких как SIGSEGV или SIGTERM

Но я не думаю, что вам нужно заботиться при кодировании на Java, это всего лишь немного информации. Это полезно, если вы планируете, чтобы ваши программы взаимодействовали со стандартными инструментами.

117 голосов
/ 06 ноября 2012

Zero => Все в порядке

Positive => Что-то, что я ожидал, могло пойти не так, пошло не так (плохая командная строка, не удалось найти файл, не удалось подключиться к серверу)

Negative => Что-то, чего я вообще не ожидал, пошло не так (системная ошибка - непредвиденное исключение - внешнее принудительное завершение, например, kill -9)

(значения больше 128 на самом деле отрицательны, если вы рассматриваете их как 8-битный двоичный код со знаком или дополнение к двум)

Здесь есть множество хороших стандартных кодов выхода

46 голосов
/ 27 июля 2015

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 или выше для неудачного выполнения.

11 голосов
/ 12 марта 2010

Ненулевой код состояния выхода, как правило, указывает на аварийное завершение. если n != 0, то программист может применить значение к различным n.

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

3 голосов
/ 31 января 2018

exit(0) обычно используется для указания успешного завершения. exit(1) или exit(-1) или любое другое ненулевое значение указывает на неудачное завершение в общем.

2 голосов
/ 07 апреля 2017

Хорошая ошибка - любой код ошибки> 255 будет преобразован в код ошибки% 256. Следует быть особенно осторожным с этим, если они используют собственный код ошибки> 255 и ожидают точного кода ошибки в логике приложения. http://www.tldp.org/LDP/abs/html/exitcodes.html

2 голосов
/ 28 декабря 2016

Вот ответ.

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
0 голосов
/ 31 января 2018

разница чисел в system.exit () объясняется в других ответах. но НАСТОЯЩАЯ РАЗНИЦА заключается в том, что System.exit () - это код, который возвращается в вызывающий процесс. Если программа вызывается операционной системой, то код возврата сообщит ОС, что если system.exit () вернул 0, то все в порядке, но если что-то пошло не так, то в родительском процессе для этого могут быть некоторые обработчики.

0 голосов
/ 21 июля 2017
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-й символ из этой введенной строки

0 голосов
/ 03 марта 2017

Когда другие отвечают 0 означает успех, в противном случае.

Если вы используете bat-файл (окно), будет действовать System.exit(x).

Код Java (MyApp):

if (error < 2){
    help();
    System.exit(-1);    
}
else{
    doSomthing();
    System.exit(0);
}

}

файл летучей мыши:

java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
...