Я хотел бы знать разницу между следующим в Java
System.exit(0);
System.exit(-1);
System.exit(1);
Когда я должен использовать вышеуказанный код надлежащим образом?
Я хотел бы знать разницу между следующим в Java
System.exit(0);
System.exit(-1);
System.exit(1);
Когда я должен использовать вышеуказанный код надлежащим образом?
Ответы:
Параметр выхода должен быть квалифицирован, если выполнение программы прошло хорошо или плохо. Это своего рода наследственность от старых языков программирования, где полезно знать, если что-то пошло не так и что пошло не так.
Код выхода
0
когда казнь прошла нормально;1
, -1
, whatever != 0
Когда произошла ошибка, вы можете использовать различные значения для разного рода ошибок.Если я прав, коды выхода были просто положительными числами (я имею в виду в UNIX) и в соответствии с диапазоном:
1-127
пользовательские коды (генерируемые при вызове exit(n)
)128-255
являются кодами, генерируемыми завершением из-за различных сигналов Unix, таких как SIGSEGV или SIGTERMНо я не думаю, что вы должны заботиться при написании кода на Java, это всего лишь немного информации. Это полезно, если вы планируете, чтобы ваши программы взаимодействовали со стандартными инструментами.
java MyApp && echo success
будет выводиться «success», если MyApp имеет код выхода 0, т.е. если он вызывает exit(0)
или просто достигает конца основного метода без ошибки.
Zero
=> Все хорошо
Positive
=> Что-то, что я ожидал, могло пойти не так, как надо (неправильно в командной строке, не удалось найти файл, не удалось подключиться к серверу)
Negative
=> Что-то, чего я совсем не ожидал, пошло не так (системная ошибка - непредвиденное исключение - например, внешнее принудительное завершение kill -9
)
(значения больше 128 на самом деле отрицательны, если вы рассматриваете их как 8-битный двоичный код со знаком или дополнение к двум)
Здесь есть множество хороших стандартных кодов выхода
kill -15
) часто приводят к коду выхода 128+signal
, но (кроме 9) могут обрабатываться и вернуть другой код выхода. Значение -
in kill -15
помечает число как сигнал, а не как pid, оно не делает сигнал отрицательным.
System.exit(-1)
а затем в вашей оболочке echo $?
вы получаете «255». Вот почему я сказал, что отрицательные числа являются системными ошибками, а не из-за '-' в параметре kill. Ты серьезно думал, что это то, что я думал? Но спасибо за объяснение механизма, с помощью которого Bash создает эти коды.
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
выше или для неудачных.
EXIT_*
не существует в Java.
Ненулевой код состояния выхода, как правило, указывает на аварийное завершение. если n != 0
, это до программиста, чтобы применить значение к различным п.
Из 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
Хорошая ошибка: любой код ошибки> 255 будет преобразован в код ошибки% 256. Следует быть особенно осторожным с этим, если они используют собственный код ошибки> 255 и ожидают точный код ошибки в логике приложения. http://www.tldp.org/LDP/abs/html/exitcodes.html
разница чисел в system.exit () объясняется в других ответах. но НАСТОЯЩАЯ РАЗНИЦА заключается в том, что System.exit () - это код, который возвращается в вызывающий процесс. Если программа вызывается операционной системой, то код возврата сообщит ОС, что если system.exit () вернул 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 --
System.exit (0) по соглашению, ненулевой код состояния указывает на ненормальное завершение.
System.exit (1) -Это означает, что завершение не удалось из-за какой-то ошибки
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-й символ из этой введенной строки