Der Einstiegspunkt eines jeden Java-Programms ist in der Regel die statische Methode public static void main(). Auf die Frage, weshalb die Methode public sein muss, findet sich vielerorts die Antwort, dass die JVM die Methode "von außerhalb" sehen können muss, um sie aufzurufen. Nun kann eine main()-Methode aber beispielsweise auch in einer privaten inneren Klasse sein und wird dennoch von der JVM gefunden. Etwa so:
Dies wird in einem StackOverflow-Post damit erklärt, dass der JVM-Startup-Mechanismus die Access Modifier einfach ignoriert (https://stackoverflow.com/a/7634222/4391651). Ok, nur: Wenn der JVM-Startup den private-Access Modifier der inneren Klasse übergeht, dann könnte er das doch auch ebenso gut bei der main()-Methode machen. Hat da jemand eine Idee, warum sie dennoch public sein muss, außer dass es einfach im Standard so festgelegt wurde?
Java:
public class OuterClass {
private static class InnerClass {
public static void main(String args[]) {
System.out.println("Hello!");
}
}
}
// Kompilieren: javac.exe OuterClass.java
// Ausführen: java.exe OuterClass$InnerClass