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