Sempre pensei que o main
método deveria estar dentro de uma classe em Java, mas aqui está dentro de uma interface
public interface Main {
static void main(String[] args){
System.out.println("HelloWorld");
}
}
e compila e roda sem problemas
$ javac Main.java
$ java Main
HelloWorld
$ java -version
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (Alibaba Dragonwell Standard Edition)-17.0.7.0.7+7-GA (build 17.0.8+7)
OpenJDK 64-Bit Server VM (Alibaba Dragonwell Standard Edition)-17.0.7.0.7+7-GA (build 17.0.8+7, mixed mode, sharing)
Pode ser uma interface também?
Isso é absolutamente normal de acordo com o JLS v17. Da seção 12.1 - ênfase minha:
Parece que parte do outro texto não foi atualizado para incluir "ou interface" em todos os lugares, mas é definitivamente uma mudança deliberada.
A primeira versão incluindo "ou interface" foi a v9 - o texto da v8 ainda possui apenas "alguma classe especificada".