Chciałbym poznać różnicę między poniższymi w Javie
System.exit(0);
System.exit(-1);
System.exit(1);
Kiedy muszę odpowiednio użyć powyższego kodu?
Chciałbym poznać różnicę między poniższymi w Javie
System.exit(0);
System.exit(-1);
System.exit(1);
Kiedy muszę odpowiednio użyć powyższego kodu?
Odpowiedzi:
Parametr exit powinien się kwalifikować, jeśli wykonanie programu przebiegło dobrze lub źle. Jest to swego rodzaju dziedziczenie ze starszych języków programowania, w których warto wiedzieć, czy coś poszło nie tak i co poszło nie tak.
Kod zakończenia to
0
kiedy egzekucja poszła dobrze;1
, -1
, whatever != 0
Gdy wystąpił jakiś błąd, można użyć różnych wartości dla różnego rodzaju błędów.Jeśli mam poprawne kody wyjściowe były zwykłymi liczbami dodatnimi (mam na myśli w systemie UNIX) i zgodnie z zakresem:
1-127
to kody zdefiniowane przez użytkownika (generowane przez wywołanie exit(n)
)128-255
to kody generowane przez zakończenie z powodu różnych sygnałów uniksowych, takich jak SIGSEGV lub SIGTERMAle nie sądzę, że powinieneś przejmować się kodowaniem w Javie, to tylko trochę informacji. Jest to przydatne, jeśli planujesz, aby twoje programy współdziałały ze standardowymi narzędziami.
java MyApp && echo success
wypisze „sukces” iff MyApp ma kod wyjścia 0, tzn. Jeśli wywołuje exit(0)
lub po prostu osiąga koniec głównej metody bez błędu.
Zero
=> Wszystko w porządku
Positive
=> Coś, czego się spodziewałem, mogło pójść nie tak, poszło nie tak (zły wiersz poleceń, nie można znaleźć pliku, nie można połączyć się z serwerem)
Negative
=> Coś, czego się nie spodziewałem, poszło nie tak (błąd systemu - nieoczekiwany wyjątek - zewnętrzne wymuszone zakończenie np kill -9
)
(wartości większe niż 128 są w rzeczywistości ujemne, jeśli uważasz je za 8-bitowe ze znakiem binarnym lub uzupełnieniem dwójkowym)
Tutaj jest mnóstwo dobrych standardowych kodów wyjścia
kill -15
) często powodują kod wyjścia 128+signal
, ale (oprócz 9) można obsługiwać zwraca inny kod wyjścia. Wartość „ -
in” kill -15
oznacza liczbę jako sygnał, a nie „pid”, nie czyni sygnału ujemnym.
System.exit(-1)
a następnie w powłoce pojawi echo $?
się „255”. Dlatego powiedziałem, że liczby ujemne są błędami systemowymi, a nie z powodu „-” w parametrze kill. Naprawdę myślałeś, że tak właśnie myślałem? Ale dziękuję za wyjaśnienie mechanizmu, za pomocą którego Bash konstruuje te kody.
System.exit(system call)
kończy aktualnie działającą maszynę wirtualną Java, inicjując sekwencję zamykania. Argument służy jako kod statusu .
Zgodnie z konwencją niezerowy kod stanu wskazuje na nieprawidłowe zakończenie.
System.exit(0) or EXIT_SUCCESS; ---> Success
System.exit(1) or EXIT_FAILURE; ---> Exception
System.exit(-1) or EXIT_ERROR; ---> Error
Czytaj więcej na Java
W systemach Unix i Linux, 0
dla pomyślnego wykonania i / 1
lub wyższego dla wykonania nieudanego.
EXIT_*
nie istnieje w Javie.
Niezerowy kod statusu wyjścia zwykle wskazuje na nieprawidłowe zakończenie. if n != 0
, do programisty należy przypisanie znaczenia różnym n.
Od https://docs.oracle.com/javase/7/docs/api/java/lang/System.html .
exit(0)
zwykle używany do wskazania pomyślnego zakończenia. exit(1)
lub exit(-1)
jakakolwiek inna niezerowa wartość wskazuje ogólnie na nieudane zakończenie.
Oto odpowiedź.
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
Dobrym gotcha jest dowolny kod błędu> 255 zostanie przekonwertowany na kod błędu% 256. Należy zachować szczególną ostrożność, jeśli używają niestandardowego kodu błędu> 255 i oczekują dokładnego kodu błędu w logice aplikacji. http://www.tldp.org/LDP/abs/html/exitcodes.html
różnica liczb wprowadzonych w system.exit () jest wyjaśniona w innych odpowiedziach. ale RZECZYWISTA RÓŻNICA polega na tym, że System.exit () jest kodem zwracanym do procesu wywoływania. Jeśli program jest wywoływany przez system operacyjny, wówczas kod powrotu poinformuje system operacyjny, że jeśli system.exit () zwrócił 0, wszystko było w porządku, ale jeśli nie coś poszło nie tak, mogą istnieć pewne procedury obsługi dla tego procesu nadrzędnego
Gdy inni odpowiadają, to 0
znaczy sukces, w przeciwnym razie.
Jeśli użyjesz pliku nietoperza (okno) System.exit(x)
zadziała.
Kod java (myapp):
if (error < 2){
help();
System.exit(-1);
}
else{
doSomthing();
System.exit(0);
}
}
plik nietoperza:
java -jar myapp.jar
if %errorlevel% neq 0 exit /b %errorlevel%
rem -- next command if myapp is success --
System.exit (0) zgodnie z konwencją niezerowy kod stanu wskazuje na nieprawidłowe zakończenie.
System.exit (1) - Oznacza to, że zakończenie nie powiodło się z powodu błędu
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);
}
}
W powyższym kodzie, gdy jego System.exit (0); a kiedy naciskam przypadek 5, wychodzi ono poprawnie, ale kiedy używam System.exit (1); i naciśnij przypadek 5, to wychodzi z błędem i ponownie, gdy próbuję z przypadkiem 15, to wychodzi poprawnie przez to dowiedziałem się, że kiedykolwiek wstawiamy jakiś argument wewnętrzny do int, określa to, że bierze znak z tej pozycji, tj. jeśli wstawię (4) oznacza, że pobiera piąty znak z tego ciągu, jeśli jego (3), oznacza zabiera czwarty znak z wprowadzonego ciągu