Neste capítulo, você aprenderá como o Java trata situações inesperadas que ocorrem durante a execução de um programa, conhecidas como exceções. Isso permite que você escreva programas mais seguros, robustos e controlados.
Imagine que seu programa é uma receita de bolo. Tudo está indo bem até que, de repente, você tenta adicionar "leite" mas o pote está vazio. Isso é uma situação inesperada que impede você de continuar a receita. Em programação, uma exceção representa exatamente isso: um evento que ocorre durante a execução de um programa e que perturba o seu fluxo normal. Se não for tratada, uma exceção pode fazer seu programa parar abruptamente (cair).
Exemplos Comuns de Exceções:
ArithmeticException: Divisão por zero.ArrayIndexOutOfBoundsException: Tentativa de acessar um índice inválido em um array.FileNotFoundException: O programa tenta abrir um arquivo que não existe no caminho especificado.NullPointerException: Você tenta usar um objeto que não foi inicializado (está nulo).NumberFormatException: Tentativa de converter uma String para um número, mas a String não contém um formato numérico válido (ex: "abc" para int).Quando uma exceção não é tratada, o Java Runtime Environment (JRE) a "lança" (throws), o programa para e uma mensagem de erro (stack trace) é exibida no console.
public class ExemploErroSemTratamento {
public static void main(String[] args) {
System.out.println("Iniciando o programa...");
int[] numeros = {10, 20, 30};
// Tentamos acessar a posição 5 de um array de tamanho 3
System.out.println(numeros[5]); // Isso causará uma ArrayIndexOutOfBoundsException!
System.out.println("Esta linha nunca será executada."); // O programa já parou
}
}
Saída (Exemplo de Stack Trace):
Iniciando o programa...
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 3
at ExemploErroSemTratamento.main(ExemploErroSemTratamento.java:6)
Como você pode ver, o programa para na linha 6 e exibe uma longa mensagem de erro. Isso não é uma boa experiência para o usuário!
try e catchPara evitar que seu programa "quebre" ao encontrar uma exceção, você pode usar os blocos try e catch. Eles permitem que você tente executar um bloco de código que pode causar uma exceção e, se uma exceção ocorrer, capture-a e execute um "plano B" (o código de tratamento).
try: Contém o código que pode gerar uma exceção.catch: Contém o código que será executado se uma exceção do tipo especificado ocorrer dentro do bloco try.Exemplo:
public class TratamentoBasicoExcecao {
public static void main(String[] args) {
System.out.println("Iniciando tratamento de exceção...");
try {
// Código que pode gerar uma exceção
int[] numeros = {10, 20, 30};
System.out.println("Tentando acessar indice 5: " + numeros[5]); // Pode lançar ArrayIndexOutOfBoundsException
System.out.println("Esta linha não será executada se a exceção acima ocorrer.");
} catch (ArrayIndexOutOfBoundsException e) {
// Código que será executado se uma ArrayIndexOutOfBoundsException for capturada
System.out.println("ERRO: Você tentou acessar uma posição que não existe no array.");
System.out.println("Detalhes técnicos: " + e.getMessage()); // Exibe a mensagem da exceção
// e.printStackTrace(); // Útil para depuração, imprime o stack trace completo
}
System.out.println("Programa continuou após o tratamento da exceção.");
// O programa não parou!
}
}
Saída:
Iniciando tratamento de exceção...
ERRO: Você tentou acessar uma posição que não existe no array.
Detalhes técnicos: Index 5 out of bounds for length 3
Programa continuou após o tratamento da exceção.
Agora, o programa lida com o erro de forma elegante e continua sua execução, o que é crucial para aplicações robustas. Você pode ter múltiplos blocos catch para tratar diferentes tipos de exceção.