AULA 14
MÓDULO 4
exceções java
⏱ 55 min
Exceções no Mundo Real
Hierarquia de exceções. Checked vs Unchecked. Exceções customizadas com campos de domínio. try-with-resources. Exceções de rede com HttpClient.
CheckedUncheckedRuntimeExceptiontry-with-resourcesfinallyIOException
Hierarquia de exceções em Java
Java tem uma hierarquia de exceções. Entender a hierarquia define o que capturar e o que criar.
Throwable
├── Error ← JVM crash, OutOfMemoryError. Não trate.
└── Exception
├── Checked ← IOException, SQLException. Compilador exige tratamento.
└── RuntimeException ← Unchecked. NullPointerException, ClassCastException, etc.
regra prática
Checked: situação recuperável externa (arquivo não encontrado, rede caída) — force o cliente a tratar. Unchecked: erro de programação (null, cast errado, índice inválido) — não force, corrija o código.Exceções customizadas
Crie suas próprias exceções para erros de domínio. Dê nomes descritivos — a exceção é documentação do que pode dar errado.
1
extends RuntimeException — Para erros de lógica de negócio — não força o cliente a declarar throws
2
Mensagem clara — new SaldoInsuficienteException('Saldo R$100, tentou sacar R$200')
3
Constructor chain — Sempre chame super(mensagem) para que printStackTrace mostre a mensagem
4
Código de erro opcional — Um campo código permite tratar programaticamente sem parsear String
try-with-resources + API HTTP
Java fecha recursos automaticamente com try-with-resources. Essencial para Scanner, arquivos e conexões HTTP.
exceções de rede
Você está estudando TCP/IP em Redes de Computadores 1. HttpClient lança IOException quando o servidor não responde — isso é a camada de transporte falhando. try-with-resources garante que a conexão é fechada mesmo com falha.
java
// Exceções customizadas para domínio bancário public class SaldoInsuficienteException extends RuntimeException { private final double saldoAtual, valorSolicitado; public SaldoInsuficienteException(double saldo, double valor) { super(String.format("Saldo R$%.2f insuficiente para saque de R$%.2f", saldo, valor)); this.saldoAtual = saldo; this.valorSolicitado = valor; } } // Uso em ContaBancaria.sacar() public void sacar(double valor) { if (valor <= 0) throw new IllegalArgumentException("Valor deve ser positivo"); if (valor > saldo) throw new SaldoInsuficienteException(saldo, valor); saldo -= valor; } // try/catch/finally try { conta.sacar(500.0); } catch (SaldoInsuficienteException e) { System.out.println("Saque negado: " + e.getMessage()); } finally { System.out.println("Operação encerrada"); // sempre executa } // try-with-resources — Scanner fecha automaticamente try (Scanner sc = new Scanner(new File("dados.txt"))) { while (sc.hasNextLine()) { System.out.println(sc.nextLine()); } } catch (FileNotFoundException e) { System.out.println("Arquivo não encontrado: " + e.getMessage()); } // Scanner.close() chamado automaticamente
quiz · aula 14
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Qual a diferença entre Checked e Unchecked exception?
QUESTÃO 02
Por que criar SaldoInsuficienteException em vez de usar Exception genérica?
QUESTÃO 03
Quando o bloco finally executa?
0/3