Почему этот метод, который выдает исключение, не должен находиться в блоке try catch при вызове? - PullRequest
0 голосов
/ 24 мая 2019

Я вызываю метод, который генерирует исключения, но мне не нужно помещать этот метод в блок try catch в static void main (String args []), даже если в этом руководстве говорится, что я должен получить ошибку.Почему это?Ниже мой код и ссылка на учебник.Я поиграл со вторым примером в уроке.

https://beginnersbook.com/2013/04/java-throws/?unapproved=133049&moderation-hash=486e9de11daa2c67068e84cdacd88794#comment-133049

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 ]

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

В учебнике есть небольшая ошибка: хотя в нем четко указано, что существует один вид исключений, которые не нужно перехватывать, он не замечает, что исключения, выданные в их собственных примерах, не проверены ,то есть из Runtime сорта:

С другой стороны, непроверенное исключение (время выполнения) не проверяется во время компиляции.Ключевое слово throws используется для обработки проверенных исключений.

Замените ArithmeticException на исключение, которое вы извлекаете непосредственно из Exception, чтобы увидеть ошибку.

2 голосов
/ 24 мая 2019

Говоря о Исключения в Java , вызываются только 2 основных типа: проверенные исключения и непроверенные исключения .

проверенные исключения проверяются во время компиляции: если вы не обработали проверенное исключение (с помощью tryНапример, блок / catch или ключевое слово throws), компилятор выдаст ошибку, другими словами, он не позволит вам собрать вашу программу, поэтому вы всегда должны обрабатывать все отмеченные исключения.

непроверенные исключения проверяются во время выполнения: ваш компилятор не выдаст ошибку, если вы не обработаете исключения такого типа.

Теперь вопрос: как я могу различить эти два типа, когда я кодирую?

Прежде всего, вы должны иметь в виду, что каждое исключение в Java должно наследоваться от «Исключение», класс .

Теперь существует простой способ отличить непроверенное исключение от проверенного: любой класс исключений, который наследуется от "RuntimeException" , считается непроверенное исключение и любой класс, который наследует от "Исключение" , но не "RuntimeException" считается проверенным исключением .

В вашем случае метод, который вы вызываете, выдаетArithmeticException и NullPointerException.Но эти два исключения наследуются от "RuntimeException" .Итак, согласно правилу, написанному выше, эти 2 исключения являются непроверенными исключениями , и поэтому вам не нужно было обращаться с ним при вызове вашего метода myMethod().

...