Sobes.tech
Junior — Middle

Ще възникне ли грешка при компилиране при деление на нула в блок try, ако catch връща изключение, а finally връща низ "finally"?

sobes.tech AI

Отговор от AI

В 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. Това поведение може да доведе до загуба на информация за грешките и се счита за лоша практика.