Sobes.tech
Junior — Middle

Došlo by k chybě při kompilaci při dělení nulou v bloku try, pokud catch vrací výjimku a finally vrací řetězec "finally"?

sobes.tech AI

Odpověď od AI

V jazyce Java při dělení celých čísel nulou dojde k výjimce ArithmeticException. Pokud se to stane v bloku try, a v bloku catch je vyhozena jiná výjimka, a v bloku finally je příkaz return, bude vrácena právě hodnota z finally, a výjimky budou potlačeny.

Pří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ódu metoda vrátí řetězec "finally" a nevypustí žádnou výjimku, protože return v finally přebíjí výjimky z try a catch. Nedojde k chybě kompilace, ale takové chování může vést ke ztrátě informací o chybách a je považováno za špatnou praxi.