Różnice między wyjątkiem a błędem
Próbuję dowiedzieć się więcej o podstawowej Javie i różnych typach Throwables, czy ktoś może mi podać różnice między wyjątkami a błędami?
10 answers
Błędy nie powinny być wyłapywane ani usuwane (z wyjątkiem najrzadszych przypadków). Wyjątki są chlebem powszednim obsługi wyjątków. Javadoc wyjaśnia to dobrze:
Błąd jest podklasą Throwable, która wskazuje na poważne problemy, które rozsądna aplikacja nie powinna próbować złapać. Większość takich błędów jest nienormalna warunki.
Spójrz na kilka podklas Error
, biorąc niektóre z ich JavaDoc komentarze:
-
AnnotationFormatError
- rzucony, gdy parser adnotacji próbuje odczytać adnotację z pliku klasy i określa, że adnotacja jest nieprawidłowo ukształtowana. -
AssertionError
- rzucony, aby wskazać, że twierdzenie nie powiodło się. -
LinkageError
- podklasy LinkageError wskazują, że klasa ma pewną zależność od innej klasy; jednak ta druga klasa została niezgodnie zmieniona po kompilacji poprzedniej klasy. -
VirtualMachineError
- rzucony w celu wskazania, że Java Maszyna wirtualna jest uszkodzona lub wyczerpały się zasoby niezbędne do jej dalszego działania.
Istnieją naprawdę trzy ważne podkategorie Throwable
:
-
Error
- coś wystarczająco poważnego poszło nie tak większość aplikacji powinna się zawiesić, a nie próbować poradzić sobie z problemem, - Unchecked Exception (aka
RuntimeException
) - bardzo często błąd programowania, taki jakNullPointerException
lub niezgodny z prawem argument. Aplikacje mogą czasami obsługiwać lub odzyskiwać z tegoThrowable
Kategoria -- lub przynajmniej złapać go w wątkurun()
metoda, Zaloguj skargę, i kontynuować. - sprawdzony wyjątek (aka Wszystko inne) - oczekuje się, że aplikacje będą w stanie złapać i znacząco zrobić coś z resztą, na przykład
FileNotFoundException
iTimeoutException
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 20:01:14
Ten slajd pokazujący hierarchię WYJĄTKÓW Javy autorstwa @georgios-gousios zwięźle wyjaśnia różnice między błędami a wyjątkami w Javie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:20
Błędy zwykle sygnalizują koniec aplikacji, jaki znasz. Zazwyczaj nie można go odzyskać z maszyny wirtualnej i powinno to spowodować jej zamknięcie. Przechwytywanie ich nie powinno być wykonywane z wyjątkiem ewentualnego logowania lub wyświetlania i odpowiedniego komunikatu przed opuszczeniem.
Przykład: OutOfMemoryError - niewiele możesz zrobić, ponieważ twój program nie może już działać.
Wyjątki są często możliwe do odzyskania i nawet jeśli nie, zazwyczaj oznaczają po prostu nieudaną próbę operacji, ale twój program może Kontynuuj.
Przykład: IllegalArgumentException - przekazanie nieprawidłowych danych do metody, tak że wywołanie metody nie powiodło się, ale nie wpływa to na przyszłe operacje.
Są to uproszczone przykłady, i jest jeszcze inne bogactwo informacji na temat samych WYJĄTKÓW.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 19:52:45
Sun puts it best :
Błąd jest podklasą Throwable to wskazuje na poważne problemy, które rozsądna aplikacja nie powinna próbować złapać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 19:48:18
Błędy -
-
Error
s w Javie są typujava.lang.Error
. - wszystkie błędy w Javie są niezaznaczone.
-
Error
s dzieje się w czasie uruchomienia. Nie będą znane kompilatorowi. - nie da się odzyskać po błędach.
-
Error
s są głównie spowodowane przez środowisko, w którym aplikacja jest uruchomiona. -
przykłady :
java.lang.StackOverflowError
,java.lang.OutOfMemoryError
-
Exception
s W java są typujava.lang.Exception
. -
Exception
S zawierają zarówno zaznaczony, jak i niezaznaczony Typ. - zaznaczone wyjątki są znane kompilatorowi, gdzie jako niezaznaczone wyjątki nie są znane kompilatorowi, ponieważ występują w czasie wykonywania.
- możesz odzyskać wyjątki, obsługując je za pomocą
try-catch
bloków. -
Exception
s są spowodowane głównie przez samą aplikację. -
Przykłady: Zaznaczone Wyjątki :
SQLException
,IOException
Niezaznaczone Wyjątki :ArrayIndexOutOfBoundException
,ClassCastException
,NullPointerException
Czytaj dalej: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 06:19:09
Opis klasy Error
jest dość jasny:
An
Error
jest podklasąThrowable
to wskazuje na poważne problemy, które rozsądna aplikacja nie powinna próbować złapać. Większość takich błędów to nienormalne warunki.ThreadDeath
błąd, choć warunek "normalny", jest również podklasaError
, ponieważ większość aplikacje nie powinny próbować złapać to.Metoda nie jest wymagana do zadeklarowania w its throws clause any subclass of
Error
to może być rzucony podczas wykonanie metody, ale nie złapany, ponieważ te błędy są zaburzenia, które nigdy nie powinny występuje.
Cytowane z własnej dokumentacji Javy klasy Error
.
Krótko mówiąc, nie powinieneś łapać Error
s, z wyjątkiem tego, że masz ku temu dobry powód. (Na przykład, aby zapobiec awarii serwera www, jeśli servlet zabraknie pamięci lub coś w tym stylu.)
An Exception
, z drugiej strony, jest po prostu normalnym wyjątek jak w każdym innym nowoczesnym języku. Szczegółowy opis znajdziesz w dokumentacji Java API lub w dowolnym zasobie online lub offline.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 19:50:02
Istnieje kilka podobieństw i różnic między klasami java.lang.Exception
i java.lang.Error
.
Podobieństwa:
Po pierwsze - obie klasy rozszerzają
java.lang.Throwable
i w rezultacie dziedziczy wiele metod, które są powszechne w przypadku z takimi błędami jak:getMessage
,getStackTrace
,printStackTrace
oraz i tak dalej.-
Po drugie, jako podklasy
java.lang.Throwable
obie dziedziczą następujące właściwości:Throwable itself and any of its subclass (w tym
java.lang.Error
) Można zadeklarować na liście wyjątków metod używając słowa kluczowegothrows
. Taka deklaracja wymagana tylko dlajava.lang.Exception
i podklas, dlajava.lang.Throwable
,java.lang.Error
ijava.lang.RuntimeException
i ich podklasy jest to opcjonalne.Tylko
java.lang.Throwable
i podklasy mogą być używane w klauzulicatch
.Tylko
java.lang.Throwable
i podklasy mogą być używane ze słowem kluczowym-throw
.
Wniosek z tej właściwości jest następujący zarówno java.lang.Error
jak i java.lang.Exception
może być zadeklarowana w nagłówku metody, może być w klauzuli catch
, Może być użyta ze słowem kluczowym throw
.
Różnice:
-
Pierwsza-różnica pojęciowa:
java.lang.Error
przeznaczona do rzucony przez JVM i wskazuje na poważne problemy i ma na celu zatrzymanie wykonanie programu zamiast zostać złapanym (ale jest to możliwe jak dla każdy innyjava.lang.Throwable
następca).Fragment z javadoc opis o
java.lang.Error
:...wskazuje na poważne problemy że rozsądny wniosek powinien nie próbuj łapać.
W odwrotnym
java.lang.Exception
zaprojektowanym do reprezentowania błędów, które oczekiwany i może być obsługiwany przez programistę bez kończenia wykonanie programu.Fragment z javadoc opis o
java.lang.Exception
:...wskazuje warunki, które uzasadniony wniosek może chcieć łap.
- druga różnica między
java.lang.Error
ijava.lang.Exception
, która po raz pierwszy uważana jest za niezaznaczony wyjątek do sprawdzania WYJĄTKÓW w czasie kompilacji. Ponieważ kod wynikowyjava.lang.Error
lub jego podklasy nie wymagają deklarowania tego błędu w nagłówku metody. Podczas rzucaniajava.lang.Exception
wymaganej deklaracji w nagłówku metody.
Throwable i jego następca diagram klasy(właściwości i metody są pominięte).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-04 14:59:32
IMO błąd jest czymś, co może spowodować awarię aplikacji i nie powinno być obsługiwane. Wyjątkiem jest coś, co może powodować nieprzewidywalne wyniki, ale można je odzyskać.
Przykład:
Jeśli programowi zabrakło pamięci, jest to błąd, ponieważ aplikacja nie może kontynuować. Jednakże, jeśli program akceptuje Niepoprawny typ wejścia, jest to wyjątek, ponieważ program może go obsłużyć i przekierować, aby otrzymać prawidłowy typ wejścia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 19:50:58
Oto całkiem dobre podsumowanie z Java API co oznacza błąd i wyjątek:
Błąd jest podklasą Throwable, która wskazuje na poważne problemy, których rozsądna aplikacja nie powinna próbować złapać. Większość takich błędów to nienormalne warunki. Błąd ThreadDeath, choć jest "normalnym" warunkiem, jest również podklasą błędu, ponieważ większość aplikacji nie powinna próbować go złapać.
Metoda nie jest wymagana do zadeklarowania w its throws klauzula dowolne podklasy z Błąd, który może zostać wyrzucony podczas wykonanie metody, ale nie złapany, ponieważ te błędy są zaburzenia, które nigdy nie powinny występuje.
OTOH, dla wyjątków, Java API mówi:
Wyjątek klasy i jego podklasy są formą Throwable, która wskazuje warunki, które rozsądna aplikacja może chcieć złapać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-26 19:50:29
Błędy są spowodowane głównie przez środowisko, w którym aplikacja jest uruchomiona. Na przykład, OutOfMemoryError występuje, gdy JVM kończy się pamięć lub StackOverflowError występuje, gdy przepełnia się stos.
Wyjątki są spowodowane głównie przez samą aplikację. Na przykład, NullPointerException występuje, gdy aplikacja próbuje uzyskać dostęp do obiektu null lub ClassCastException występuje, gdy aplikacja próbuje oddać niekompatybilne typy klas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 14:10:28