Почему Error в java - unchecked?
Почему было бы плохо, если бы они были checked? Первое что пришло в голову, то что на этапе компиляции мы не можем предвидеть, что возникнет error во время выполнения программы. К тому же мы никак не можем повлиять на большинство событий Error. Но мне кажется, есть еще более существенны причины.
Ответы (2 шт):
Дам кусочек отсюда
Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked). Это свойство присуще «корневищу» (Throwable, Error, Exception, RuntimeException) и передается по наследству. Никак не видимо в исходном коде класса исключения.
В дальнейших примера просто учтите, что
— Throwable и Exception и все их наследники (за исключением наследников Error-а и RuntimeException-а) — checked
— Error и RuntimeException и все их наследники — unchecked
checked exception = проверяемое исключение, проверяемое компилятором.
Необходимо понимать, что
— проверка на cheched исключения происходит в момент компиляции (compile-time checking)
— перехват исключений (catch) происходит в момент выполнения (runtime checking)
Почему было бы плохо, если бы они были checked?
Плохо было бы потому, что практически каждая функция может бросить практически любое исключение наследник Error, т.к. в большинстве случаев компилятор не сможет проверить, что функция, например, никогда не бросит OutOfMemoryError или StackOverflowError. Доказать это компилятор может далеко не во всех случаях.
А это значит, что если бы они были checked, то нужно объявлять их все в сигнатуре каждой функции.