Sobes.tech
Junior — Middle

Czy wystąpi błąd kompilacji podczas dzielenia przez zero w bloku try, jeśli catch zwraca wyjątek, a finally zwraca ciąg "finally"?

sobes.tech AI

Odpowiedź od AI

W Javie, dzielenie przez zero dla typów całkowitych powoduje wyrzucenie wyjątku ArithmeticException. Jeśli zdarzy się to w bloku try, a w bloku catch zostanie wyrzucony inny wyjątek, a w bloku finally znajduje się instrukcja return, to zostanie zwrócona wartość z finally, a wyjątki zostaną zignorowane.

Przykład:

public String test() {
    try {
        int a = 1 / 0; // ArithmeticException
    } catch (Exception e) {
        throw new RuntimeException("Błąd w catch")
    } finally {
        return "finally";
    }
}

W tym kodzie metoda zwróci ciąg znaków "finally" i nie wyrzuci wyjątku, ponieważ return w finally nadpisuje wyjątki z try i catch. Nie wystąpi błąd kompilacji, ale takie zachowanie może prowadzić do utraty informacji o błędach i jest uważane za złą praktykę.