2011-11-10 3 views

Répondre

5

C'est le bloc de code qui s'invoqué lorsque votre classe est chargée par classloader

+0

Merci Joshi. En fait, je veux traduire ce code en C++. Pourriez-vous expliquer comment puis-je faire cela? –

+1

@sufyansiddique: Vous devriez trouver une nouvelle question. –

+0

QU'y a-t-il en C++ qui est exécuté lorsque la classe est chargée, mettez simplement le bloc de code là simplement –

1

Ceci est appelé un bloc d'initialisation statique et sera exécutée une fois, lorsque cette classe se charge.

5

Il s'agit d'un bloc d'initialisation statique. Vous devez l'avoir trouvé dans le corps d'une classe en dehors de toute méthode. Le bloc d'initialisation statique s'exécute une seule fois pour chaque classe, au moment de la charge de la classe.

16

Il s'agit d'un bloc d'initialisation statique. Pensez-y comme une version statique du constructeur. Les constructeurs sont exécutés lorsque la classe est instanciée; les blocs d'initialisation statiques sont lancés lorsque la classe est chargée.

Vous pouvez les utiliser pour quelque chose comme ça (code évidemment fabriqué):

private static int myInt; 

static { 
    MyResource myResource = new MyResource(); 
    myInt = myResource.getIntegerValue(); 
    myResource.close(); 
} 

Voir la section "blocs Initialisation statique" de Oracle's tutorial on initializing fields.

+0

Merci Jonathan. –

1

Sufyan,

initialiseurs statiques ne sont pas héritées et ne sont exécutées une fois lorsque la classe est chargé et initialisé par le JRE. Cela signifie que ce bloc statique ne sera initialisé qu'une seule fois, quel que soit le nombre d'objets créés dans cette classe. Je ne suis pas un grand fan de cela et je suis sûr qu'il existe de meilleures alternatives en fonction de la situation.

Merci, Reds

1

Cette syntaxe a été démodés de Java 7. Maintenant, l'équivalent est:

public static void main(String[] args) { 
    /* 
     stuff 
    */ 
}