Почему Error в java - unchecked?

Почему было бы плохо, если бы они были checked? Первое что пришло в голову, то что на этапе компиляции мы не можем предвидеть, что возникнет error во время выполнения программы. К тому же мы никак не можем повлиять на большинство событий Error. Но мне кажется, есть еще более существенны причины.


Ответы (2 шт):

Автор решения: Aziz Umarov

Дам кусочек отсюда

Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked). Это свойство присуще «корневищу» (Throwable, Error, Exception, RuntimeException) и передается по наследству. Никак не видимо в исходном коде класса исключения.

В дальнейших примера просто учтите, что

— Throwable и Exception и все их наследники (за исключением наследников Error-а и RuntimeException-а) — checked

— Error и RuntimeException и все их наследники — unchecked

checked exception = проверяемое исключение, проверяемое компилятором.

Необходимо понимать, что

— проверка на cheched исключения происходит в момент компиляции (compile-time checking)

— перехват исключений (catch) происходит в момент выполнения (runtime checking)

→ Ссылка
Автор решения: Roman Konoval

Почему было бы плохо, если бы они были checked?

Плохо было бы потому, что практически каждая функция может бросить практически любое исключение наследник Error, т.к. в большинстве случаев компилятор не сможет проверить, что функция, например, никогда не бросит OutOfMemoryError или StackOverflowError. Доказать это компилятор может далеко не во всех случаях.

А это значит, что если бы они были checked, то нужно объявлять их все в сигнатуре каждой функции.

→ Ссылка