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?
java
system.exit
Giri
źródło
źródło
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łanieexit(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.
źródło
java MyApp && echo success
wypisze „sukces” iff MyApp ma kod wyjścia 0, tzn. Jeśli wywołujeexit(0)
lub po prostu osiąga koniec głównej metody bez błędu.Zero
=> Wszystko w porządkuPositive
=> 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 npkill -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
źródło
kill -15
) często powodują kod wyjścia128+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 pojawiecho $?
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.
Czytaj więcej na Java
W systemach Unix i Linux,
0
dla pomyślnego wykonania i /1
lub wyższego dla wykonania nieudanego.źródło
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 .
źródło
exit(0)
zwykle używany do wskazania pomyślnego zakończenia.exit(1)
lubexit(-1)
jakakolwiek inna niezerowa wartość wskazuje ogólnie na nieudane zakończenie.źródło
Oto odpowiedź.
źródło
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ódło
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
źródło
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):
}
plik nietoperza:
źródło
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
źródło
}
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
źródło