Sobes.tech
Junior

Ako správne hádzať výnimky v Jave?

sobes.tech AI

Odpoveď od AI

Výnimky by mali byť vyvolané, keď nastane nestandardná situácia, ktorá narušuje normálne vykonávanie programu a vyžaduje okamžitú spracovanie.

Základné princípy:

  • Používajte výnimky na hlásenie chýb, nie na riadenie toku programu.
  • Vyberte najvhodnejší typ výnimky zo štandardnej knižnice.
  • Vytvárajte vlastné triedy výnimiek, ak štandardné neposkytujú dostatok informácií.
  • Do správy výnimky zahrňte podrobné informácie o príčine chyby, vrátane kontextu.
  • Nezachytávajte výnimky, ktoré nemôžete správne spracovať. Je lepšie ich propagovať vyššie v zásobníku volaní.
  • Používajte bloky try-with-resources na automatické zatváranie zdrojov.
  • Zaznamenávajte výnimky, ktoré spracovávate alebo propagujete na vyššiu úroveň.

Správna syntax: throw new MyException("Chybová správa");

Príklad:

// Vytvorenie vlastnej výnimky
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// Metóda, ktorá vyvolá výnimku
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("Delenie nulou nie je povolené");
    }
    return a / b;
}

// Použitie metódy a spracovanie výnimky
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("Výsledok: " + result);
    } catch (InvalidParameterException e) {
        // Záznam chyby
        System.err.println("Chyba pri delení: " + e.getMessage());
        // Možná ďalšia spracovanie alebo propagácia
    }
}

Rozdiely medzi Checked a Unchecked výnimkami:

Typ výnimky Dedí od Vyžaduje spracovanie/dokumentáciu Príklad
Checked Exception (okrem RuntimeException) Áno (try-catch alebo throws) IOException, SQLException
Unchecked RuntimeException Nie (kompilátor to nevyžaduje) NullPointerException, ArrayIndexOutOfBoundsException