Um HashMap do Java encontra chaves com hashCode e equals, então um contrato quebrado ou uma chave alterada depois do put faz entradas sumirem. Veja as regras, por que o TreeSet usa compareTo e qual coleção escolher.
O Java divide as exceções em checadas, que o compilador obriga você a tratar, e não checadas, que ele deixa passar. Aprenda try, catch e finally, como lançar e encapsular exceções direito e como o try-with-resources fecha tudo na ordem inversa.
Sealed types dão ao Java uma lista fechada de subtipos, e o pattern matching deixa um switch testar e desmontar cada um. Juntos, eles transformam um caso esquecido num erro de compilação em vez de um bug silencioso.
Interfaces dizem o que um tipo sabe fazer, a herança dá a uma classe tudo o que a classe pai faz, e a composição embrulha um objeto. Aprenda métodos default, super, classes abstratas e a armadilha da classe base frágil rodando programas pequenos.
Um record Java declara uma pequena classe de dados imutável numa linha, e o compilador escreve o construtor, os accessors, equals, hashCode e toString. Veja o que os records dão, o que recusam e onde ficam devendo.
Strings em Java nunca mudam, então toda edição cria uma nova. Aprenda os métodos de String e suas armadilhas, por que += num laço copia tudo, StringBuilder, text blocks, Unicode e arrays com os helpers de Arrays.
Uma classe Java descreve o que um objeto guarda e o que ele sabe fazer, e um construtor decide como cada objeto começa a vida. Aprenda campos, this, construtores, private, static e final rodando programas pequenos.
O if e os laços de Java parecem os de C, com algumas regras que pegam bugs reais. O switch antigo cai para o próximo case por padrão, e as switch expressions corrigem isso e fazem o compilador conferir cada valor do enum.
Toda variável em Java guarda um valor primitivo ou uma referência a um objeto. Saber qual dos dois explica o overflow silencioso, a passagem por valor, == versus equals e por que dois Integer com 128 não são iguais.
O Java 25 roda um único arquivo-fonte com um comando e um void main simples, sem nenhuma classe para escrever antes. Veja o que o JDK contém, por que o Java 25 é a versão para aprender e como ler erros de compilação e exceções.