Я знал, что когда возникает исключение, блок перехвата перехватывает это исключение после перехвата исключения, оно переходит в блок finally. когда я запускаю код вроде
public static void main(String... args) {
try {
throw new ClassCastException();
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException();
} catch (RuntimeException e) {
System.out.println("This catch block must executed");
} finally {
throw new ArithmeticException();
}
}
вывод:
Этот блок catch должен выполняться
Исключение в потоке main java.lang.ArithmeticException в com.oop.design.demo.Main.main(Main.java:31)
ожидается вывод, я ясно выше порядок выполнения. но всякий раз, когда код изменяется, например
public static void main(String... args) {
try {
throw new ClassCastException();
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException();
} catch (RuntimeException e) {
throw new IOException();
} finally {
throw new ArithmeticException();
}
}
вывод:
Исключение в потоке main java.lang.ArithmeticException at com.oop.design.demo.Main.main(Main.java:31)
мой вопрос в том, почему блок catch не выполняется?
javap -c <class name>
- person Anand Kumar   schedule 27.06.2021finally
не перехватывает уже созданные исключения. Он не может сказать, распространяется ли в данный момент исключение, не говоря уже о том, что это такое. Он может (однако) заменить любое распространяющееся в данный момент исключение наthrow
другое или может заменить его другой причиной завершения; например черезreturn
. - person Stephen C   schedule 27.06.2021finally
считается плохим стилем. Это плохо для читабельности. - person Stephen C   schedule 27.06.2021