Sobes.tech
Junior — Middle

Príde k chybe pri kompilácii pri delení nulou v bloku try, ak catch vracia výnimku a finally vracia reťazec "finally"?

sobes.tech AI

Odpoveď od AI

V Jave pri delení celých čísel nulou dôjde k výnimke ArithmeticException. Ak sa to stane v bloku try, a v bloku catch je vyhodená iná výnimka, a v bloku finally je príkaz return, bude vrátená práve hodnota z finally, a výnimky budú potlačené.

Príklad:

public String test() {
    try {
        int a = 1 / 0; // ArithmeticException
    } catch (Exception e) {
        throw new RuntimeException("Chyba v catch");
    } finally {
        return "finally";
    }
}

V tomto kóde metóda vráti reťazec "finally" a nevypustí žiadnu výnimku, pretože return v finally prekrýva výnimky z try a catch. Nedôjde k chybe kompilácie, ale takéto správanie môže viesť ku strate informácií o chybách a je považované za zlú prax.