Пользовательское сгенерированное исключение вызывает непредвиденную ошибку компиляции
Я хотел сделать пользовательское исключение для обработки возможного деления на ноль в следующем коде,
но компилятор утверждает, что объявленное мной исключение не сообщается.
Извините за этот тип вопроса, но я новичок как в 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!");
}
}