2010-04-24 5 views
2
  1. Où avez-vous principalement utilisé le bloc d'initialisation?
  2. Pouvez-vous utiliser pour attribuer des valeurs aux variables d'instance statiques?
  3. Comment est-ce différent de l'attribution à l'aide d'un constructeur?
  4. Mon livre dit que le bloc d'initialisation est exécutée lorsque la « classe est chargée ». Que signifie charger une classe?

Question additionnelle Quel est le meilleur?Quelques questions concernant le bloc d'initialisation dans Java

class {static final instance-variable = val} 

ou

class {static final instance-variable; static {instance-variable=val}} 
+0

Plusieurs questions par article est * trop large * un message. – Raedwald

Répondre

4

Un bloc d'initialisation est toujours appelée quelle que soit du constructeur que vous souhaitez utiliser. Donc, si la classe en question a plus d'un constructeur et que vous souhaitez exécuter du code indépendamment du constructeur utilisé, utilisez un bloc d'initialisation. Cependant, lorsque j'utilise des valeurs par défaut, je les attribue directement. Si elles sont constantes, puis ajouter final à la liste des modificateurs aussi bien.

private static final String VAL1 = "VALUE"; 

Mise à jour depuis que vous avez radicalement changé la question, voici une réponse renouvelée:

1) Où avez-vous utilisé la plupart du temps le bloc d'initialisation?

Pour exécuter du code quel que soit le constructeur utilisé.

2) Pouvez-vous utiliser pour attribuer des valeurs aux variables d'instance statiques?

Vous aurez besoin d'un bloc d'initialisation static.

private static final String FOO; 

static { 
    FOO = "bar"; 
} 

Cela présente l'avantage que vous pouvez faire plus que simplement attribuer une valeur. Par exemple. l'obtenir à partir d'une méthode et gérer l'exception:

static { 
    try { 
     FOO = getItSomehow(); 
    } catch (Exception e) { 
     throw new ExceptionInInitializerError(e); 
    } 
} 

3) Comment est-ce différent d'assigner en utilisant un constructeur?

Il est toujours affecté quel que soit le constructeur utilisé.

4) Mon livre indique que le bloc d'initialisation est exécuté lorsque la "classe est chargée". Que signifie charger une classe?

Le livre est en train de parler d'un bloc d'initialisation statique . Une classe est généralement chargée lorsque vous la référencez pour la première fois dans votre code. Vous pouvez également le charger de force par Class#forName() (comme avec les pilotes JDBC). J'ai posté une réponse avec plus d'exemples et d'explications avant here.

Espérons que cela aide.

+0

Wow c'est une réponse détaillée. Merci. Je ne peux pas l'accepter "dans 6 minutes" cependant:) – unj2

1

Question Additionnelle Quel est le meilleur?

class {static final instance-variable = val} 

ou

class {static final instance-variable; static {instance-variable=val}} 

Ils ont un comportement identique. Dans ce cas, la première forme est meilleure car elle est moins verbeuse et nettement plus facile à lire. N'utilisez un bloc d'initialisation statique que si l'initialisation est trop compliquée pour être exprimée clairement en utilisant une série de déclarations statiques avec des expressions d'initialisation.