Я вызываю метод, который генерирует исключения, но мне не нужно помещать этот метод в блок try catch в static void main (String args []), даже если в этом руководстве говорится, что я должен получить ошибку. Почему это? Ниже мой код и ссылка на учебник. Я поиграл со вторым примером в уроке.
public class Sample2 {
static void myMethod() throws ArithmeticException, NullPointerException {
System.out.println("myMethod has been successfully called");
throw new ArithmeticException("Arithmetic Expression has been thrown");
}
public static void main(String args[]) {
myMethod();
}
}
2 ответа
Когда речь идет о исключениях в Java , используются только 2 основных типа: проверенные исключения и непроверенные исключения .
проверенные исключения проверяются во время компиляции: если вы не обработали проверенное исключение (например, с помощью блока try / catch или ключевого слова throws), компилятор выдаст ошибку, другими словами, он не позволит вам собрать вашу программу, поэтому вы всегда должны обрабатывать все проверенные исключения.
непроверенные исключения проверяются во время выполнения: ваш компилятор не выдаст ошибку, если вы не обработаете исключения такого типа.
Теперь вопрос: как я могу различить эти два типа, когда я пишу код?
Прежде всего следует помнить, что каждое исключение в java должно наследоваться от класса «Exception» .
Теперь есть простой способ отличить непроверенное исключение от проверенного: любой класс исключений, который наследуется от «RuntimeException» , считается непроверенное исключение и любой класс, унаследованный от «Исключение» , но не «RuntimeException» считается проверенным исключением .
В вашем случае , метод, который вы вызываете, выдает ArithmeticException
и NullPointerException
. Но эти два исключения наследуются от «RuntimeException» . Итак, согласно правилу, написанному выше, эти 2 исключения являются непроверенными исключениями , и поэтому вам не нужно было их обрабатывать при вызове метода myMethod()
.
В учебнике есть небольшая ошибка: хотя в нем четко указано, что существует один вид исключений, которые не нужно перехватывать, он не замечает, что исключения, выданные в их собственных примерах, являются непроверенными , т.е. Runtime
разнообразие:
С другой стороны, непроверенное исключение (время выполнения) не проверяется во время компиляции. Ключевое слово Throws используется для обработки проверенных исключений.
Замените ArithmeticException
исключением, которое вы получили непосредственно из Exception
, чтобы увидеть ошибку.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].