Sobes.tech
Junior

Kādas ir galvenās Java izņēmumu klases?

sobes.tech AI

Atbilde no AI

Java hierarhija ar izņēmumiem sākas ar klasi Throwable. Tam ir divas galvenās apakklases: Error un Exception.

Error:

  • Pārstāv nopietnas problēmas, kuras parasti nevajadzētu uztvert lietojumprogrammai.
  • Radās virtuālās mašinas (JVM) vai vides kļūdu dēļ.
  • Piemēri: OutOfMemoryError, StackOverflowError.

Exception:

  • Pārstāv apstākļus, kurus lietojumprogramma var un vajadzētu apstrādāt.
  • Dalās divās kategorijās:
    • Checked Exceptions (pārbaudāmas izņēmumi):
      • Jāuztver vai nu ar try-catch blokiem, vai arī jādeklarē metodes parakstā (throws).
      • Kompilators obligāti pārbauda to apstrādi.
      • Parasti attiecas uz prognozētiem, bet nevēlamiem apstākļiem, kas var rasties izpildes laikā.
      • Piemēri: IOException, FileNotFoundException, SQLException.
    • Unchecked Exceptions (nepārbaudāmas izņēmumi):
      • Manto no RuntimeException.
      • Nav nepieciešama obligāta apstrāde vai deklarācija metodes parakstā.
      • Bieži norāda uz programmas loģikas kļūdām vai API nepareizu lietošanu.
      • Piemēri: NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException.

Galvenās izņēmumu klases:

  • java.lang.Throwable (pamatklase)
    • java.lang.Error (neapstrādājamas kļūdas)
      • java.lang.OutOfMemoryError
      • java.lang.StackOverflowError
    • java.lang.Exception (apstrādājamas izņēmumi)
      • java.io.IOException (Checked)
        • java.io.FileNotFoundException (Checked)
      • java.sql.SQLException (Checked)
      • java.lang.RuntimeException (Unchecked)
        • java.lang.NullPointerException
        • java.lang.IllegalArgumentException
        • java.lang.IndexOutOfBoundsException

Salīdzināšanas tabula:

Īpašība Checked Exception Unchecked Exception (RuntimeException) Error
Mantošana Exception (izņemot RuntimeException un tā pēcnācējus) RuntimeException Error
Obligāta apstrāde / deklarācija
Rašanās iemesls Prognozējami kļūdas Programmēšanas kļūdas, API nepareiza lietošana Svarīgas JVM / vides problēmas
Atjaunošana Bieži iespējama Reti (norāda uz kļūdu) Gandrīz neiespējama

Izņēmumu apstrādes piemērs:

// Checked un unchecked izņēmumu apstrādes piemērs
public class ExceptionHandlingDemo {

    public void readFile(String fileName) {
        try {
            // Mēģinājums nolasīt failu - var izraisīt `FileNotFoundException` (checked)
            java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(fileName));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                line = reader.readLine();
            }
            reader.close(); // Arī var izraisīt `IOException` (checked)

            // unchecked izņēmuma piemērs (var rasties, ja fileName == null)
            int length = fileName.length(); // NullPointerException (unchecked)

        } catch (java.io.FileNotFoundException e) {
            // `FileNotFoundException` apstrāde
            System.err.println("Kļūda: fails nav atrasts - " + e.getMessage());
        } catch (java.io.IOException e) {
            // Vispārējas IO kļūdas apstrāde
            System.err.println("Kļūda, lasot failu: " + e.getMessage());
        } catch (java.lang.NullPointerException e) {
            // NullPointerException apstrāde - nav obligāta, bet laba prakse
            System.err.println("Kļūda: izmantots null saite - " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        ExceptionHandlingDemo demo = new ExceptionHandlingDemo();
        demo.readFile("non_existent_file.txt"); // izraisīs `FileNotFoundException`
        demo.readFile(null); // var izraisīt NullPointerException
    }
}