Kuidas Java-s käsitletakse vigu ja kuidas nendega töötada?
sobes.tech AI
Vastus AI-lt
Java vigade töödeldakse erandimehhanismi kasutades. Erandid on sündmused, mis katkestavad programmi normaalse täitmise voolu. On kaks tüüpi erandeid: Checked Exceptions ja Unchecked Exceptions.
Checked Exceptions:
- pärivad
java.lang.Exception-ist (välja arRuntimeException). - Peavad olema töödeldud (kasutades
try-catch) või deklareeritud meetodi signatuuris (kasutadesthrows). - Esindavad vigu, mis võivad tekkida tavatingimustes (näiteks
IOException,FileNotFoundException).
Unchecked Exceptions:
- pärivad
java.lang.RuntimeExceptionvõijava.lang.Error. - Ei nõua kohustuslikku töötlemist ega deklareerimist.
- Esindavad vigu, mis sageli viitavad loogikavigadele koodis või mittestandardsetele täitmise keskkonna seisunditele (näiteks
NullPointerException,ArrayIndexOutOfBoundsException).
Erandite töötlemine:
Kasutatakse try-catch-finally plokke:
try: Koodiplokk, mis võib põhjustada erandi.catch: Koodiplokk, mis käivitatakse, kuitryplokis tekib määratud tüüpi erand.finally: Koodiplokk, mis käivitatakse sõltumata sellest, kas erand tekkis või mitte. Sageli kasutatakse ressursside vabastamiseks.
try {
// Kood, mis võib põhjustada erandi
int result = 10 / 0; // Näide: ArithmeticException
} catch (ArithmeticException e) {
// ArithmeticException töötlemine
System.err.println("Jagamine nulliga viga: " + e.getMessage());
} catch (Exception e) {
// Kõikide teiste erandite töötlemine
System.err.println("Üldine viga: " + e.getMessage());
} finally {
// Kood, mis käivitatakse alati
System.out.println("Finally plokk täidetud.");
}
Erandite edastamine:
Meetod võib deklareerida, et see võib genereerida teatud erandi, kasutades throws sõna:
public void readFile(String filePath) throws FileNotFoundException, IOException {
// Faili lugemise kood
FileReader fr = new FileReader(filePath);
// Kui fail ei leidu, võib visata `FileNotFoundException`
// Kui tekib sisendi/väljundi viga, võib visata `IOException`
// ...
}
Kutsuv meetod peab kas töötlema selle erandi (try-catch) või deklareerima, et ta edastab selle edasi.
Oma erandite loomine:
Võite luua oma erandiklassid, pärides Exception-ist (Checked Exceptions) või RuntimeException-ist (Unchecked Exceptions):
public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
Kasutus:
public void processData(int value) throws MyCustomException {
if (value < 0) {
throw new MyCustomException("Väärtus ei saa olla negatiivne");
}
// Andmete töötlemine
}
Peamised erandiklassid (hierarhia):
java.lang.Throwable(kõigi vigade ja erandite alusklass)java.lang.Error(tõsiste probleemide jaoks, mida tavaliselt ei töödelda programmis, näiteksOutOfMemoryError)java.lang.Exception(erandid, mida programm saab töödelda)java.lang.RuntimeException(Unchecked Exceptions)NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException- ja teised
- Teised
ExceptionalamklassidIOExceptionFileNotFoundExceptionSQLException- ja teised
Eranditega töötamine hõlmab selle hierarhia mõistmist, sobiva eranditüübi valimist (oma omadeks), tõhusat try-catch-finally kasutamist erandite töötlemiseks ja edastamiseks ning vigade logimist veaotsinguks.