В Java теоретически можно выбросить только Throwables
.
Это разрешено языком и проверяется во время загрузки класса. Но если вы отключите проверку класса
java -Xverify:none -cp . BadClassThatCompiles
затем вы можете запустить класс, который генерирует любой класс (не производный от Throwable
) (пример)
Почему?
Почему он разработан таким образом.. имеется в виду виртуальная машина, которая позволяет бросать объекты и верификатор, который должен отфильтровывать неправильный код. Как будто какой-то код может быть неправильным. Это не код, это дизайн!
Почему?