CodeGym /Cursos /JAVA 25 SELF /Introdução ao tratamento de exceções

Introdução ao tratamento de exceções

JAVA 25 SELF
Nível 11 , Lição 1
Disponível

1. Conhecendo as exceções

Vamos começar com uma analogia simples. Imagine que seu programa — é um carro que está seguindo pela estrada. Tudo vai bem até que algo inesperado acontece: o pneu murcha, o combustível acaba, o motor superaquece. Se você não “tratar” essa situação (por exemplo, colocar o estepe ou abastecer), o carro vai parar e não seguirá adiante. Da mesma forma no programa: se a exceção não for tratada, o programa encerrará abruptamente.

Exceção (exception) — objeto criado no momento em que ocorre algum problema durante a execução do programa. A exceção avisa: “Pare! Algo deu errado!”

Exemplos de situações em que ocorrem exceções:

  • Divisão por zero (10 / 0)
  • Tentativa de acessar um elemento inexistente do array (arr[999])
  • Abrir um arquivo que não existe no disco
  • Converter a string "abc" em número (Integer.parseInt("abc"))

Importante: Exceções não são erros de compilação (por exemplo, erros de digitação no código), mas problemas que surgem durante a execução do programa.

Por que exceções são boas?

  • Código limpo: A lógica principal do programa não fica poluída com verificações para cada detalhe.
  • Flexibilidade: É possível tratar erros de forma centralizada (por exemplo, todas as falhas de leitura de arquivos — em um único lugar).
  • Confiabilidade: O programa não “cai” com uma mensagem enigmática, mas informa exatamente o que aconteceu.

2. Exceções (Exceptions) vs Erros (Errors)

Em Java, há dois tipos principais de problemas que podem ocorrer durante a execução do programa:

Erros (Errors)

Erros são problemas fatais e irrecuperáveis, decorrentes de falhas na própria máquina virtual Java (JVM). Geralmente estão ligados a recursos do computador ou a falhas internas da JVM.

Exemplos de erros:

  • OutOfMemoryError — a memória acabou.
  • StackOverflowError — estouro de pilha (por exemplo, devido a recursão infinita).

Importante: Normalmente não faz sentido tentar tratar esse tipo de erro no programa.

Exceções (Exceptions)

Exceções são problemas com os quais o programa pode (e deve) lidar. Elas surgem por erros na lógica do programa ou por fatores externos (por exemplo, o usuário forneceu um valor diferente do esperado).

Exemplos de exceções:

  • NullPointerException — tentativa de usar null como um objeto.
  • ArrayIndexOutOfBoundsException — acesso fora dos limites do array.
  • IOException — erro ao trabalhar com arquivos.

Em Java, há dois tipos de exceção:

  • Checked exceptions (verificadas) — o compilador exige que sejam tratadas (por exemplo, IOException).
  • Unchecked exceptions (não verificadas) — o compilador não exige tratamento (por exemplo, NullPointerException).

Diagrama: onde cada coisa se encaixa

graph TD
    Throwable --> Error
    Throwable --> Exception
    Exception --> RuntimeException
    Exception --> Checked["(outras exceções)"]

    style Throwable fill:#ffa64d,color:#000
    style Exception fill:#ffa64d,color:#000
    style Checked fill:#ffa64d,color:#000
    style Error fill:#ff4d4d,color:#fff
    style RuntimeException fill:#4dff88,color:#000

Explicação:

  • Throwable — a raiz de toda a hierarquia de erros e exceções em Java.
  • Error — erros fatais da JVM, não são tratados.
  • Exception — exceções “normais”, que podem e devem ser tratadas.
  • RuntimeException — exceções não verificadas (erros do programador).

3. Como isso aparece no código?

Exemplo 1: divisão por zero

public class ExceptionDemo 
{
    public static void main(String[] args) 
    {
        int a = 10;
        int b = 0;
        int c = a / b; // ArithmeticException ocorrerá aqui!
        System.out.println("Resultado: " + c);
    }
}

O que vai acontecer?
O programa terminará com erro, e você verá a seguinte mensagem:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at ExceptionDemo.main(ExceptionDemo.java:5)

Exemplo 2: acesso a um elemento inexistente do array

int[] arr = {1, 2, 3};
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException

Exemplo 3: trabalho com arquivos

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

public class FileDemo 
{
    public static void main(String[] args) throws IOException 
    {
        FileReader reader = new FileReader("nofile.txt");     // FileNotFoundException (checked)
        int data = reader.read();
        System.out.println(data);
        reader.close();
    }
}

E agora vamos ver como tratar essas situações excepcionais de forma elegante.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION