2010-06-08 6 views
2

Je veux juste savoir la différence entre le chargement des données dans le constructeur et le chargement des données en dehors du constructeur, mais pas à l'intérieur des méthodesChargement des données dans les constructeurs et non dans les constructeurs

exemple: Chargement à l'intérieur constructeur

public class Model{ 
    Object testobject; 

    public Model(){ 
     testobject=new Object(); 
    } 

} 

VS

exemple: Chargement à l'extérieur constructeur

public class Model{ 
    Object testobject=new Object(); 

    public Model(){ 
    } 

} 
+0

Vous semblez parler d'initialisation de variables, pas de chargement de données. –

+0

le résultat est identique –

+0

uhm désolé pour les mots XD –

Répondre

4

La seule différence est quand vous avez plusieurs constructeurs, il peut être fastidieux d'écrire ...

testObject = new Object(); 

dans chacun unique. Cependant si vous avez décidé que vous voulez ...

public Model(Object otherObject) { 
    testObject = otherObject; 
} 

Vous feriez un peu plus de travail si vous l'avez déclaré deux fois.

1

Il n'y a pas de différence (réelle) au niveau du code octet. C'est plus une question de style de codage.

Bozho a donné une bonne réponse sur similar question here.

3

Il y a en fait une petite différence (mais probablement trop évidente pour le remarquer). L'initialisation automatique (constructeur externe comme vous l'appelez) est exécutée avant le constructeur. Juste une question d'ordre d'exécution ...

1

Ils sont fondamentalement identiques. Initialisation dans la déclaration: un léger avantage est que vous n'avez pas à vous soucier de plusieurs constructeurs. D'un autre côté, vous avez un peu moins de flexibilité, surtout si vous avez besoin d'une logique ou d'une gestion des exceptions.

http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html

1

initialisation du champ se produit avant que les lignes du constructeur sont exécutées. Vous pouvez le voir si vous exécutez votre programme dans un débogueur et entrez dans le constructeur pour Model.

est ici quelques liens discuter quand statics, des blocs statiques, les champs, les blocs d'initialisation des membres, et les constructeurs sont appelés:

3

Il affecte ordre d'initialisation. L'initialiseur est exécuté avant le corps du constructeur. Dans un cas simple comme votre exemple, ce n'est pas important, mais dans un code plus complexe, il pourrait l'être. Une autre différence est que vous pouvez gérer les exceptions à l'intérieur du constructeur si nécessaire.

+0

L'ordre d'exécution est une différence, mais je ne pense pas que cela puisse avoir de l'importance. Je pense, si vous obtenez des résultats différents en déplaçant cela, vous écrivez probablement un mauvais code. Avez-vous une expérience de la vie réelle avec le code où il importe réellement pour une bonne raison? – Koen

+0

@Koen - Non, et je n'essayais pas de le dire. Je voulais juste souligner qu'il est possible que l'ordre d'exécution soit significatif. Les gens écrivent un mauvais code. –

Questions connexes