Sobes.tech
Junior

Kā Java apstrādā kļūdas un kā ar tām strādāt?

sobes.tech AI

Atbilde no AI

Java kļūdas tiek apstrādātas, izmantojot izņēmumu mehānismu. Izņēmumi ir notikumi, kas pārtrauc programmas normālo izpildi. Pastāv divu veidu izņēmumi: Checked Exceptions un Unchecked Exceptions.

Checked Exceptions:

  • Manto no java.lang.Exception (izņemot RuntimeException).
  • Tie ir obligāti jāapstrādā (ar try-catch) vai jādeklarē metodes parakstā (ar throws).
  • Attiecas uz kļūdām, kas var rasties parastajos apstākļos (piemēram, IOException, FileNotFoundException).

Unchecked Exceptions:

  • Manto no java.lang.RuntimeException vai java.lang.Error.
  • Nav obligāti jāapstrādā vai jādeklarē.
  • Parāda kļūdas, kas bieži norāda uz loģiskām kļūdām kodā vai nestandarta izpildes vidi (piemēram, NullPointerException, ArrayIndexOutOfBoundsException).

Izņēmumu apstrāde:

Izmanto try-catch-finally blokus:

  • try: Koda bloks, kas var izraisīt izņēmumu.
  • catch: Koda bloks, kas tiek izpildīts, ja try blokā rodas norādītā veida izņēmums.
  • finally: Koda bloks, kas tiek izpildīts neatkarīgi no tā, vai notika izņēmums vai nē. Bieži tiek izmantots resursu atbrīvošanai.
try {
    // Kods, kas var izraisīt izņēmumu
    int result = 10 / 0; // Piemērs: ArithmeticException
} catch (ArithmeticException e) {
    // ArithmeticException apstrāde
    System.err.println("Dalīšana ar nulli kļūda: " + e.getMessage());
} catch (Exception e) {
    // Visu citu izņēmumu apstrāde
    System.err.println("Kopēja kļūda: " + e.getMessage());
} finally {
    // Kods, kas vienmēr tiks izpildīts
    System.out.println("Finally bloks izpildīts.");
}

Izņēmumu pārsūtīšana:

Metode var deklarēt, ka tā var radīt noteiktu izņēmumu, izmantojot throws vārdu:

public void readFile(String filePath) throws FileNotFoundException, IOException {
    // Faila lasīšanas kods
    FileReader fr = new FileReader(filePath);
    // Ja fails nav atrasts, var tikt izsviesta `FileNotFoundException`
    // Ja notiek ievades/izvades kļūda, var tikt izsviesta `IOException`
    // ...
}

Izsaucējam jāapstrādā šis izņēmums vai arī jādeklarē, ka tas tiek pārsūtīts.

Savas izņēmumu klases:

Var izveidot savas izņēmumu klases, mantojot no Exception (Checked Exceptions) vai RuntimeException (Unchecked Exceptions):

public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

Izmantošana:

public void processData(int value) throws MyCustomException {
    if (value < 0) {
        throw new MyCustomException("Vērtība nevar būt negatīva");
    }
    // Datu apstrāde
}

Galvenās izņēmumu klases (hierarhija):

  • java.lang.Throwable (visu kļūdu un izņēmumu pamatklase)
    • java.lang.Error (nopietnu problēmu gadījumā, kas parasti netiek apstrādātas programmā, piemēram, OutOfMemoryError)
    • java.lang.Exception (kļūdas, ko programma var apstrādāt)
      • java.lang.RuntimeException (Unchecked Exceptions)
        • NullPointerException
        • ArrayIndexOutOfBoundsException
        • ArithmeticException
        • un citi
      • Citi Exception apakšklases
        • IOException
        • FileNotFoundException
        • SQLException
        • un citi

Darbs ar kļūdām ietver šo hierarhiju izpratni, piemērota izņēmuma veida izvēli (savu izveidei), efektīvu try-catch-finally izmantošanu izņēmumu apstrādei un pārsūtīšanai, kā arī kļūdu reģistrēšanu kļūdu novēršanai.