Java orientado a objetos

Valores e referências, contratos, composição, igualdade, coleções e genéricos.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Programa, tipos e referências

  • javac Main.java compila para bytecode; java Main executa na JVM com um JDK. Entrada: public static void main(String[] args).
  • Primitivos guardam valores; referências guardam referências ou null. Java passa argumentos por valor: reatribuir um parâmetro não muda a variável do chamador, mas mutar o objeto partilhado é visível.
  • 5 / 2 dá 2; 5 / 2.0 dá 2.5. byte vai de -128 a 127: b + 1 é int, b++ converte de volta com possível overflow. Converte para long antes de somar.
  • final fixa a variável, não o objeto. static pertence à classe, sem this.

O construtor fixa os invariantes; cada método conserva-os. Setters públicos que aceitam tudo não são encapsulamento.

Igualdade, hash e exposição

  • == em referências é identidade; equals é a igualdade do tipo. Redefine equals(Object), nunca só equals(Tipo): a sobrecarga falha via Object e coleções. Usa @Override.
  • Iguais têm o mesmo hashCode; hashes iguais não implicam igualdade. Não mudes campos de igualdade/hash dentro de um HashSet ou como chave de Map.
  • Vista não modificável bloqueia essa vista mas acompanha a origem; cópia defensiva separa a coleção, não os elementos mutáveis. Para um snapshot, copia no construtor e não devolvas a lista interna.

Herança, composição e despacho

  • Herança exige cumprir o contrato da base; composição delega a um colaborador e varia sem subclasses. Uma classe estende uma base e implementa várias interfaces.
  • Overloading resolve na compilação pelo tipo declarado; overriding resolve em execução pelo objeto. Com Animal a = new Gato(), visitar(a) escolhe visitar(Animal) e a.falar() usa Gato.
  • Interface funcional tem uma operação abstrata; uma lambda implementa-a.

Coleções e genéricos

Preciso deEscolhoCusto e condição
Sequência com duplicadosList, em geral ArrayListÍndice em tempo constante; meio linear.
Unicidade lógicaSet, em geral HashSetEsperado constante com bom hash; sem garantia de ordem de iteração.
Associação por chaveMapChave igual substitui o valor.
Ordem com unicidadeTreeSet + ComparatorO(log⁡n)O(\log n); comparação zero conta como duplicado.
  • TreeSet por x e depois y preserva (2,1) e (2,9); compara com Integer.compare, nunca por subtração. Campos de ordenação ficam estáveis no conjunto.
  • Genéricos são invariantes: List<Integer> não é List<Number>. Origem produz com ? extends T, destino recebe com ? super T; extends não é imutabilidade. Apagamento impede instanceof Caixa<Integer>.
static <T> void copiar(java.util.List<? extends T> origem,
                       java.util.List<? super T> destino) {
    for (T valor : origem) destino.add(valor);
}

Com origem List<Integer> com [2, 3] e destino List<Number> com [1.5], copiar dá [1.5, 2, 3]. A origem e o destino partilham T = Integer: o destino aceita inteiros por ser lista de números. Uma List<Double> não serviria de destino, porque não aceita Integer só por ambos serem números.

Exceções

throw lança, throws declara. IOException é verificada; RuntimeException não. Fecha recursos com try-with-resources; o garbage collector não fecha ficheiros.

Exemplos completos de Java.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.