Junior
Kuidas õigesti visata erandeid Java's?
sobes.tech AI
Vastus AI-lt
Erandid tuleks visata, kui toimub ebatavaline olukord, mis rikub programmi normaalse täitmise ja nõuab viivitamatut töötlemist.
Põhialused:
- kasutage erandeid vigade teavitamiseks, mitte töövoo kontrollimiseks.
- valige sobivaim standardraamatukogu eranditüüp.
- looge oma erandiklassid, kui standard ei paku piisavat teavet.
- lisage erandite sõnumitesse üksikasjalik teave vea põhjuse ja konteksti kohta.
- ärge püüdke erandeid, mida te ei saa õigesti töödelda. Parim on need edasi visata kõrgemale kutsesilindri kaudu.
- kasutage
try-with-resourcesplokke ressursside automaatseks sulgemiseks. - logige töötlemata või kõrgemale visatud erandeid.
Õige süntaks: throw new MyException("Viga teate");
Näide:
// Oma erandi loomine
public class InvalidParameterException extends Exception {
public InvalidParameterException(String message) {
super(message);
}
}
// Meetod, mis viskab erandi
public int divide(int a, int b) throws InvalidParameterException {
if (b == 0) {
throw new InvalidParameterException("Jagamine nulliga on keelatud");
}
return a / b;
}
// Meetodi kasutamine ja erandi töötlemine
public void performDivision(int x, int y) {
try {
int result = divide(x, y);
System.out.println("Tulemus: " + result);
} catch (InvalidParameterException e) {
// vea logimine
System.err.println("Jagamise viga: " + e.getMessage());
// võimalik täiendav töötlemine või edasi viskamine
}
}
Erandite Checked ja Unchecked erinevused:
| Tüüp | Pärimine | Nõutav töötlemine / deklaratsioon | Näide |
|---|---|---|---|
| Checked | Exception (välja arvatud RuntimeException) |
Jah (try-catch või throws) |
IOException, SQLException |
| Unchecked | RuntimeException |
Ei (kompilaator ei nõua) | NullPointerException, ArrayIndexOutOfBoundsException |