Я хочу изменить выводимое сообщение ArithmeticException
.Итак, для этого я провел несколько экспериментов.Я расширил класс ArithmeticException
на класс ExtenderClass
.Смысл этого вопроса состоит не только в том, чтобы найти решения для изменения сообщения об исключении ArithmeticException
, но и в том, почему некоторые из приведенных ниже случаев работают должным образом, а некоторые нет?Ниже приведены случаи вместе с их выходами:
Случай 1:
// Both the classes are in the same file 'MyClass.java'
class MyClass{
public static void main(String args[]){
int a,b,c;
a = 1;
b = 0;
try{
c = a / b;
}catch(ArithmeticException e){
System.out.println("I caught: " + e);
}
}
}
class ExtenderClass extends ArithmeticException{
// ...
}
Выход:
I caught: java.lang.ArithmeticException: / by zero
Результат: работает нормально, как и ожидалось.
Случай 2:
// Both the classes are in the same file 'MyClass.java'
class MyClass{
public static void main(String args[]){
int a,b,c;
a = 1;
b = 0;
try{
c = a / b;
}catch(ExtenderClass e){
System.out.println("I caught: " + e);
}
}
}
class ExtenderClass extends ArithmeticException{
// ...
}
Выход:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at MyClass.main(MyClass.java:9)
Результат: означает, что throw/catch
не запущен.Почему ExtenderClass
не срабатывает?На самом деле это расширение класса ArithmeticException
?
Случай 3:
// Both the classes are in the same file 'MyClass.java'
class MyClass{
public static void main(String args[]){
int a,b,c;
a = 1;
b = 0;
try{
c = a / b;
throw new ArithmeticException();
}catch(ArithmeticException e){
System.out.println("I caught: " + e);
}
}
}
class ExtenderClass extends ArithmeticException{
// ...
}
Выход:
I caught: java.lang.ArithmeticException: / by zero
Результат: работает нормально, как ожидалось.
Случай 4:
// Both the classes are in the same file 'MyClass.java'
class MyClass{
public static void main(String args[]){
int a,b,c;
a = 1;
b = 0;
try{
c = a / b;
throw new ExtenderClass();
}catch(ExtenderClass e){
System.out.println("I caught: " + e);
}
}
}
class ExtenderClass extends ArithmeticException{
// ...
}
Выход:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at MyClass.main(MyClass.java:9)
Результат: означает, что throw/catch
не запущен.Почему ExtenderClass
не выстрелил?На самом деле это расширение класса ArithmeticException
?
Почему класс ExtenderClass
, который расширяет ArithmeticException
, не запускается?Но когда я использую ArithmeticException
напрямую, он срабатывает.