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ę.