Warum dürfen Kompilierzeitkonstanten in nicht statischen inneren Klassen statisch gemacht werden?

Angenommen, wir haben folgenden Code.

public class Outer{
    class Inner{
        public static final String s = "abc";
    }
    static class Nested{
        public static final SomeOtherClass instance = new SomeOtherClass();
    }
} 

Ich verstehe, Objekt von @ zu instanziiernicht statische innere Klassen einObjekt der äußeren Klasse wird benötigt. static bedeutet klassenbezogen und für den Zugriff muss kein Objekt instanziiert werden. Eine nicht statische innere Klasse kann nur verwendet werden, wenn ein Objekt der äußeren Klasse instanziiert ist. Es macht möglicherweise keinen Sinn, statische Referenzen darin zu haben.

Meine Fragen

Kann eine nicht statische innere Klasse ohne explizites Objekt der äußeren Klasse geladen werden?

WarumZeitkonstanten kompilieren (String-Literale, da sie in String-Pool- und primitiven Typen auf besondere Weise behandelt werden) dürfen gemacht werdenstatisc im keine statische innere Klasse ?

Edit: Warum können nicht kompilierte Zeitkonstanten nicht statisch gemacht werden? Ich weiß, dass es gemäß JLS ist, aber ich möchte nur wissen,was wäre schief gelaufen, was war die Absicht, diese Regel zu machen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage