Bloc statique vs. bloc initialiseur en Java? [dupliquer]

Possibilité De Dupliquer:

Blocs D'Initialisation Statique

considérer le suivant code :

public class Test {
    {
        System.out.println("Empty block");
    }
    static {
        System.out.println("Static block");
    }
    public static void main(String[] args) {
        Test t = new Test();
    }
}

nous comprenons que le bloc statique serait d'abord exécuté suivi du bloc vide . Mais le problème est que je n'ai jamais été capable de comprendre l'utilité réelle d'un vide bloquer. Quelqu'un peut-il montrer l'exemple réel dans lequel

  • à la fois statique et vide des blocs sont utilisés
  • à la fois statique et vide les blocs ont des utilités différentes
71
demandé sur Andrew Tobilko 2012-09-23 10:04:32

2 réponses

ils sont pour deux buts très différents:

  • le bloc d'initialisation statique sera appelé lors du chargement de la classe, et n'aura pas accès aux variables d'instance ou aux méthodes. Selon le commentaire de @Prahalad Deshpande, il est souvent utilisé pour créer des variables statiques.
  • le bloc d'initialisation non statique est créé sur la construction de l'objet seulement, aura accès aux variables d'instance et aux méthodes, et (selon les important correction proposée par @EJP) sera appelée au début du constructeur, après le super constructeur (explicitement ou implicitement) et avant tout autre code constructeur est appelé. Je l'ai vu utilisé quand une classe a plusieurs constructeurs et a besoin du même code d'initialisation appelé pour tous les constructeurs. Tout comme pour les constructeurs, vous devriez éviter d'appeler des méthodes non-finales dans ce bloc.

notez que cette question a été répondue à plusieurs reprises dans stackoverflow et vous feriez bien de rechercher et d'examiner les questions similaires et leurs réponses. Par exemple: statique-initialisation-blocs

102
répondu Hovercraft Full Of Eels 2017-05-23 12:17:47

le bloc statique est exécuté chaque fois que votre charge de classe. Le bloc vide est exécuté chaque fois que vous instanciez votre classe. Essayez de les comparer:

1.

public static void main(String[] args) {
    Test t = new Test();
}

2.

public static void main(String[] args) {

}

sorties:

1.

Statique bloc

Bloc vide

2.

Statique bloc

en termes simples, le bloc statique ne s'appelle qu'une fois , peu importe le nombre d'objets de ce type que vous créez.

23
répondu arshajii 2016-01-10 07:22:24