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?

Author: Termininja, 2009-05-26

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 jak NullPointerException lub niezgodny z prawem argument. Aplikacje mogą czasami obsługiwać lub odzyskiwać z tego Throwable Kategoria -- lub przynajmniej złapać go w wątku run() 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 i TimeoutException...
 146
Author: Eddie,
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.

Hierarchia Wyjątków Java

 24
Author: avandeursen,
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.

 17
Author: Robin,
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ć.

 7
Author: Powerlord,
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 -

  1. Errors w Javie są typu java.lang.Error.
  2. wszystkie błędy w Javie są niezaznaczone.
  3. Errors dzieje się w czasie uruchomienia. Nie będą znane kompilatorowi.
  4. nie da się odzyskać po błędach.
  5. Error s są głównie spowodowane przez środowisko, w którym aplikacja jest uruchomiona.
  6. przykłady : java.lang.StackOverflowError, java.lang.OutOfMemoryError

Wyjątki-

  1. Exceptions W java są typu java.lang.Exception.
  2. ExceptionS zawierają zarówno zaznaczony, jak i niezaznaczony Typ.
  3. zaznaczone wyjątki są znane kompilatorowi, gdzie jako niezaznaczone wyjątki nie są znane kompilatorowi, ponieważ występują w czasie wykonywania.
  4. możesz odzyskać wyjątki, obsługując je za pomocą try-catch bloków.
  5. Exceptions są spowodowane głównie przez samą aplikację.
  6. 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 / http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png

 4
Author: roottraveller,
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ż podklasa Error, 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.

 3
Author: Tobias Müller,
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 kluczowego throws. Taka deklaracja wymagana tylko dla java.lang.Exception i podklas, dla java.lang.Throwable, java.lang.Error i java.lang.RuntimeException i ich podklasy jest to opcjonalne.

    • Tylko java.lang.Throwable i podklasy mogą być używane w klauzuli catch.

    • 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 inny java.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 i java.lang.Exception, która po raz pierwszy uważana jest za niezaznaczony wyjątek do sprawdzania WYJĄTKÓW w czasie kompilacji. Ponieważ kod wynikowy java.lang.Error lub jego podklasy nie wymagają deklarowania tego błędu w nagłówku metody. Podczas rzucania java.lang.Exception wymaganej deklaracji w nagłówku metody.

Throwable i jego następca diagram klasy(właściwości i metody są pominięte). Tutaj wpisz opis obrazka

 2
Author: Mikhailov Valentine,
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.

 1
Author: Mr. Will,
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ć.

 0
Author: egaga,
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.

Źródło: Różnica Między Błędem A Wyjątek W Javie

 0
Author: user2485429,
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