На приведенном ниже рисунке показано, что "Проверено" и "Непроверено" Исключения являются подклассами Exception
. Я сбиваю с толку, что вам нужно поймать Exception
, но вам не нужно ловить RuntimeException
, который непосредственно наследуется от Exception
. Есть ли причина, по которой разработчики не позволяли нам бросать Исключения, не требуя их поймать?
В частности: почему вы можете игнорировать только RuntimeExceptions
и это дети? Почему не было класса, введенного под названием CheckedException extends Exception
, и вам нужно только его поймать и это дети?
Сбивая с толку часть, вы можете выбросить все ниже RuntimeException
без проблем, но когда вы переходите к Exception
в иерархии, вам нужно поймать ее в какой-то момент. Это сбивает с толку, потому что "абстракция" обычно работает иначе. Чем больше вы продвигаетесь, тем больше становится все больше и больше мета. Здесь не так. Чем больше вы двигаетесь вверх, тем больше вам нужно делать (например, ставить try/catch после достижения Exception
).