Ошибка компиляции: незарегистрированное исключение Add; должен быть пойман или объявлен брошенным - PullRequest
1 голос
/ 19 апреля 2019

Я хочу создать пользовательское исключение с добавлением, но получаю ошибку компиляции.

class Test{

    public static void main(String[] args){

        int a=9, b=67, result;
        result = a+b;
        throw new Add("Addition has been performed");
    }
}
class Add extends Throwable{
    Add(){
        printStackTrace();
    }
    Add(String message){
        System.out.println(message);
        printStackTrace();  
    }
}

Ошибка:

Practice.java:8: error: unreported exception Add; must be caught or declared to be thrown
                throw new Add("Addition has been performed");

Ответы [ 6 ]

1 голос
/ 19 апреля 2019

Я бы отметил, что независимо от ошибки компиляции и возможных исправлений, расширение Throwable плохая идея.

  • Это не нужно.Вы можете / должны расширить Exception или RuntimeException или любой из их подклассов.

  • Существует много кода, который предполагает, что все исключения Exception или Error илиих подтипы, а не какой-то «случайный» подтип Throwable.

  • Общий смысл случайного подкласса Throwable неясен;например, см. Какой подкласс Throwable должен быть пойман, а какой нет?

См. также обсуждение в этом разделе вопросов и ответов:


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

0 голосов
/ 20 апреля 2019

Во-первых, в Java есть 2 типа исключений. Проверено и не проверено. Проверяются исключения, которые вы должны обработать, либо перехватывая их (окружая блок, часть кода, содержащие методы, которые будут вызывать исключение, подобное вашему), либо объявляя, что родительский метод, вызывающий этот метод, вызывает исключение.

Throwable - это базовый класс всех ошибок в Java. Существует несколько типов ошибок, подтип - Исключения.

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

0 голосов
/ 19 апреля 2019

Вы успешно создали и сгенерировали исключение, но для его обработки используйте блок Try and Catch.

0 голосов
/ 19 апреля 2019

Если вы не хотите, чтобы исключение не проверялось, вам нужно либо объявить, что ваш метод может вызвать это исключение

public static void main(String[] args) throws Add {

или окружить его операторами try / catch

try {
    throw new Add("Addition has been performed");
} catch (Add add) {
    add.printStackTrace();
}

В целом, я бы посоветовал вам использовать IDE, они действительно способны помочь вам с такими проблемами.

0 голосов
/ 19 апреля 2019

Либо поймать / отбросить Add бросаемый или расширить его с RuntimeException - они не обязательно должны быть пойманы.

class Add extends RuntimeException
0 голосов
/ 19 апреля 2019

Чтобы сделать исключение непроверенным, объявите его следующим образом

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