2012-07-23 10 views
9

Eine statische Variable kann mit den privaten statischen Methoden oder mit einem statischen Block initialisiert werden. Gibt es einen feinen Unterschied zwischen den beiden? Gibt es eine Situation, in der ich die statische Methode zur Initialisierung statischer Member nicht verwenden kann? Ich fand das später lesbarer.Statischer Block und private statische Methode zur Initialisierung statischer Elemente

Static Block Initialisierung:

private static int NUM_ITER; 
static { 
    // Operations 
    NUM_ITER = //val from above operations. 
} 

Privat statische Methode Initialisierung:

private static int NUM_ITER = calculateNumIter(); 

// Some method comment on how we are calculating. 
private static int calculateNumIter() 
{ 
    // Operations. 
    return //value_from_operations. 
} 

Ich ziehe die zweite, da es mehr lesbar ist. Gibt es irgendeine Situation, die ich nur zuerst verwenden muss (statische Blöcke)?

Was ist die beste Kodierungskonvention/Design für die Initialisierung statischer Mitglieder (endgültig sowie variabel)? Sogar von diesem thread habe ich gelernt, dass private statische Methoden einen Vorteil gegenüber den statischen Blöcken haben.

Dank,

+0

Ich habe die statischen einige Male für den statischen Block vergessen, seitdem ich Version 2 verwenden;). – Stefan

Antwort

2

Der statische Block (oder zumindest sinnvoll), wenn zwei verschiedene Variablen unabhängig interdependant sind und nicht initialisiert notwendig wäre.

Angenommen, Sie müssen beispielsweise zwei Werte aus einer Datei lesen. Sie könnten beide Werte in einem zusätzlichen Objekt speichern. Aber wenn Sie wirklich zwei Konstanten wollen, ist ein statischer Block nützlich.

+0

So kann hier wiederum die statische Methode statischen Block ersetzen. – Mohan

+0

Das funktioniert, wenn die zweite von der ersten abgeleitet ist. Aber wenn beide von einem einzigen Wert abgeleitet werden, ist dies nicht der Fall. Angenommen, Sie müssen beispielsweise zwei Werte aus einer Datei lesen. –

+1

Ja, aber was ist, wenn Ihre erste statische Methode auch Ihr zweites statisches Mitglied als arg akzeptiert? – LastStar007

1
  1. static Initializer Block (Ihre 1-Option) werden ausgeführt, wenn die JVM die Klasse lädt, auch vor jeder static Variable initialisiert wird.

  2. Es ist ein guter Ort, um alle statischen Variablen auf einmal zu haben.

  3. Ihre zweite Option kann optional indem mehrere Argumente an die Parameter der Initialisierung Methode initialisieren mehrstatic Variablen verwendet werden.

+0

In meinem Beispiel wird die calculateNumIter() während der JVM-Initialisierung aufgerufen. Ist es nicht? – Mohan

+0

Ya wird es ...... –

2

Ich würde vorschlagen, zu verwenden, was Syntax Ihren Code sauber und gut lesbar hält:

  • , wenn die Initialisierung beträgt ein, max zwei, sehr einfache Code-Zeilen, dann gehen Sie mit dem statischen Block ;

  • Wenn die Initialisierung eine komplexe Operation ist, dann ist eine Methode mit einem guten Namen am besten;

  • im Zweifelsfall die Methode Syntax und verwenden die Methodennamen nicht nur die Variable zu deklarieren, sondern auch, wie Sie initialisiert (d.h. initializeValueWithRandomNumber());