web-dev-qa-db-fra.com

Bloc statique vs bloc initialiseur en Java?

Duplicate possible:
Blocs d'initialisation statiques

Considérez ce qui suit 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 exécuté, suivi du bloc vide. Mais le problème est que je n’ai jamais compris l’utilité réelle d’un bloc vide. Quelqu'un peut-il montrer un exemple réel dans lequel -

  • Les deux blocs static et vides sont utilisés
  • Les deux blocs static et vides ont des utilitaires différents
78
Anshu

Ils ont deux objectifs très différents:

  • Le bloc d'initialisation statique sera appelé lors du chargement de la classe et n'aura aucun 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, quant à lui, est créé sur la construction d’objet uniquement, aura accès aux variables d’instance et aux méthodes, et (conformément à la correction importante suggérée par @EJP) sera appelé au début du constructeur, après le le super constructeur a été appelé (explicitement ou implicitement) et avant tout autre code constructeur ultérieur est appelé. Je l'ai vu utilisé lorsqu'une classe a plusieurs constructeurs et nécessite le même code d'initialisation appelé pour tous les constructeurs. Comme pour les constructeurs, vous devez éviter d'appeler des méthodes non finales dans ce bloc.

Notez que vous avez répondu à cette question à plusieurs reprises dans stackoverflow et qu'il serait judicieux de rechercher et d'examiner les questions similaires et leurs réponses. Par exemple: static-initialization-blocks

107

Le bloc statique est exécuté à chaque chargement de votre classe. Le bloc vide est exécuté chaque fois que vous instanciez votre classe. Essayez de comparer ces:

1.

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

2.

public static void main(String[] args) {

}

Les sorties:

1.

Bloc statique
Bloc vide

2.

Bloc statique

En termes Layman, le bloc statique est uniquement appelé ne fois, quel que soit le nombre d'objets de ce type que vous créez.

24
arshajii