2010-10-22 4 views
-1

Comment interpréter les énoncés ci-dessous:Java: Object Initialisation

Notes bean = null; 
bean = new Notes(); 

Petite explication serait très utile.

+2

Il serait utile si vous donner le contexte, et expliquer aussi que vous les bits déjà compris et quels morceaux vous êtes confus par. –

+0

@Jon: J'essaie de comprendre les différentes façons de créer un objet, disons pour la deuxième déclaration si je ne l'initialise pas à Null que je peux rendre les deux instructions équivalentes, si oui alors comment? – Rachel

+0

Si vous venez de faire 'Notes bean;'. 'bean' sera automatiquement défini sur null. Je ne comprends pas comment ils peuvent être interprétés comme deux équivalents du tout. Peux-tu expliquer? – shoebox639

Répondre

4

Etes-vous sûr la séquence de l'instruction n'est pas le contraire?

Notes bean = null; 
bean = new Notes() 

Il semble une erreur :-)

Peut-être pourrait être:

Notes bean = new Notes(); 
bean = null; 

Dans ce cas, il peut être utilisé pour signaler au collecteur d'ordures qu'il a à la poubelle l'objet référencé par Bean.

Sinon, je suppose que c'est une erreur. Pourriez-vous poster plus de code?

+0

Je me demandais aussi si les lignes étaient mélangées. –

0

nouvelle crée une nouvelle instance de l'objet, ce qui vous permet de l'utiliser comme prévu (comme l'accès à ses méthodes)

null signifie essentiellement, il fait référence à rien (et donc vous ne pouvez pas utiliser l'une de ses méthodes)

+0

Alors, comment puis-je faire 2ème déclaration équivalente à la première déclaration? – Rachel

+0

Notes bean = new Notes(); Ou simplement changer l'ordre des déclarations. Je ne suis pas sûr de comprendre ce que vous voulez dire. new Notes() ne peut jamais être équivalent à null – AHungerArtist

+0

oui mais si je ne le pointe pas vers zéro alors puis-je faire les deux déclarations équivalentes, je suis en train de comprendre la création d'objet, peut-être un exemple donné ici n'est pas bon. – Rachel

0
bean = new Notes(); 

cette déclaration suppose que vous avez déjà delcared un haricot variable nommée de billets de type (ou l'une de ses classes parent. Si vous exécutez simplement cette ligne par lui-même, il va exploser parce qu'il ne peut pas trouver la variable 'haricot'

Notes bean = null; 

Ceci initialise une variable 'bean' et la fait pointer sur rien. Une variable est juste un pointeur vers un point de la mémoire où votre objet va résider.

Vous devez changer l'ordre de ces 2 déclarations, ou de combiner alors comme:

Notes bean = new Notes(); 
+2

"Cette déclaration suppose que vous avez déjà initialisé [...]" -> devrait être "déclaré" au lieu de "initialisé". – Bruno

+0

@Bruno: Pouvez-vous élaborer votre explication? – Rachel

+0

@ shoebox639: Je suis en train de créer un bean en tant que nouvelle instance de la classe Notes. Comment peut-il supposer que la variable bean nommée est déjà initialisée, pouvez-vous fournir d'autres explications? – Rachel

0

Première déclaration crée un champs INITIALISE l'objet de haricot (un objet Notes),

Notes bean = null, est la déclaration d'une référence de haricot qui ne fait pas référence à un objet réel (qui est le sens de nulle), référencer à null signifie que vous ne pouvez pas utiliser bean et ses méthodes.

Si les instructions se trouvent dans le même bloc de code (joint par la même paire de {}), le programme ne compilera pas, car vous déclarez deux fois la même référence.

0
bean = new Notes(); 

Ceci suppose que vous avez une variable nommée "bean" qui a déjà été déclarée. Le type de bean doit être Notes ou l'une de ses classes parentes ou une interface implémentée par Notes. Le mot clé "new" associé à l'appel du constructeur sans paramètre signifie la création d'un nouvel objet de type Notes et le bean variable référence cette nouvelle instance.

Notes bean = null; 

Ceci déclare une variable nommée "bean" de type Notes. Il initialise également la variable à null. Les variables qui sont des champs sont initialisées à null par défaut (à moins qu'elles ne soient des primitives), mais les variables locales ne sont initialisées à rien par défaut. Cette ligne initialise donc explicitement bean à null.

1

un pas en arrière:

Notes bean; 

c'est un champ ou une déclaration variable locale sans initialisation explicite.

Un champ est initialisé à une valeur initiale par défaut: null pour les objets, pour les nombres 0 primitifs et char, et false pour booléenne. Une variable locale restera non initialisée. C'est une erreur d'accéder à cette variable jusqu'à ce qu'une valeur lui soit affectée.


bean = new Notes(); 

est l'attribution d'une valeur au champ ou variable. Dans ce cas, une nouvelle instance de Notes est créée et affectée * à bean. Similaire à:

bean = null;   // kind of assigning 'nothing' or 'empty' 
    bean = someMethod(); // assigning the value returned by the method 

* en fait, il est la référence à l'instance qui est attribué à bean


Notes bean = null; 

est la combinaison des deux: déclarer un champ ou variable, et l'affectation une valeur à lui (l'initialiser). Dans ce cas, la valeur est null, ce qui signifie la même chose qu'aucune instance.
C'est presque équivalent à l'écriture

Notes bean; 
    bean = null; 

La variable pourrait également être initialisé avec une nouvelle instance de Notes:

Notes bean = new Notes();