2010-09-17 5 views
8

Je suis un peu honteux de demander cela, étant un programmeur Java depuis des années, mais voici:
Y a-t-il une différence entre allouer des objets pendant la construction, et ce directement lors de la déclaration du champ concerné? Ce qui est, est-il une différence entre les deux suivantes:java class member initialisation

public class MyClass{ 
    MyObj obj=new MyObj(); 
} 

ET

public class MyClass{ 
    MyObj obj; 
    public MyClass() { 
     obj=new MyObj(); 
    } 
} 

Bien sûr, je suppose que ce ne spécifiques de initialisation reposent pas sur des paramètres extérieurs.

+2

Il n'y a rien à avoir honte. Tout le monde apprend ici !! – bdhar

Répondre

3

exemple initialisation de variable fait avant constructeur d'appel

Son pas bon de le faire.
Vous pouvez restreindre l'appel de const. si vous voulez effectuer certaines opérations avant l'initialisation.

meilleures pratiques:

  1. Ne pas initialiser avec les valeurs par défaut dans la déclaration (null, false, 0, 0.0 ...).
  2. Préférez l'initialisation dans la déclaration si vous n'avez pas de paramètre constructeur qui modifie la valeur du champ.
  3. Si la valeur du champ change à cause d'un paramètre constructeur, placez l'initialisation dans les constructeurs.
  4. Soyez cohérent dans votre pratique. (La règle la plus importante)

de here

+0

Vous pouvez également générer une exception NullPointerException si la variable n'est pas initialisée avant le constructeur. – Sean

+1

Je contesterais que * toute * de ces règles est "meilleure pratique". Aucun d'entre eux n'influence de manière significative la lisibilité du code, et c'est la seule chose qui compte vraiment ici. –

+0

La lisibilité du code ne concerne pas seulement je pense, je pense que c'est mieux pour moi au moins. et bien sûr le programmeur Java ira pour const. d'abord lire le code. –

2

Non, il n'y a pas. Sauf que si vous ajoutez plusieurs constructeurs, vous aurez du code en double.

Une alternative est d'utiliser un bloc initialiseur

{ 
    var = 1; 
} 

Référence: Initializing Fields