Исключение Java, не пойманное

Выполненный: sudo tune2fs -c 30 /dev/hda1

Замена /dev/hda1 с файловыми системами, что это проверяет каждую начальную загрузку.

42
задан Belphegor 15 May 2017 в 10:19
поделиться

6 ответов

Поскольку некоторые исключения не являются производными от Exception - например, Throwable и Error .

В основном иерархия типов:

       Object
         |
      Throwable
     /         \
Exception      Error

Only Throwable и производные классы могут быть выброшены, поэтому, если вы поймаете Throwable , он действительно перехватит все.

Throwable , Exception и любое исключение, производное из Exception , другие , кроме тех, что получены из RuntimeException , считаются проверенными исключениями - это те исключения, которые вы должны объявить, которые вы выбросите, поймать, если вы вызываете что-то, что их бросает.

В общем, иерархия исключений Java немного запуталась ...

120
ответ дан 26 November 2019 в 23:20
поделиться

Errors aren't Exceptions.

The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.

-- JavaDoc for java.lang.Exception

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.

-- JavaDoc for java.lang.Error

There are certain errors that you may want to catch, such as ThreadDeath. ThreadDeath is classified as an Error, as explained below

The class ThreadDeath is specifically a subclass of Error rather than Exception, even though it is a "normal occurrence", because many applications catch all occurrences of Exception and then discard the exception.

-- JavaDoc for ThreadDeath

However, since Thread's stop() method is now deprecated, you should not use it, and thus you should never see ThreadDeath.

6
ответ дан 26 November 2019 в 23:20
поделиться

Исключение - это всего лишь один из видов Throwable; NoSuchMethodError - это не исключение, а ошибка, которая является еще одним типом Throwable.

4
ответ дан 26 November 2019 в 23:20
поделиться

Как указывается в обоих других сообщениях, catch (Exception e) будет работать только для исключений, производных от Exception . Однако, если вы посмотрите на древовидную иерархию, вы заметите, что Exception if Throwable . Throwable также является базовым классом для ошибки . Итак, в случае NoSuchMethodError это ошибка, а не исключение. Обратите внимание на соглашение об именах * Error vs. * Exception (например, в IOException).

0
ответ дан 26 November 2019 в 23:20
поделиться

Как указывали другие плакаты, не все бросаемые объекты являются подклассами Exception . Однако в большинстве случаев не рекомендуется перехватывать Error или Throwable , потому что эти условия включают в себя некоторые действительно серьезные ошибки, которые нельзя легко исправить. Ваш код восстановления может только ухудшить ситуацию.

1
ответ дан 26 November 2019 в 23:20
поделиться

Вы можете поймать Throwable . Ошибка и исключение расширяют Throwable .

см. Throwable JavaDoc :

Класс Throwable является суперклассом всех ошибок и исключений в языке Java.

3
ответ дан 26 November 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: