AULA 04
MÓDULO 1
construtores
⏱ 50 min
Construtores e Garbage Collector
Garanta que objetos nasçam em estado válido. Sobrecarga de construtores, this(), Garbage Collector e a conexão com o que você viu em ED2.
construtorsobrecargathis()Garbage Collectorautoboxingmark-and-sweep
Construtores — objeto nasce válido
O construtor é chamado uma única vez: quando o objeto é criado com new. É a oportunidade de garantir que o objeto nasce em estado sempre válido — nunca incompleto, nunca inconsistente.
sem construtor customizado
new Pedido() — pedido sem cliente, sem data, sem items. Como saber se está pronto para processar? O construtor elimina esse estado inválido: ou nasce completo ou lança exceção.1
Construtor padrão — Java cria automaticamente só se NENHUM construtor for definido. Sem parâmetros, inicializa atributos com defaults (0, null, false).
2
Construtor customizado — Define os parâmetros obrigatórios. Se definido, o padrão NÃO é mais gerado automaticamente.
3
Sobrecarga de construtores — Múltiplas assinaturas. new Pedido(cliente) e new Pedido(cliente, observacao).
4
this() — Chama outro construtor da mesma classe — evita duplicar lógica de inicialização.
Garbage Collector — Java libera memória
Em C você chama malloc e precisa chamar free manualmente. Esqueceu? Memory leak. Em Java, o Garbage Collector (GC) cuida disso automaticamente.
conexão com ED2
Você estudou em Estrutura de Dados 2 o 'método marca-varre' e 'contador de referências'. O GC do Java usa exatamente esses algoritmos — mais a coleta geracional (young/old generation). Não é mágica, é o que você já conhece.| Algoritmo | Como funciona | Onde visto |
|---|---|---|
| Mark-and-Sweep | Marca objetos alcançáveis, varre e coleta os não-marcados | ED2 — coletor de lixo |
| Reference Counting | Conta referências; quando chega a 0, coleta | ED2 — contador de referências |
| Generational GC | Objetos novos em Young Gen, sobreviventes vão para Old Gen | JVM — mais eficiente |
Wrappers e autoboxing — cuidado!
Autoboxing converte automaticamente entre primitivos e Wrappers. Conveniente, mas com armadilhas.
NullPointerException por autoboxing
Integer x = null; int y = x; // NullPointerException em runtime! Java tenta fazer unboxing de um null. Sempre verifique null antes de desempacotar.
java
// Construtores com sobrecarga e this() public class Pedido { private final String codigo; private final String cliente; private String observacao; private double total; // Construtor principal — toda validação aqui public Pedido(String codigo, String cliente, String observacao) { if (codigo == null || cliente == null) throw new IllegalArgumentException("Código e cliente obrigatórios"); this.codigo = codigo; this.cliente = cliente; this.observacao = observacao; } // Sobrecarga — delega para o principal com this() public Pedido(String codigo, String cliente) { this(codigo, cliente, ""); // this() chama outro construtor } public String toString() { return "Pedido[" + codigo + "] " + cliente + (observacao.isEmpty() ? "" : " - " + observacao); } } // Autoboxing — conveniência com armadilha List<Integer> notas = new ArrayList<>(); notas.add(8); // autoboxing: int 8 → Integer.valueOf(8) int n = notas.get(0); // unboxing: Integer → int Integer x = null; // int y = x; → NullPointerException! // if (x == null) tratar antes
quiz · aula 04
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Quando Java cria o construtor padrão automaticamente?
QUESTÃO 02
O que faz this() dentro de um construtor?
QUESTÃO 03
Qual perigo do autoboxing com Integer null?
0/3