Maison > Java > javaDidacticiel > Quelques concepts de base entre objets et références

Quelques concepts de base entre objets et références

零下一度
Libérer: 2017-06-29 09:48:20
original
1092 Les gens l'ont consulté
Objets Java et leurs références

Quelques concepts de base entre objets et références.

Lorsque j'ai appris Java pour la première fois, pendant longtemps, j'ai toujours eu l'impression que les concepts de base étaient très vagues. Plus tard, j'ai appris que dans de nombreux livres Java, les objets et les références d'objets sont confondus. Cependant, si je n'arrive pas à faire la distinction entre les objets et les références d'objets,

alors je ne parviens vraiment pas à bien comprendre la technologie orientée objet suivante. Écrire certaines de vos propres connaissances peut aider vos amis qui découvrent Java à éviter de faire des détours.

Pour faciliter l'explication, nous définissons d'abord une classe simple :

classe Véhicule {

int passagers

int fuelcap;

int mpg;

}

Avec ce modèle, vous pouvez l'utiliser pour créer des objets :

Vehicle veh1 = new Vehicle();

Le L'action de cette instruction est généralement appelée création d'un objet. En fait, elle contient quatre actions.

1) Le "nouveau véhicule" à droite utilise la classe Vehicle comme modèle pour créer un objet de classe Vehicle (également appelé objet Vehicle) dans l'espace du tas.

2) Le () à la fin signifie qu'après la création de l'objet, le constructeur de la classe Vehicle est appelé immédiatement pour initialiser l'objet nouvellement généré. Il y a certainement un constructeur. Si vous ne l'écrivez pas, Java ajoutera un constructeur par défaut pour vous.

3) "Véhicule veh 1" à gauche crée une variable de référence de classe de véhicule. La référence de classe Vehicle est une référence d'objet qui peut être utilisée pour pointer vers l'objet Vehicle à l'avenir.

4) L'opérateur "=" fait pointer la référence de l'objet vers l'objet Véhicule qui vient d'être créé.

Nous pouvons diviser cette déclaration en deux parties :

Vehicle veh1;

veh1 = new Vehicle();

L'effet est le même. Écrit de cette façon, c'est plus clair. Il y a deux entités : l'une est la variable de référence de l'objet et l'autre est l'objet lui-même.

Les entités créées dans l'espace du tas sont différentes des entités créées dans le segment de données et l'espace de la pile. Bien qu’il s’agisse d’entités réelles, nous ne pouvons ni les voir ni les toucher. De plus,

Étudions attentivement la deuxième phrase et découvrons quel est le nom de l'objet que nous venons de créer ? Certaines personnes disent que cela s'appelle « Véhicule ». Non, "Véhicule" est le nom de la classe (le modèle de création de l'objet).

Une classe Véhicule peut créer d'innombrables objets, et ces objets ne peuvent pas tous être appelés "Véhicule".

L'objet n'a même pas de nom, il n'est donc pas accessible directement. Nous ne pouvons accéder aux objets qu'indirectement via des références d'objet.

Afin d'illustrer de manière vivante les objets, les références et la relation entre eux, vous pouvez créer une métaphore qui n'est peut-être pas très appropriée. L’objet est comme un très gros ballon, trop gros pour que nous puissions l’attraper. La variable de référence est une corde qui peut être utilisée pour attacher le ballon.

Si seule la première instruction est exécutée et que la deuxième instruction n'est pas exécutée, la variable de référence veh1 créée à ce moment ne pointe vers aucun objet et sa valeur est nulle. Une variable de référence peut pointer vers un objet ou être nulle.

C'est une corde, une corde qui n'a encore été attachée à aucun ballon. Après avoir exécuté la deuxième phrase, un nouveau ballon est fabriqué et attaché à la corde veh1. Quand on attrape la corde, on attrape le ballon.

Encore une phrase :

Véhicule veh2;

J'ai fabriqué une autre corde, mais je n'ai pas encore attaché le ballon. Si vous ajoutez une autre phrase :

veh2 = veh1;

est à égalité. Ici, un comportement de copie se produit. Cependant, il convient de noter que l'objet lui-même n'est pas copié, seule la référence de l'objet est copiée. En conséquence, veh2 pointe également vers l'objet pointé par veh1. Les deux cordes sont attachées au même ballon.

Si vous utilisez la phrase suivante pour créer un autre objet :

veh2 = new Vehicle();

, la variable de référence veh2 changera pour pointer vers le deuxième objet.

De la description ci-dessus, nous pouvons tirer les conclusions suivantes :

(1) Une référence d'objet peut pointer vers 0 ou 1 objet (une corde n'a pas besoin d'être attachée à un ballon, ou Peut attacher un ballon)

(2) Un objet peut avoir N références pointant vers lui (il peut y avoir N cordes pour attacher un ballon).

Si la déclaration suivante revient :

veh1 = veh2;

Selon l'inférence ci-dessus, veh1 pointe également vers le deuxième objet. Ce n'est pas un problème. La question est : où est le premier objet ? Il n’y avait pas de corde pour le retenir et il s’est envolé. La plupart des livres disent qu'il est recyclé par le mécanisme de récupération de place de Java.

Ce n’est pas exact. À vrai dire, il est devenu l’objet d’un ramassage des ordures. Quant à savoir quand ils seront effectivement recyclés, cela dépend de l’humeur du mécanisme de collecte des déchets.

De ce point de vue, la déclaration suivante devrait être illégale, non ? Au moins, ça ne sert à rien, non ?

nouveau véhicule();

Faux. C'est légal et disponible. Par exemple, si nous créons un objet uniquement pour l'impression, nous n'avons pas besoin de le lier à une variable de référence. La plus courante consiste à imprimer une chaîne :

System.out.println("Je suis Java!");

L'objet chaîne "Je suis Java!" est supprimé après l'impression. Certains appellent ce genre d’objet un objet temporaire.

La relation entre l'objet et la référence continuera jusqu'à ce que l'objet soit recyclé

Java ne gère que les références d'alias au moment de l'exécution

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal