🚀 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

  1. Escreva a estrutura básica de um bloco try-catch em Java que tente executar um código qualquer e capture uma exceção genérica do tipo Exception e, imprimindo a mensagem "Ocorreu um erro!".

6. 🛠️ Prática Obrigatória 2: A utilidade do Finally

  1. Para que serve o bloco finally em uma estrutura de tratamento de erros no Java? Quando ele é executado?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 07 Java_Brooklyn) e clique em Commit to main.
  2. 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:

  1. O bloco finally serve para executar códigos de limpeza ou finalização que precisam rodar obrigatoriamente, independentemente de ter acontecido um erro ou não no bloco try. Ele é muito usado para fechar conexões com bancos de dados ou arquivos abertos. Ele é executado sempre no final, após o try ou o catch.

Capitulo Anterior | Proximo Capitulo