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");
}
}
Ausgang:Try-multicatch mit ExceptionInInitializerError und ArithmeticException Verwirrung
java.lang.ArithmeticException:/by zero
at HelloWorld.<clinit>(HelloWorld.java:7)
Es gibt keinen eigentlichen Zweck diesen Code. Aber nur gewundert, warum es ArithmeticException
über ExceptionInInitializerError
warf. Einfach Multi-Catch-Anweisung ausprobieren und lief darin.
Der folgende Code löst ExceptionInInitializerError
aus. Logisch, wenn ich Try-Multicatch verwende, sollte es ExceptionInInitializerError
fangen, aber das ist hier nicht der Fall. Kann mir hier jemand helfen?
public class HelloWorld {
static int i = 10/0;
public static void main(String []args){
System.out.println("Hello World");
}
}
Ausgang:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException:/by zero
at HelloWorld.<clinit>(HelloWorld.java:4)
Als Vermutung wird zuerst die wirkliche Ausnahme ('ArithmeticException') geworfen. Wenn Sie es nicht abfangen, wird es beim Abschluss der statischen Initialisierung in 'ExceptionInInitializerError' gehüllt. Wenn Sie es jedoch fangen, drucken Sie sofort den Stack-Trace _while immer noch im statischen Initialisierungscode_. Haben Sie weiter unten nachgesehen, ob Sie dann 'ExceptionInInitializerError' erhalten haben? –