Sobes.tech
Middle

Papaskokite apie išimčių mechanizmą Java kalboje.

sobes.tech AI

Atsakymas iš AI

Java mechanizmas išimtys naudojamas klaidų ir kitų išimtinių situacijų apdorojimui, kurios atsiranda vykdant programą.

Pagrindiniai išimčių mechanizmo elementai:

  • Išimtis (Exception): Objektas, kuris atstovauja įvykį, pažeidžiantį programos įprastą eigą.
  • try, catch, finally blokai: Naudojami išimčių apdorojimui.
    • try: Kodo blokas, kuriame gali įvykti išimtis.
    • catch: Kodo blokas, kuris vykdomas, jei try bloke įvyksta tam tikro tipo išimtis.
    • finally: Kodo blokas, kuris visada vykdomas, nepriklausomai nuo to, ar įvyko išimtis ar ne. Naudojamas išteklių išlaisvinimui.
  • throw raktažodis: Naudojamas aiškiam išimties sukūrimui ir metimui.
  • throws raktažodis: Naudojamas metodo paraše, norint nurodyti išimčių tipus, kurias metodas gali mesti.

Java išimčių hierarchija:

  • Throwable: Visų išimčių ir klaidų bazinė klasė.
    • Error: Reprezentuoja rimtas problemas, nuo kurių programa dažnai negali atsitiesti (pvz., OutOfMemoryError).
    • Exception: Reprezentuoja išimtis, kurias programa gali pagauti ir apdoroti.
      • RuntimeException (Unchecked Exceptions): Išimtys, kurioms nereikia aiškios apdorojimo ar deklaravimo metodo paraše (pvz., NullPointerException, ArrayIndexOutOfBoundsException).
      • Tikrintos išimtys (Checked Exceptions): Išimtys, kurias reikia arba apdoroti naudojant try-catch bloką, arba deklaruoti naudojant throws metodo paraše (pvz., IOException, FileNotFoundException).

Pavyzdys išimties apdorojimo:

public class ExceptionExample {

    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Rezultatas: " + result);
        } catch (ArithmeticException e) {
            // Apdorojimas ArithmeticException
            System.err.println("Klaida: dalyba iš nulio nėra leidžiama.");
            System.err.println("Išimties detalės: " + e.getMessage());
            e.printStackTrace(); // iškvietimo steko išvedimas
        } finally {
            // Šis blokas visada vykdomas
            System.out.println("Finally blokas įvykdytas.");
        }
    }

    public static int divide(int a, int b) {
        // Gali išmesti ArithmeticException, jei b = 0
        return a / b;
    }
}

throws naudojimo pavyzdys:

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

public class ThrowsExample {

    public static void readFile(String filename) throws IOException {
        // Gali išmesti IOException
        FileReader reader = new FileReader(filename);
        // Darbas su failu
    }

    public static void main(String[] args) {
        try {
            readFile("neegzistuojantis_failas.txt");
        } catch (IOException e) {
            System.err.println("Klaida skaitant failą: " + e.getMessage());
        }
    }
}