Я хотів би знати різницю між наступними в 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
буде надруковано "успіх" iff MyApp має вихідний код 0, тобто якщо він викликає exit(0)
або просто доходить до кінця основного методу без помилок.
Zero
=> Все гаразд
Positive
=> Щось, що я очікував, може потенційно піти не так (неправильний командний рядок, не вдається знайти файл, не вдалося підключитися до сервера)
Negative
=> Щось, чого я зовсім не очікував, пішло не так (помилка системи - непередбачений виняток - примусове припинення зовні, наприклад kill -9
)
(значення, що перевищують 128, насправді від’ємні, якщо ви розглядаєте їх як 8-бітові підписані двійкові або доповнення двійки)
Тут є багато хороших стандартних кодів виходу
kill -15
) часто призводять до виходу коду 128+signal
, але (крім 9) можна обробляти і повернути інший вихідний код. -
У kill -15
це число знаків в якості сигналу , а не ФІД, він не робить негативний сигнал.
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); і коли я натискаю регістр 5, він закінчується належним чином, але коли я використовую System.exit (1); і натисніть випадок 5, він виходить із помилкою, і знову, коли я намагаюся зі справою 15, він закінчується належним чином цим, я повинен знати, що коли-небудь ми ставимо будь-який внутрішній аргумент, він вказує, що він приймає символ з цієї позиції, тобто якщо я поставив (4) що означає взяти 5-й символ із цієї рядки, якщо його (3), то це означає взяти 4-й символ із цієї введеної рядки