public class HelloWorld {
static {
try {
int i=10/0;
} catch(ExceptionInInitializerError | ArithmeticException e) {
e.printStackTrace();
}
}
public static void main(String []args) {
System.out.println("Hello World");
}
}
Выход:примерки multicatch с ExceptionInInitializerError и ArithmeticException спутанность
java.lang.ArithmeticException:/by zero
at HelloWorld.<clinit>(HelloWorld.java:7)
Там нет никакой фактической цели этого кода. Но только удивился, почему он бросил ArithmeticException
за ExceptionInInitializerError
. Просто попробуйте выписать несколько ловушек и наткнулся на это.
Код ниже бросает ExceptionInInitializerError
. Так логично, если я использую try-multicatch, он должен поймать ExceptionInInitializerError
, но это не тот случай. Может кто-нибудь помочь мне здесь.
public class HelloWorld {
static int i = 10/0;
public static void main(String []args){
System.out.println("Hello World");
}
}
Выход:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException:/by zero
at HelloWorld.<clinit>(HelloWorld.java:4)
Как предполагают, первое исключение ('ArithmeticException') выбрано первым. Когда вы его не поймаете, он завершается в 'ExceptionInInitializerError' при завершении статической инициализации. Если, однако, вы его поймаете, вы сразу же распечатываете трассировку стека _while еще в статическом коде инициализации. Вы посмотрели дальше, чтобы узнать, есть ли у вас «ExceptionInInitializerError»? –