2012-04-02 12 views
1

ich nicht den Unterschied zwischen A und B verstehenstatische Variable Initiator in Java

A

private static final CookieStore sCookieStore; 
static { 
    sCookieStore = new CookieStore(); 
} 

B

private static final CookieStore sCookieStore = new CookieStore(); 

Gibt es jemanden, der klären mein Verständnis?

+0

möglich Duplikat von [Java: Wann ist ein statischer Initialisierungsblock nützlich?] (Http://StackOverflow.com/questions/9379426/java-when-is-a-static-initialization-block-useful) –

Antwort

7

Sie sind in Ihrem Beispiel effektiv gleichwertig. B ist kürzer und für einfache Kreationen bevorzugt, aber A erlaubt eine kompliziertere Initialisierung.

z.

private static final CookieStore sCookieStore; 

static { 
    sCookieStore = new CookieStore(); 
    sCookieStore.setSize(1000); 
    sCookieStore.addToBlacklist("bing.com"); 
    sCookieStore.readCookiesFromFile("/tmp/cookies.txt"); 
} 
+0

Fantastisch! wusste das nicht. Gibt es sowas auch für nicht statische Objekte oder muss es im Konstruktor sein? – user978548

+2

@ user978548 - Es gibt Instanzinitialisierungsblöcke für genau das, woran Sie denken. Siehe diese Seite: http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html –

+0

@Paul Bellora - Danke! – user978548

1

In Ihrem Beispiel tun sie das gleiche. Ein separater Block static ist nützlich, wenn Sie mehr als eine einzelne Anweisung haben und wenn Sie Ausnahmen behandeln müssen, die von diesen Anweisungen ausgelöst werden.