Произойдет ли компиляционная ошибка при делении на ноль в блоке try, если catch возвращает исключение, а finally возвращает строку "finally"?

В Java при делении на ноль для целочисленных типов возникает исключение ArithmeticException.

Короткий ответ

Что ответить на собеседовании

В Java при делении на ноль для целочисленных типов возникает исключение ArithmeticException. Если это происходит в блоке try, и в блоке catch выбрасывается другое исключение, а в блоке finally есть оператор return, то именно значение из finally будет возвращено, а исключения будут подавлены.

Подробный разбор

Ответ с пояснениями

В Java при делении на ноль для целочисленных типов возникает исключение ArithmeticException. Если это происходит в блоке try, и в блоке catch выбрасывается другое исключение, а в блоке finally есть оператор return, то именно значение из finally будет возвращено, а исключения будут подавлены.

Пример:

public String test() {
    try {
        int a = 1 / 0; // ArithmeticException
    } catch (Exception e) {
        throw new RuntimeException("Ошибка в catch");
    } finally {
        return "finally";
    }
}

В этом коде метод вернет строку "finally" и не выбросит исключение, так как return в finally перекрывает исключения из try и catch. Компиляционная ошибка не произойдет, но такое поведение может привести к потере информации об ошибках и считается плохой практикой.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее