Пользовательское сгенерированное исключение вызывает непредвиденную ошибку компиляции

Я хотел сделать пользовательское исключение для обработки возможного деления на ноль в следующем коде,
но компилятор утверждает, что объявленное мной исключение не сообщается.
Извините за этот тип вопроса, но я новичок как в Java, так и объектно-ориентированного программирования.

public class Exception_Tester {
    public static void main(String args[]) { 
        Exception_Tester et = new Exception_Tester(); 
        int x1; 
        int x2; 
        x1 = 5; 
        x2 = 0;
        et.printResults(x1, x2);       
       } 
    void printResults(int a, int b) throws ArithmeticException { 
        System.out.println("Add: "+(a+b)); 
        System.out.println("Sub: "+(a-b)); 
        System.out.println("Mul: "+(a*b)); 
        if(b != 0)
            System.out.println("Div: "+(a/b));
        else{ 
        Exception myException = new ArithmeticException("You can't divide by zero!");
        throw myException;
        } 
    }
}


Ошибка компилятора: незарегистрированное исключение java.lang.Exception; должен быть пойман или объявлен брошенным

1 ответ

Решение

Проблема в том, что вы бросаете Exception это не указано в вашем методе:

Exception myException = new ArithmeticException("You can't divide by zero!");
throw myException; //here you throw Exception

Вы можете решить это одним из следующих способов:

  • Объявите, что ваш метод выдает Exception:

    void printResults(int a, int b) throws Exception {
        //...
    }
    
  • Бросай новый ArithmeticException как есть:

    //Exception myException = new ArithmeticException("You can't divide by zero!");
    throw new ArithmeticException("You can't divide by zero!");
    

Обратите внимание, что ArithmeticException простирается от RuntimeExceptionтак что ваш метод не должен объявлять это. Итак, ваш код может быть таким:

void printResults(int a, int b) { 
    System.out.println("Add: "+(a+b)); 
    System.out.println("Sub: "+(a-b)); 
    System.out.println("Mul: "+(a*b)); 
    if(b != 0) {
        System.out.println("Div: "+(a/b));
    } else {
        throw new ArithmeticException("You can't divide by zero!");
    }
}
Другие вопросы по тегам