O que um arquivo .java precisa para compilar?

Durante os meus estudos para certificação da Oracle, surgiu uma questão bem interessante... O que um arquivo .java precisa para compilar? Vamos verificar com a classe Teste.
class Teste{
public static void main(String\[\] args){
} }
Se eu tirar o método main
:
class Teste{
}
E tentar compilar:
Ele compila conforme o esperado! Certo agora eu acho que não tem mais nada que possa retirar... Mas e se eu tirar a classe inteira? Ele compila? Sim? Não? O que você acha?
Vamos tentar compilar sem a classe, ou seja, um arquivo vazio:
Compilou??? O que!? Isso mesmo, compilou! Para compilarmos um arquivo .java não precisamos de nada em específico, ou seja, não precisamos de uma classe, método ou qualquer conteúdo. Simples assim!
Caiu na pegadinha e quer se preparar mais? Pensando nisso o instrutor Guilherme Silveira criou a Formação Java na Alura.