У меня есть небольшая теоретическая проблема с конструкциями try-catch.Исключение Java не поймано?
вчера я взял практический экзамен о Java, и я не понимаю, следующий пример:
try {
try {
System.out.print("A");
throw new Exception("1");
} catch (Exception e) {
System.out.print("B");
throw new Exception("2");
} finally {
System.out.print("C");
throw new Exception("3");
}
} catch (Exception e) {
System.out.print(e.getMessage());
}
Вопрос был «что выход будет выглядеть?»
Я был уверен, что это будет AB2C3, НО suprise suprise, это неправда.
Правильный ответ - ABC3 (проверено и действительно так).
Вопрос, где произошло Исключение («2»)?
+1 Ahh man, я знал этот ответ. Об этом меня попросили в интервью. Это очень хороший вопрос для понимания того, как try/catch/наконец работает в стеке. –
Существует только один оператор печати, который может печатать число (последнее: 'print (e.getMessage())). Вы считали, что вывод будет 'AB2C3': вы считали, что внешний блок' catch' будет выполнен дважды? –
В java, перед выполнением команды, выполняющей управление передачей из блока catch, блок finally выполняется при условии, что он существует. Если только код в блоке finally не передает управление наружу, выполняется отложенная команда из блока catch. – Thomas