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.
+1 War gerade dabei, das Gleiche zu posten. – mikej
danke Dav aber wenn das "Klassenladen" passiert? nach dem Kompilieren oder wenn ich eine Instanz aus der Klasse machen möchte? –
@ 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. –