Warum ruft eine statische Variable, die von einer statischen Methode, die null zurückgibt, verkettet wird, eine NPE auf?

8

Ich habe den folgenden Code

%Vor%

Ich dachte, es würde ein NPE erhöhen, aber es gibt Mount Everest als Ausgabe kann jemand klären?

    
MaheshVarma 18.12.2013, 03:49
quelle

3 Antworten

4

Es passiert einfach, dass Sie auf statische Elemente für Objektreferenzen zugreifen können. In diesem Fall wird das Element nach dem Typ der Referenz aufgelöst, nicht nach seinem Wert.

Die Java-Sprachspezifikation sagt dazu Feldzugriff von static members

  

Wenn das Feld ein nicht leeres letztes Feld ist, , dann ist das Ergebnis der Wert   der angegebenen Klassenvariablen in der Klasse oder der Schnittstelle, die das ist   Typ des primären Ausdrucks.

     

Wenn das Feld nicht endgültig ist oder ein leeres Finale und der Feldzugriff ist   tritt in einem Konstruktor auf, dann ist das Ergebnis eine Variable , nämlich die   angegebene Klassenvariable in der Klasse, die den Typ von Primary darstellt   Ausdruck.

Also ist Primary , die Instanz, egal.

    
Sotirios Delimanolis 18.12.2013, 03:51
quelle
3

Wenn Sie auf ein Member static für eine Instanz einer Klasse zugreifen, ignoriert der Java-Compiler den Laufzeitwert (und sogar die Klasse) der Variablen vollständig und verwendet das Element, das zur deklarierten Klasse gehört. In diesem Fall entspricht Ihr Code:

%Vor%

Auch wenn Sie einen Code wie diesen hatten:

%Vor%

Sie erhalten immer noch den Wert für die Klasse Test .

    
chrylis 18.12.2013 03:51
quelle
0

favorite() ist eine statische Methode, die Test type zurückgibt. Dann verwenden Sie die statische Variable dieser Klasse ( mountain ). Dies alles funktioniert, da Sie niemals eine Instanz dieser Klasse verwenden (und nicht verwenden müssen), so dass es keine Nullzeigerausnahme geben kann.

    
Szymon 18.12.2013 03:52
quelle

Tags und Links