Sobes.tech
Middle

Rääkige Java erandite mehhanismist.

sobes.tech AI

Vastus AI-lt

Java mehhanism väljendite kasutamiseks vigade ja teiste erandlike olukordade töötlemiseks, mis tekivad programmi täitmise ajal.

Väljendite mehhanismi põhielemendid:

  • Väljend (Exception): Objekt, mis esindab sündmust, mis rikub programmi normaalse käigu.
  • try, catch, finally plokid: Kasutatakse väljendite töötlemiseks.
    • try: Koodiplokk, kus võib tekkida väljend.
    • catch: Koodiplokk, mis täidetakse, kui try plokis tekib teatud tüüpi väljend.
    • finally: Koodiplokk, mis täidetakse alati, olenemata sellest, kas väljend tekkis või mitte. Kasutatakse ressursside vabastamiseks.
  • throw märksõna: Kasutatakse väljendite selgeks loomise ja viskamise jaoks.
  • throws märksõna: Kasutatakse meetodi signatuuris, et teavitada väljendite tüüpidest, mida meetod võib visata.

Java väljendite hierarhia:

  • Throwable: Kõigi väljendite ja vigade alusklass.
    • Error: Esindab tõsiseid probleeme, millest programm tavaliselt taastuda ei saa (nt OutOfMemoryError).
    • Exception: Esindab väljendeid, mida programm saab püüda ja töödelda.
      • RuntimeException (Unchecked Exceptions): Väljendid, mille jaoks ei ole vaja selget töötlemist või teavitust meetodi signatuuris (nt NullPointerException, ArrayIndexOutOfBoundsException).
      • Kontrollitud väljendid (Checked Exceptions): Väljendid, mida tuleb kas töödelda try-catch plokiga või teavitada throws-iga meetodi signatuuris (nt IOException, FileNotFoundException).

Näide väljendi töötlemisest:

public class ExceptionExample {

    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Tulemus: " + result);
        } catch (ArithmeticException e) {
            // ArithmeticException töötlemine
            System.err.println("Viga: nulliga jagamine ei ole lubatud.");
            System.err.println("Väljendi detailid: " + e.getMessage());
            e.printStackTrace(); // Kutse virna väljastamine
        } finally {
            // See plokk täidetakse alati
            System.out.println("Finally plokk täidetud.");
        }
    }

    public static int divide(int a, int b) {
        // Võib visata ArithmeticException, kui b = 0
        return a / b;
    }
}

Näide throws kasutamisest:

import java.io.FileReader;
import java.io.IOException;

public class ThrowsExample {

    public static void readFile(String filename) throws IOException {
        // Võib visata IOException
        FileReader reader = new FileReader(filename);
        // Edasine töö failiga
    }

    public static void main(String[] args) {
        try {
            readFile("mitteolemas_fail.txt");
        } catch (IOException e) {
            System.err.println("Viga faili lugemisel: " + e.getMessage());
        }
    }
}