Sobes.tech
Middle

Povedzte o mechanizme výnimiek v Jave.

sobes.tech AI

Odpoveď od AI

V jazyku Java sa mechanizmom výnimiek sa používajú na spracovanie chýb a iných výnimočných situácií, ktoré vznikajú počas behu programu.

Hlavné prvky mechanizmu výnimiek:

  • Výnimka (Exception): Objekt predstavujúci udalosť, ktorá narušuje normálny priebeh vykonávania programu.
  • Bloky try, catch, finally: Používajú sa na spracovanie výnimiek.
    • try: Kódový blok, v ktorom môže dôjsť k výnimke.
    • catch: Kódový blok, ktorý sa vykoná, ak v bloku try vznikne výnimka určitého typu.
    • finally: Kódový blok, ktorý sa vždy vykoná, bez ohľadu na to, či došlo k výnimke alebo nie. Používa sa na uvoľnenie zdrojov.
  • Kľúčové slovo throw: Používa sa na jasné vytvorenie a vyhodenie výnimky.
  • Kľúčové slovo throws: Používa sa v podpisu metódy na oznámenie typov výnimiek, ktoré metóda môže vyhodiť.

Hierarchia výnimiek v jazyku Java:

  • Throwable: Základná trieda pre všetky výnimky a chyby.
    • Error: Predstavuje závažné problémy, z ktorých program obvykle nemôže opraviť (napríklad OutOfMemoryError).
    • Exception: Predstavuje výnimky, ktoré program môže zachytiť a spracovať.
      • RuntimeException (Unchecked Exceptions): Výnimky, ktoré nevyžadujú jasné spracovanie alebo oznámenie v podpise metódy (napríklad NullPointerException, ArrayIndexOutOfBoundsException).
      • Checked Exceptions: Výnimky, ktoré musia byť buď spracované pomocou bloku try-catch, alebo oznámené pomocou throws v podpise metódy (napríklad IOException, FileNotFoundException).

Príklad spracovania výnimky:

public class ExceptionExample {

    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Výsledok: " + result);
        } catch (ArithmeticException e) {
            // Spracovanie výnimky ArithmeticException
            System.err.println("Chyba: Delenie nulou nie je povolené.");
            System.err.println("Detaily výnimky: " + e.getMessage());
            e.printStackTrace(); // Výpis zásobníka volaní
        } finally {
            // Tento blok sa vždy vykoná
            System.out.println("Blok finally bol vykonaný.");
        }
    }

    public static int divide(int a, int b) {
        // Môže vyvolať ArithmeticException pri b = 0
        return a / b;
    }
}

Príklad použitia throws:

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

public class ThrowsExample {

    public static void readFile(String filename) throws IOException {
        // Môže vyvolať IOException
        FileReader reader = new FileReader(filename);
        // Ďalšia práca so súborom
    }

    public static void main(String[] args) {
        try {
            readFile("neexistujuci_subor.txt");
        } catch (IOException e) {
            System.err.println("Chyba pri čítaní súboru: " + e.getMessage());
        }
    }
}