Sobes.tech
Junior
184

Cum se aruncă corect excepțiile în Java?

Răspuns de la AI

sobes.tech AI

Excepțiile trebuie aruncate atunci când apare o situație neașteptată, care întrerupe execuția normală a programului și necesită o tratare imediată.

Principii de bază:

  • Folosiți excepțiile pentru a semnala erorile, nu pentru controlul fluxului de execuție.
  • Alegeți cel mai potrivit tip de excepție din biblioteca standard.
  • Creați propriile clase de excepții atunci când cele standard nu oferă suficiente informații.
  • Includeți în mesajul excepției detalii despre cauza erorii, inclusiv contextul.
  • Nu capturați excepțiile pe care nu le puteți trata corect. Este mai bine să le propagați mai sus în stiva de apeluri.
  • Utilizați blocuri try-with-resources pentru închiderea automată a resurselor.
  • Înregistrați excepțiile pe care le tratați sau le propagați la un nivel superior.

Sintaxa corectă: throw new MyException("Mesaj de eroare");

Exemplu:

// Crearea unei excepții personalizate
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// Metodă care aruncă excepție
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("Împărțirea la zero nu este permisă");
    }
    return a / b;
}

// Utilizarea metodei și tratarea excepției
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("Rezultat: " + result);
    } catch (InvalidParameterException e) {
        // Înregistrare eroare
        System.err.println("Eroare la împărțire: " + e.getMessage());
        // Posibilă prelucrare suplimentară sau propagare
    }
}

Diferențe între excepțiile Checked și Unchecked:

Tip de excepție Moștenește de la Necesită tratament/delcarare Exemplu
Checked Exception (cu excepția RuntimeException) Da (try-catch sau throws) IOException, SQLException
Unchecked RuntimeException Nu (compilatorul nu o cere) NullPointerException, ArrayIndexOutOfBoundsException