Я хотел бы знать разницу между следующим в Java
System.exit(0);
System.exit(-1);
System.exit(1);
Когда я должен использовать вышеуказанный код надлежащим образом?
java
system.exit
гири
источник
источник
Ответы:
Параметр выхода должен быть квалифицирован, если выполнение программы прошло хорошо или плохо. Это своего рода наследственность от старых языков программирования, где полезно знать, если что-то пошло не так и что пошло не так.
Код выхода
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) могут обрабатываться и вернуть другой код выхода. Значение-
inkill -15
помечает число как сигнал, а не как pid, оно не делает сигнал отрицательным.System.exit(-1)
а затем в вашей оболочкеecho $?
вы получаете «255». Вот почему я сказал, что отрицательные числа являются системными ошибками, а не из-за '-' в параметре kill. Ты серьезно думал, что это то, что я думал? Но спасибо за объяснение механизма, с помощью которого Bash создает эти коды.System.exit(system call)
завершает работающую в данный момент виртуальную машину Java, инициируя ее последовательность выключения. Аргумент служит кодом состояния .По соглашению, ненулевой код состояния указывает на ненормальное завершение.
Узнайте больше на 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)
или любое другое ненулевое значение указывает на неудачное завершение в целом.источник
Вот ответ.
источник
Хорошая ошибка: любой код ошибки> 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):
}
файл bat:
источник
System.exit (0) по соглашению, ненулевой код состояния указывает на ненормальное завершение.
System.exit (1) -Это означает, что завершение не удалось из-за какой-то ошибки
источник
}
В приведенном выше коде, когда его System.exit (0); и когда я нажимаю case 5, он корректно завершается, но когда я использую System.exit (1); и нажмите case 5, он завершается с ошибкой, и снова, когда я пытаюсь с case 15, он правильно завершает работу. Я узнал, что когда мы помещаем какой-либо аргумент int внутри аргумента, он указывает, что он берет символ из этой позиции, т.е. если я помещаю (4) что это означает взять 5-й символ из этой строки, если его (3), то это означает, что взять 4-й символ из этой введенной строки
источник