Каким образом Java может генерировать исключение без оператора `throw`? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь найти исчерпывающий список ситуаций, когда JVM генерирует исключение без оператора throw в коде Java. Конечно, мы все знакомы с исключениями NullPointerException, такими как:

Object o = null;
o.toString();

Также целочисленная математика может вызвать исключение ArithmeticException в 1/0 и распаковать нулевое целое число, как в Integer i=null; i++;.

Что касается моей непосредственной проблемы, меня не волнуют Error дела, такие как StackOverflowError и OutOfMemoryError, просто типы Exception (хотя, если есть список ошибок, не стесняйтесь указывать на это) , Я также счастлив исключить вызов произвольного нативного кода из Java. Благодарю.

Еще один способ думать об этом - если я увижу Stacktrace, как это:

Exception in thread "main" java.lang.SomeException: Some Exception Message
    at com.test.MyClass.main(MyClass.java:6)

затем я открываю MyClass.java, а в строке 6 нет оператора throw - есть ли где-нибудь канонический список возможных причин исключения? Еще раз спасибо.

1 Ответ

4 голосов
/ 22 мая 2019

Канонического списка нет.Вот несколько причин, почему:

  1. Сопровождающие Java не предоставили такую ​​возможность.Предположительно, они не думают, что это было бы полезным упражнением 1 .
  2. Любой стандартный метод библиотеки, реализованный в нативном коде , может вызвать любое исключение без Java throw заявление.Это не задокументировано и будет варьироваться в зависимости от версии Java.
  3. Любой сторонний метод библиотеки может вызвать любое исключение из собственного кода.
  4. Вы можете вызвать любое исключение, вызвав Unsafe.throwException.

И так далее.

Обратите внимание, что 3. и 4. означают, что возможно создание проверенного исключения методом, который не объявляет исключение в своей подписи.

Короче говоря, любое возможное исключение можно бросить без throws заявления.


1 - Спросите себя: почему эта информация будет практической ?Команда Java не собирается тратить время на создание и поддержание такого списка, если он бесполезен.Отмечая, что было бы трудно производить механически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...