it-swarm.com.de

Statischer Block in Java

Ich habe neulich einen Code durchgesehen und bin auf folgendes gestoßen:

static {
    ...
}

Aus C++ kommend hatte ich keine Ahnung, warum das da war. Es ist kein Fehler, da der Code gut kompiliert wurde. Was ist dieser "statische" Codeblock?

303
Mohit Deshpande

Es ist ein statischer Initialisierer . Es wird ausgeführt, wenn die Klasse geladen wird (oder initialisiert wird, um genau zu sein, aber normalerweise merkt man den Unterschied nicht).

Es kann als "Klassenkonstruktor" angesehen werden.

Beachten Sie, dass es auch Instanzinitialisierer gibt, die gleich aussehen, außer dass sie nicht das Schlüsselwort static haben. Diese führen zusätzlich zu den Code im Konstruktor aus, wenn eine neue Instanz des Objekts erstellt wird.

337
Joachim Sauer

Es ist ein statischer Initialisierer. Es wird ausgeführt, wenn die Klasse geladen ist und ist ein guter Ort, um die Initialisierung von statischen Variablen zu platzieren.

From http://Java.Sun.com/docs/books/tutorial/Java/javaOO/initial.html

Eine Klasse kann eine beliebige Anzahl von statischen Initialisierungsblöcken aufweisen und an einer beliebigen Stelle im Klassentext erscheinen. Das Laufzeitsystem garantiert, dass statische Initialisierungsblöcke in der Reihenfolge aufgerufen werden, in der sie im Quellcode erscheinen.

Wenn Sie eine Klasse mit einer statischen Nachschlagekarte haben, könnte diese so aussehen

class MyClass {
    static Map<Double, String> labels;
    static {
        labels = new HashMap<Double, String>();
        labels.put(5.5, "five and a half");
        labels.put(7.1, "seven point 1");
    }
    //...
}

Dies ist nützlich, da das obige statische Feld nicht mit labels = ... Initialisiert werden konnte. Es muss irgendwie die put-Methode aufrufen.

93
aioobe

Es ist ein Codeblock, der ausgeführt wird, wenn die Klasse von einem Klassenladeprogramm geladen wird. Es ist dazu gedacht, statische Member der Klasse zu initialisieren.

Es ist auch möglich, nicht statische Initialisierer zu schreiben, die noch seltsamer aussehen:

public class Foo {
    {
        // This code will be executed before every constructor
        // but after the call to super()
    }

    Foo() {

    }
}
70
Simon Lehmann

Mit einem statischen Block kann gezeigt werden, dass ein Programm auch ohne Hauptfunktion ausgeführt werden kann.

//static block
//static block is used to initlize static data member of the clas at the time of clas loading
//static block is exeuted before the main
class B
{
    static
    {
        System.out.println("Welcome to Java"); 
        System.exit(0); 
    }
}
16
user3777803

Ein statischer Block wird einmal im Lebenszyklus eines Programms ausgeführt. Eine weitere Eigenschaft des statischen Blocks besteht darin, dass er vor der Hauptmethode ausgeführt wird.

6
Zahid Hussain

Statische Blöcke werden zur Initialisierung des Codes verwendet und ausgeführt, wenn JVM die Klasse lädt. Weitere Informationen finden Sie unter dem folgenden Link. http://www.jusfortechies.com/Java/core-Java/static-blocks.php

3
sarath galimelu