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
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
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.