🚀 Capítulo 07: O Detetive de Erros (Tema: Brooklyn Nine-Nine)
NOTE
Este capítulo utiliza a temática de Brooklyn Nine-Nine para explicar o tratamento de exceções (erros) em Java. Aprenda a investigar e tratar os erros sem deixar o programa quebrar!
1. 🎯 Objetivo da Aula
Compreender como o Java lida com erros (Exceções), como usar os blocos try, catch e finally para capturar falhas e evitar que o programa pare de funcionar.
2. 🏢 O Cenário Prático (Seu Desafio)
No seriado de comédia policial Brooklyn Nine-Nine, os detetives estão sempre investigando pistas. Quando algo dá errado (uma testemunha mente, uma pista falsa aparece ou o suspeito foge), eles não fingem que nada aconteceu e deixam a delegacia explodir. Eles tratam a situação com os procedimentos padrões da polícia!
No Java, quando o seu código tenta fazer algo impossível (como dividir um número por zero, ou tentar ler um arquivo que não existe no computador), o sistema gera um alerta vermelho chamado Exceção (Exception).
- Se você não fizer nada, o programa “morre” (trava) na hora!
- Mas se você for um bom detetive, você vai cercar o código perigoso e dizer o que fazer caso o erro aconteça. Seu desafio é investigar e prender esses erros!
🧠 Fundamentos: A Teoria Traduzida
Para capturar e tratar erros em Java, nós usamos a estrutura try-catch (Tentar e Capturar).
🔍 1. O Bloco try (Tentar):
Você coloca aqui dentro o código perigoso que você acha que pode dar erro.
🕸️ 2. O Bloco catch (Capturar):
Se o erro acontecer dentro do try, o Java pula direto para cá! Aqui você diz o que fazer (ex: mostrar uma mensagem amigável para o usuário).
public class ExemploTryCatch {
public static void main(String[] args) {
try {
int resultado = 10 / 0; // Isso dá erro de divisão por zero!
} catch (ArithmeticException e) {
// Capturou o erro matemático!
System.out.println("Erro: Não é possível dividir por zero!");
}
}
}🧹 3. O Bloco finally (Finalmente):
É um bloco opcional que roda sempre, dando erro ou não! Serve para limpar a bagunça (ex: fechar a conexão com o banco de dados).
4. 📖 Exemplo Guiado: O Alerta do Arquivo
Vamos tentar ler uma posição de uma lista que não existe (um erro clássico de índice fora do limite):
import java.util.ArrayList;
import java.util.List;
public class DetetivePeralta {
public static void main(String[] args) {
List<String> pistas = new ArrayList<>();
pistas.add("Pegada na lama");
try {
// Tentando ler a pista número 5 (que não existe!)
System.out.println(pistas.get(5));
} catch (IndexOutOfBoundsException e) {
System.out.println("Detetive Peralta informa: Essa pista não existe no arquivo!");
} finally {
System.out.println("Investigação concluída.");
}
}
}5. 🛠️ Prática Obrigatória 1: Estrutura do Try-Catch
- Escreva a estrutura básica de um bloco
try-catchem Java que tente executar um código qualquer e capture uma exceção genérica do tipoException e, imprimindo a mensagem"Ocorreu um erro!".
6. 🛠️ Prática Obrigatória 2: A utilidade do Finally
- Para que serve o bloco
finallyem uma estrutura de tratamento de erros no Java? Quando ele é executado?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 07 Java_Brooklyn) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
spec_backend_com_java_e_springboot/
├── capitulos/
│ └── capitulo_07_brooklyn.md💡 Checkpoint de Lógica
Em Java, existem exceções que você é obrigado a tratar (Checked) e outras que você só trata se quiser (Unchecked). Tentar ler um arquivo que não existe é um exemplo de erro que o Java te obriga a tratar antes mesmo de rodar o programa!
10. 🔥 Desafio de Fixação
Pesquise o que significa a palavra-chave throw em Java e como ela serve para o programador criar e lançar os seus próprios erros personalizados.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
try {
// código aqui
} catch (Exception e) {
System.out.println("Ocorreu um erro!");
}Gabarito da Prática 2:
- O bloco
finallyserve para executar códigos de limpeza ou finalização que precisam rodar obrigatoriamente, independentemente de ter acontecido um erro ou não no blocotry. Ele é muito usado para fechar conexões com bancos de dados ou arquivos abertos. Ele é executado sempre no final, após otryou ocatch.