Обработка исключений в предложениях Catch и Final
При работе с обработкой исключений в Java крайне важно понимать взаимодействие между предложениями catch и Final . Рассмотрим следующий пример, приведенный для университетского задания:
class MyExc1 extends Exception {}
class MyExc2 extends Exception {}
class MyExc3 extends MyExc2 {}
public class C1 {
public static void main(String[] args) throws Exception {
try {
System.out.print(1);
q();
}
catch (Exception i) {
throw new MyExc2();
}
finally {
System.out.print(2);
throw new MyExc1();
}
}
static void q() throws Exception {
try {
throw new MyExc1();
}
catch (Exception y) {
}
finally {
System.out.print(3);
throw new Exception();
}
}
}
Вопрос задается для вывода этого кода. Хотя некоторые, возможно, ответили: «13Exception в главном потоке MyExc2», правильный ответ — «132Exception в главном потоке MyExc1».
Почему MyExc2 исчезает
Ключ к пониманию правильный результат заключается в поведении предложений catch иfinally. Когда исключение генерируется внутри блока catch илиfinally, это оказывает существенное влияние на поток. Вот разбивка:
Исключение в блоке Final: Аналогично, если в блокfinally, исходное исключение также прерывается. Однако есть важный момент, на который следует обратить внимание:
Отслеживание исключений
Отслеживая выполнение на основе этих принципов, мы видим, что:
Блок Catch в main:
Наконец блок в основном:
Поэтому правильный вывод — «132Exception в главном потоке MyExc1». Исключение MyExc2 «забыто», поскольку новое исключение (MyExc1) создается в блокеfinally блока catch, который обрабатывал MyExc2.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3