2010-04-16 23 views

Antwort

17

Da statische Elemente einer Klasse sind (während das Laden von Klassen) erstellt und initialisiert, bevor eine Instanz der Klasse aller Zeiten ist - sie zugegriffen werden kann:
in diesem Beispiel b3 wird nach b4 und b5 initialisiert werden ohne auch eine Instanz der Klasse zu erstellen. Nicht statische Member werden pro Instanz erstellt und warten daher, bis eine Instanz für diese Instanz initialisiert wird.

+0

+1 War gerade dabei, das Gleiche zu posten. – mikej

+0

danke Dav aber wenn das "Klassenladen" passiert? nach dem Kompilieren oder wenn ich eine Instanz aus der Klasse machen möchte? –

+0

@ M.H: Ihre Klassen werden zur Laufzeit geladen, wenn Sie sie das erste Mal verwenden, oder wenn Sie der VM explizit mitteilen, sie zu laden. Zu dieser Zeit wird das statische Material initialisiert. Einige der Werte wurden möglicherweise vom Compiler eingegeben, wenn sie zum Zeitpunkt der Kompilierung ermittelt werden können. –

2
  • static Variablen werden zum Zeitpunkt des Ladens der Klasse initialisiert.

  • Instanzvariablen (nicht statisch) werden initialisiert, nachdem ein Objekt dieser Klasse erstellt wurde, dh nachdem die Klasse geladen wurde.

3

Da die Klasse vor der Instanz initialisiert wird. Wenn die Klasse geladen wird, führt Java statische Blöcke aus und initialisiert statische Variablen. Nicht statische Instanzen Variablen werden jedoch erst erstellt oder initialisiert, wenn eine Instanz erstellt wird.

1

Stellen Sie sich vor, statische Variablen sind Variablen der Klasse, nicht die Objekte dieser Klasse. Dies ist eine Ebene über den Instanzen. Wenn Java Metaklassen unterstützt, werden Klassen bei der Deklaration aus Metaklassen instanziiert, und auf ihre statischen Member kann auch dann zugegriffen werden, wenn keine Instanzen dieser Klassen vorhanden sind. Sie müssen statische Elemente also wirklich vor nicht statisch haben.

2

Statische Variablen werden initialisiert, wenn die Klasse geladen wird.

Instanzvariablen werden beim Erstellen der Instanz initialisiert. Die meiste Zeit ist dies der Fall, nachdem die Klasse vollständig initialisiert wurde, aber im Gegensatz zu dem, was die anderen geschrieben haben, kann dies auch beim Initialisieren statischer Variablen passieren. Zum Beispiel ist es durchaus üblich, für häufig verwendete Instanzen einer Klasse statische Konstanten zu haben, wie folgt aus:

class Foo 
{ 
    private static final Foo FOO_BAR = new Foo("bar"); 
    private static final Foo FOO_BAZ = new Foo("baz"); 

    private final String name; 

    public Foo(String n) 
    { 
     name = n; 
    } 

    [...] 
} 

Hier Name in der ersten Instanz wird initialisiert auf „bar“ vor FOO_BAZ initialisiert wird.

Verwandte Themen