2011-07-28 6 views
5

Qu'est-ce quesyntaxe Java question

static{ 
    //something 
} 

a déclaré dans un corps de définition de la classe moyenne?

public class A extends B{ 
    static { 
      C.register(new C(A.class, 
        (byte) D.x.getCode()) { 
         public DataSerializable newInstance() { 
           return new A(); 
         } 
        } 
       ); 
    } 
} 

Répondre

6

Le bloc static est appelé "bloc d'initialisation statique". Il est très similaire à un constructeur normal, sauf qu'il ne peut initialiser que des variables statiques.

Je l'ai trouvé utile lorsque l'initialisation d'une variable statique peut générer une exception que vous souhaitez gérer ou au moins enregistrer. Il est particulièrement utile dans l'initialisation des variables finales statiques.

Vous pouvez en savoir plus sur les blocs d'initialisation statiques ici: Initializing Fields

3

Il exécute un bloc de code sans nécessiter une instance de cette classe, à savoir que dès que le chargeur de classe charge la classe.

+0

@Jack ainsi que le vôtre ferait la meilleure réponse. – Marcelo

1

C'est un initialiseur statique. Il vous permet de spécifier les choses qui se produisent au moment où la classe est chargée, avant qu'une instance ne soit créée.

Si une exception est levée à partir d'un initialiseur statique, il est très déroutant, il est difficile de dire d'où il vient. Tout ce que vous faites dans un initialiseur statique devrait avoir un essai-attraper autour de lui et avoir l'exception être connecté. C'est un bon langage à éviter si vous le pouvez.

2

C'est un initialiseur statique. Il est exécuté une fois la classe chargée et ses résultats peuvent être stockés dans des membres statiques. Il est utilisé pour initialiser les membres statiques qui nécessitent plus que le nouveau Xyz() (comme les listes ou les cartes) ...

1

Cela signifie que vous aurez cette section qui se trouve dans le bloc statique exécuté en premier de la classe dans la JVM.

exécuter le programme simple suivant pourrait rendre les choses plus claires

public class Test123 { 
    static{ 
    System.out.println("Hello from static block"); 
    } 

    public static void main(String[] args) { 
    System.out.println("In main"); 
    } 
} 

La sortie de la réponse de ce qui précède sera

Hello from static block 
In main