Static Blocks - Wie genau?

ellion

Erfahrenes Mitglied
Hallo wiedermal :D

Ich hab gelesen, dass in Java sog. Static Blocks möglich sind. Leider bin ich mir nicht sicher, ob ich das richtig verstanden habe, daher bitte korrigieren :D

Static Blocks muss man nicht initalisieren?
Bei jedem Zugriff wird auf die gleiche Instanz zugegriffen?

Würde folgendes gehen?

PHP:
public class Base {
    public static Preferences preferences;
    public static Log log;
    
    static {
        log = new Log();
        preferences = new Preferences();
    }

}

Funktioniert es so, dass bei einem Zugriff auf preferences oder log erst 'static' ausgeführt wird, sofern vorher noch nicht auf Base zugegriffen wurde?


Ansonsten würde ich mich über jeglichen Artikel über Static Blocks freuen, denn es scheint genau das zu sein, was ich gerade brauche :)

Danke im Vorraus :D
 
So, mit ein wenig Ausprobieren hab' ich's nun hinbekommen.

Wen es interessiert:

Die Klasse Base.java sieht folgendermaßen aus:

PHP:
public class Base {
    public static final Preferences preferences;
    public static final Log log;
    /** Creates a new instance of base */
    static {
        log = new Log();
        preferences = new Preferences();
    }

}

Wie man sieht, gibt es keinen Konstruktor, sondern nur 'static'. Diese Methode wird aufgerufen sobald man auf die Klasse zugreift. Wobei man Base nicht instanzieren muss, man kann einfach per:

Base.preferences und Base.log auf die Eigenschaften zugreifen, kein new kein gar nichts. Sehr schöne Sache :D Lohnt sich sehr, wenn man quasi globale Variablen braucht, wie in meinem Falle hier :)
 
Hallo!

Static Blocks muss man nicht initalisieren?
hmm?

Bei jedem Zugriff wird auf die gleiche Instanz zugegriffen?
Such mal nach dem Singleton Pattern. Statische Resourcen einer Klasse (zusammen mit dem entsprechenden ClassLoader) sind fuer andere ueber die Klasse (auch ohne konkrete Instanz dieser) entsprechend ihren Access Modifiern fuer andere sichtbar...

static initialiser - Blocks:
Code:
 static{
 ...
 }
werden ausgefuehrt, wenn die Klasse (initialisiert), d.h. von einem ClassLoader das erste mal geladen wird.

http://www.google.de/search?hl=de&q=java+static+initialiser&btnG=Suche&meta=
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.7
-missing link- ich hatte dazu mal ein kleines tutorial geschrieben... dummerweise ist unser Suchindex nicht komplett und deshalb kann ich meinen Beitrag nicht mehr finden...

Gruss Tom
 
jo, hab gerade (denke ich ^^) den dreh raus, wie ich's einsetze. Will dir ja auch nicht deine Mittagspause rauben :D
 

Neue Beiträge

Zurück