Sobes.tech
Junior — Middle

Ar įvyks kompiliatoriaus klaida dalijantis iš nulio try bloke, jei catch grąžina išimtį ir finally grąžina eilutę "finally"?

sobes.tech AI

Atsakymas iš AI

Java kalbėje, dalijantis iš nulio sveikųjų tipų atveju įvyksta ArithmeticException išimtis. Jei tai įvyksta try bloke, ir catch bloke išmetama kita išimtis, o finally bloke yra return sakinys, tada būtent finally grąžinama reikšmė ir išimtis yra slopinamos.

Pavyzdys:

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

Šiame kode metodas grąžins eilutę "finally" ir neišmes išimties, nes return finally bloke perrašo try ir catch išimtis. Nepasieks kompiliacijos klaida, tačiau toks elgesys gali sukelti informacijos praradimą apie klaidas ir yra laikomas bloga praktika.