Double Possible:
Initialisation Statique BlocsConsidérez les points suivants 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 premier de la statique bloc sera exécuté suivie par le vide du bloc. Mais le problème est que je n'ai jamais été en mesure de comprendre l'utilité réelle d'un vide bloc. Quelqu'un peut montrer un exemple réel, dans lequel:
- À la fois statique et vide blocs sont utilisés
- À la fois statique et vide blocs ont différentes utilités
- L’initialisation statique blocs (5 réponses )
Réponses
Trop de publicités?Ils sont deux des objectifs très différents:
- L'initialiseur statique bloc sera appelée lors du chargement de la classe, et n'auront pas accès aux variables d'instance ou de méthodes. Comme par @Prahalad Deshpande du commentaire, il est souvent utilisé pour créer des variables statiques.
- Le non-initialiseur statique bloc sur l'autre main est créé sur la construction de l'objet a accès aux variables d'instance et des méthodes, et (comme par l'importante correction proposée par @EJP) sera appelée au début du constructeur, après le super constructeur (explicitement ou implicitement) et avant toute autre code constructeur est appelé. Je l'ai vu utilisé si une classe possède plusieurs constructeurs et besoins le même code d'initialisation appelée pour tous les constructeurs. Tout comme avec les constructeurs, vous devriez éviter d'appeler un non définitif méthodes dans ce bloc.
Notez que cette question a été répondu à plusieurs reprises dans stackoverflow et vous feriez bien de recherche et d'examiner les mêmes questions et leurs réponses. Par exemple: statique-initialisation-blocs
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