Sobes.tech
Middle

Vorbește despre mecanismul de excepții în Java.

sobes.tech AI

Răspuns de la AI

În Java, mecanismul de excepții este utilizat pentru a trata erorile și alte situații excepționale care apar în timpul execuției programului.

Elementele principale ale mecanismului de excepții:

  • Excepție (Exception): Obiect care reprezintă un eveniment care întrerupe fluxul normal de execuție al programului.
  • Blocuri try, catch, finally: Sunt folosite pentru tratarea excepțiilor.
    • try: Bloc de cod în care poate apărea o excepție.
    • catch: Bloc de cod care se execută dacă în blocul try apare o excepție de un anumit tip.
    • finally: Bloc de cod care se execută întotdeauna, indiferent dacă a apărut sau nu o excepție. Este folosit pentru eliberarea resurselor.
  • Cuvântul cheie throw: Este folosit pentru a crea și arunca explicit o excepție.
  • Cuvântul cheie throws: Este folosit în semnătura metodei pentru a declara tipurile de excepții pe care metoda le poate arunca.

Ierarhia excepțiilor în Java:

  • Throwable: Clasa de bază pentru toate excepțiile și erorile.
    • Error: Reprezintă probleme grave din care programul de obicei nu se poate recupera (de exemplu, OutOfMemoryError).
    • Exception: Reprezintă excepții pe care programul le poate captura și trata.
      • RuntimeException (Excepții necontrolate): Excepții care nu necesită tratament explicit sau declarație în semnătura metodei (de exemplu, NullPointerException, ArrayIndexOutOfBoundsException).
      • Excepții verificate (Checked Exceptions): Excepții care trebuie fie tratate cu un bloc try-catch, fie declarate cu throws în semnătura metodei (de exemplu, IOException, FileNotFoundException).

Exemplu de tratare a excepției:

public class ExceptionExample {

    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Rezultat: " + result);
        } catch (ArithmeticException e) {
            // Tratarea excepției ArithmeticException
            System.err.println("Eroare: Împărțirea la zero nu este permisă.");
            System.err.println("Detalii despre excepție: " + e.getMessage());
            e.printStackTrace(); // Afișează stiva apelurilor
        } finally {
            // Acest bloc se va executa întotdeauna
            System.out.println("Bloc finally executat.");
        }
    }

    public static int divide(int a, int b) {
        // Poate arunca ArithmeticException dacă b = 0
        return a / b;
    }
}

Exemplu de utilizare a throws:

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

public class ThrowsExample {

    public static void readFile(String filename) throws IOException {
        // Poate arunca IOException
        FileReader reader = new FileReader(filename);
        // Lucru suplimentar cu fișierul
    }

    public static void main(String[] args) {
        try {
            readFile("fisier_inexistent.txt");
        } catch (IOException e) {
            System.err.println("Eroare la citirea fișierului: " + e.getMessage());
        }
    }
}