Ответ
Будет выброшено исключение из блока finally. Исключение из блока catch будет подавлено (added as a suppressed exception).
Причина: Блок finally выполняется всегда, даже если в catch возникло новое исключение. JVM прекращает обработку исключения из catch и начинает обработку исключения из finally.
Пример:
try {
throw new IOException("Ошибка в try");
} catch (IOException e) {
throw new RuntimeException("Ошибка в catch", e); // Это исключение будет подавлено
} finally {
throw new IllegalArgumentException("Ошибка в finally"); // Это исключение будет выброшено
}
Вывод в консоль:
Exception in thread "main" java.lang.IllegalArgumentException: Ошибка в finally
at Main.main(Main.java:8)
Suppressed: java.lang.RuntimeException: Ошибка в catch
at Main.main(Main.java:6)
Caused by: java.io.IOException: Ошибка в try
... 1 more
Практический вывод: Избегайте выброса исключений в finally, так как это может скрыть первоначальную причину ошибки. Используйте finally только для безопасного освобождения ресурсов.