Sobes.tech
Junior

Hogyan dobunk helyesen kivételeket Java-ban?

sobes.tech MI

Válasz az MI-től

Kivételeket akkor kell dobni, amikor olyan rendellenes helyzet áll elő, amely megszakítja a program normál végrehajtását, és azonnali feldolgozást igényel.

Alapelvek:

  • Használja a kivételeket hibák jelzésére, ne a végrehajtási folyamat irányítására.
  • Válassza ki a legmegfelelőbb kivételtípust a szabványos könyvtárból.
  • Hozzon létre saját kivétel osztályokat, ha a szabványos nem nyújt elegendő információt.
  • Tartalmazzon részletes információkat a hiba okáról, beleértve a kontextust is, a kivétel üzenetében.
  • Ne fogjon el olyan kivételeket, amelyeket nem tud helyesen kezelni. Jobb őket feljebb dobni a hívási veremben.
  • Használjon try-with-resources blokkokat az erőforrások automatikus bezárásához.
  • Naplózza azokat a kivételeket, amelyeket kezel vagy feljebb továbbít.

Helyes szintaxis: throw new MyException("Hibaüzenet");

Példa:

// Saját kivétel létrehozása
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// Kivételt dobó metódus
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("Nullával való osztás nem megengedett");
    }
    return a / b;
}

// A metódus használata és kivétel kezelése
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("Eredmény: " + result);
    } catch (InvalidParameterException e) {
        // Hiba naplózása
        System.err.println("Hiba osztás közben: " + e.getMessage());
        // További feldolgozás vagy továbbítás
    }
}

A Checked és Unchecked kivételek közötti különbségek:

Típus Öröklődés Kezelés/dokumentálás szükséges Példa
Checked Exception (kivéve RuntimeException) Igen (try-catch vagy throws) IOException, SQLException
Unchecked RuntimeException Nem (a fordító nem kéri) NullPointerException, ArrayIndexOutOfBoundsException