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.