Kaip Java apdorojamos klaidos ir kaip su jomis dirbti?
sobes.tech AI
Atsakymas iš AI
Java klaidos tvarkomos naudojant išimčių mechanizmą. Išimtys yra įvykiai, kurie pažeidžia programos įprastą vykdymo eigą. Yra du išimčių tipai: Checked Exceptions ir Unchecked Exceptions.
Checked Exceptions:
- Paveldi iš
java.lang.Exception(išskyrusRuntimeException). - Privalo būti apdorotos (naudojant
try-catch) arba deklaruotos metodo paraše (naudojantthrows). - Atstovauja klaidas, kurios gali įvykti įprastomis sąlygomis (pvz.,
IOException,FileNotFoundException).
Unchecked Exceptions:
- Paveldi iš
java.lang.RuntimeExceptionarbajava.lang.Error. - Nereikalauja privalomo apdorojimo ar deklaravimo.
- Atstovauja klaidas, kurios dažnai rodo loginės klaidos kode arba nestandartines vykdymo aplinkos būsenas (pvz.,
NullPointerException,ArrayIndexOutOfBoundsException).
Išimčių apdorojimas:
Naudojami try-catch-finally blokai:
try: Kodo blokas, kuris gali sukelti išimtį.catch: Kodo blokas, kuris vykdomas, jeitrybloke įvyksta nurodyto tipo išimtis.finally: Kodo blokas, kuris vykdomas nepriklausomai nuo to, ar įvyko išimtis ar ne. Dažnai naudojamas išteklių atlaisvinimui.
try {
// Kodas, kuris gali sukelti išimtį
int result = 10 / 0; // Pavyzdys: ArithmeticException
} catch (ArithmeticException e) {
// ArithmeticException apdorojimas
System.err.println("Dalyba iš nulio klaida: " + e.getMessage());
} catch (Exception e) {
// Bet kokios kitos išimties apdorojimas
System.err.println("Bendra klaida: " + e.getMessage());
} finally {
// Kodo blokas, kuris visada vykdomas
System.out.println("Finally blokas įvykdytas.");
}
Išimčių perdavimas:
Metodas gali deklaruoti, kad jis gali sukelti tam tikrą išimtį, naudojant throws žodį:
public void readFile(String filePath) throws FileNotFoundException, IOException {
// Failo skaitymo kodas
FileReader fr = new FileReader(filePath);
// Jei failas nerandamas, gali būti išmesta `FileNotFoundException`
// Jei įvyksta įvesties/išvesties klaida, gali būti išmesta `IOException`
// ...
}
Kvietimo metodas turi arba apdoroti šią išimtį (try-catch), arba taip pat ją perduoti.
Sukurti savo išimtis:
Galite sukurti savo išimtis, paveldėdami iš Exception (Checked Exceptions) arba RuntimeException (Unchecked Exceptions).
public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
Naudojimas:
public void processData(int value) throws MyCustomException {
if (value < 0) {
throw new MyCustomException("Reikšmė negali būti neigiama");
}
// Duomenų apdorojimas
}
Pagrindinės išimčių klasės (hierarchija):
java.lang.Throwable(visų klaidų ir išimčių bazinis klasas)java.lang.Error(rimtų problemų, kurios dažniausiai nėra apdorojamos programos, pvz.,OutOfMemoryError)java.lang.Exception(klaidų, kurias programa gali apdoroti)java.lang.RuntimeException(Unchecked Exceptions)NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException- ir kt.
- Kiti
ExceptionpogrupiaiIOExceptionFileNotFoundExceptionSQLException- ir kt.
Darbas su klaidomis apima šios hierarchijos supratimą, tinkamo išimties tipo pasirinkimą (sukuriant savo), efektyvų try-catch-finally naudojimą išimčių apdorojimui ir perdavimui, taip pat klaidų logavimą klaidų šalinimui.