Junior
Kaip teisingai mesti išimtis Java?
sobes.tech AI
Atsakymas iš AI
Išimtys turi būti mesti, kai įvyksta neįprasta situacija, pažeidžianti programos normalią veiklą ir reikalaujanti nedelsiant apdorojimo.
Pagrindiniai principai:
- naudokite išimtis klaidų pranešimams, o ne vykdymo srauto kontrolei.
- pasirinkite tinkamiausią standartinės bibliotekos išimties tipą.
- kurkite savo išimtinių klasių, kai standartinės nesuteikia pakankamai informacijos.
- įtraukite į išimties pranešimą išsamų klaidos priežasties ir konteksto aprašymą.
- negaudykite išimčių, kurių negalite tinkamai apdoroti. Geriau juos iškelti aukščiau per iškvietimų grandinę.
- naudokite
try-with-resourcesblokus automatiškai uždaryti išteklius. - registruokite išimtis, kurias apdorojate arba perduodate aukštyn.
Tinkamas sintaksė: throw new MyException("Klaidos pranešimas");
Pavyzdys:
// Savo išimties kūrimas
public class InvalidParameterException extends Exception {
public InvalidParameterException(String message) {
super(message);
}
}
// Metodas, kuris meta išimtį
public int divide(int a, int b) throws InvalidParameterException {
if (b == 0) {
throw new InvalidParameterException("Dalyba iš nulio draudžiama");
}
return a / b;
}
// Metodų naudojimas ir išimčių apdorojimas
public void performDivision(int x, int y) {
try {
int result = divide(x, y);
System.out.println("Rezultatas: " + result);
} catch (InvalidParameterException e) {
// klaidos registravimas
System.err.println("Dalybos klaida: " + e.getMessage());
// galimas papildomas apdorojimas arba išmetimas aukštyn
}
}
Skirtumai tarp Checked ir Unchecked išimčių:
| Tipas | Paveldėjimas | Reikalauja apdorojimo / deklaracijos | Pavyzdys |
|---|---|---|---|
| Checked | Exception (išskyrus RuntimeException) |
Taip (try-catch arba throws) |
IOException, SQLException |
| Unchecked | RuntimeException |
Ne (kompiliatorius nereikalauja) | NullPointerException, ArrayIndexOutOfBoundsException |