Sobes.tech
Junior — Middle

Kas toimub kompileerimisviga nulliga jagamisel try-blokis, kui catch tagastab erandi ja finally tagastab stringi "finally"?

sobes.tech AI

Vastus AI-lt

Java keeles puhul põhjustab nulliga jagamine täisarvutüüpide puhul ArithmeticException erandi. Kui see toimub try plokis, ja catch plokis visatakse teine erand ning finally plokis on return käsk, siis just finally-st saadud väärtus tagastatakse ning erandid on peidetud.

Näide:

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

Selles koodis tagastab meetod stringi "finally" ning ei viska erandit, kuna return finally-s üle kirjutab try ja catch-i erandid. See ei põhjusta kompileerimisviga, kuid selline käitumine võib viia teabe kaotamiseni vigadest ning seda peetakse halbaks praktikaks.