Sobes.tech
Middle

Fale sobre o mecanismo de exceções em Java.

sobes.tech IA

Resposta da IA

No Java, o mecanismo de exceções é utilizado para tratar erros e outras situações excecionais que ocorrem durante a execução do programa.

Elementos principais do mecanismo de exceções:

  • Exceção (Exception): Objeto que representa um evento que interrompe o fluxo normal de execução do programa.
  • Blocos try, catch, finally: São usados para tratar exceções.
    • try: Bloco de código onde pode ocorrer uma exceção.
    • catch: Bloco de código que é executado se uma exceção de um tipo específico ocorrer no bloco try.
    • finally: Bloco de código que é sempre executado, independentemente de uma exceção ocorrer ou não. Usado para liberar recursos.
  • Palavra-chave throw: Usada para criar e lançar explicitamente uma exceção.
  • Palavra-chave throws: Usada na assinatura do método para declarar os tipos de exceções que o método pode lançar.

Hierarquia de exceções em Java:

  • Throwable: Classe base para todas as exceções e erros.
    • Error: Representa problemas graves dos quais o programa normalmente não consegue se recuperar (por exemplo, OutOfMemoryError).
    • Exception: Representa exceções que o programa pode capturar e tratar.
      • RuntimeException (Exceções não verificadas): Exceções que não requerem tratamento ou declaração explícita na assinatura do método (por exemplo, NullPointerException, ArrayIndexOutOfBoundsException).
      • Exceções verificadas (Checked Exceptions): Exceções que devem ser tratadas com um bloco try-catch ou declaradas com throws na assinatura do método (por exemplo, IOException, FileNotFoundException).

Exemplo de tratamento de exceção:

public class ExceptionExample {

    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Resultado: " + result);
        } catch (ArithmeticException e) {
            // Tratamento da exceção ArithmeticException
            System.err.println("Erro: Divisão por zero não permitida.");
            System.err.println("Detalhes da exceção: " + e.getMessage());
            e.printStackTrace(); // Exibe a pilha de chamadas
        } finally {
            // Este bloco sempre será executado
            System.out.println("Bloco finally executado.");
        }
    }

    public static int divide(int a, int b) {
        // Pode lançar ArithmeticException se b = 0
        return a / b;
    }
}

Exemplo de uso de throws:

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

public class ThrowsExample {

    public static void readFile(String filename) throws IOException {
        // Pode lançar IOException
        FileReader reader = new FileReader(filename);
        // Trabalho adicional com o arquivo
    }

    public static void main(String[] args) {
        try {
            readFile("ficheiro_inexistente.txt");
        } catch (IOException e) {
            System.err.println("Erro ao ler o ficheiro: " + e.getMessage());
        }
    }
}