Chargement...

this en Java

Écrivez une classe Tin dans Tin.java avec un champ int nommé size et un constructeur Tin(int size) qui fait this.size = size;. Dans Lab.java, construisez un tin avec Tin t = new Tin(7);, puis affichez t.size. Compilez les deux fichiers et lancez java Lab. L'écran doit montrer une ligne : 7. Le paramètre et le champ partagent le nom size. Le mot this nomme le champ sur l'objet pour que le stockage atteigne le bon endroit. Utiliser this quand les noms se heurtent est ce que cette page enseigne.

Pourquoi le même nom a besoin de this

Sur la page des constructeurs le paramètre était n et le champ était size, donc size = n; était clair. Ici les deux noms sont size. À l'intérieur du constructeur, un size nu signifie le paramètre. Écrire size = size; copie le paramètre sur lui-même et laisse le champ à sa valeur par défaut. Le champ sur l'objet a encore besoin d'une écriture. Cette écriture utilise this.size à gauche.
Créez d'abord Tin.java. La ligne public class est public class Tin. Ne laissez pas un ancien nom de classe Box ou Cup ici. À l'intérieur des accolades déclarez int size;. Puis écrivez le constructeur : Tin(int size) { this.size = size; }. Il n'y a pas de main dans Tin.java. Enregistrez avant de compiler.
Relisez l'affectation une fois. Le côté droit size est la valeur arrivée dans le paramètre — ici 7. Le côté gauche this.size est le champ sur l'objet en cours de construction. Après l'exécution de la ligne, le size de cet objet contient 7. Si vous enlevez this. et gardez size = size;, l'écran montre plus tard 0 parce que le champ n'a jamais changé.

Tin with this in constructor

java
public class Tin {
    int size;

    Tin(int size) {
        this.size = size;
    }
}

Lab construit un tin

Créez Lab.java dans le même dossier. Sa ligne public class est public class Lab. Dans main, écrivez Tin t = new Tin(7); puis System.out.println(t.size);. L'argument 7 devient le paramètre de constructeur size. Le constructeur le stocke avec this.size = size;. Vous n'avez pas besoin d'une ligne séparée t.size = 7; sur cette page.
Gardez Lab comme la classe qui contient main. Ne mettez pas main dans Tin pour cette leçon. Si un fichier Hall restant de la page des constructeurs est encore dans le dossier, ne lancez pas java Hall pour cette leçon — lancez java Lab après avoir compilé Tin.java et Lab.java.

Lab builds one tin

java
public class Lab {
    public static void main(String[] args) {
        Tin t = new Tin(7);
        System.out.println(t.size);
    }
}

Depuis le dossier qui contient les deux fichiers, lancez javac Tin.java Lab.java. Vous pouvez compiler Tin.java d'abord et Lab.java ensuite quand les deux sont complets. Quand parenthèses, accolades et points-virgules correspondent, javac n'écrit aucune ligne de son côté. Puis lancez java Lab — pas java Lab.java, et pas java Tin. Enlevez la fin .java de la commande de lancement. Démarrez la classe qui contient main. Les mêmes commandes fonctionnent sous Windows et macOS.
Le programme doit afficher une ligne et s'arrêter : 7. Il ne doit pas attendre que vous tapiez. Si le terminal attend le clavier, un appel nextLine d'un ancien exercice est encore dans un fichier. Supprimez-le et gardez new Tin(7) plus l'affichage dans Lab, avec this.size = size; dans Tin.
Parcourez l'exécution une fois. Java démarre à Lab.main. L'expression new Tin(7) construit un Tin et appelle Tin(int size) avec le paramètre égal à 7. Le corps écrit this.size = size, donc le champ de l'objet devient 7. Puis main affiche t.size et l'écran montre 7.
Si vous écrivez size = size; au lieu de this.size = size;, le champ reste à 0 pour un int. L'écran montre alors 0, pas 7. C'est le signe habituel que this manque. Remettez this. à gauche de l'affectation.

this.size et size côte à côte

Un court tableau garde les deux noms clairs pendant que vous êtes dans le constructeur.

📊 this.size vs size

Nom Ce que cela signifie dans Tin(int size)
size seul le paramètre entré dans le constructeur
this.size le champ sur l'objet en cours de construction
this.size = size; stocker le paramètre dans le champ
size = size; ne met pas à jour le champ
Le tableau n'est qu'un rappel. La ligne tapée que vous gardez est this.size = size; dans le constructeur, puis Tin t = new Tin(7); et System.out.println(t.size); dans Lab.

Comparé à la page des constructeurs

Sur la page des constructeurs, Box(int n) { size = n; } fonctionnait parce que n et size étaient des mots différents. Cette forme fonctionne encore. Cette page utilise délibérément le même mot deux fois pour que vous ayez besoin de this. Une démo restante Box et Hall avec size = n; est une autre leçon. Pour cette page gardez Tin et Lab et this.size = size;.
Afficher t seul avec System.out.println(t); ne montre pas un 7 propre. Affichez t.size pour voir le nombre stocké. La référence d'objet seule n'est pas la valeur du champ.
Vous pouvez encore choisir un nom de paramètre différent d'autres jours. Cette leçon choisit des noms identiques exprès. Ne mélangez pas n et this dans la même démo Tin sur cette page. Un chemin clair suffit : noms qui correspondent, this sur le champ, affichage du champ.

Deux tins restent séparés

Chaque new Tin(...) exécute le constructeur à nouveau pour un objet séparé. Vous pouvez écrire Tin a = new Tin(2); et Tin b = new Tin(9);, puis afficher les deux champs size. Chaque appel utilise this.size = size; sur son propre objet. Les deux objets ne partagent pas un seul emplacement size. Vous n'avez pas besoin d'une seconde boîte de code pour ce contrôle — changez les nombres dans Lab une fois que vous avez vu 7, ou gardez la démo à un tin comme le fichier que vous enregistrez.
Si les deux lignes montrent 0, le constructeur manque encore this à gauche. Si javac ne trouve pas Tin en compilant Lab.java, vérifiez que Tin.java est dans le même dossier et que la ligne de classe est public class Tin.

Ce que cela laisse pour les méthodes d'instance

Cette page utilise this seulement dans le constructeur pour stocker un champ. Une page plus tard — méthodes d'instance — montre des méthodes qui s'exécutent sur un objet et peuvent lire ou changer des champs. Restez ici avec le stockage dans le constructeur. N'inventez pas de méthodes supplémentaires sur Tin pour cette leçon sauf si vous les connaissez déjà ; le but de la leçon est this.size = size quand les noms correspondent.
Si Lab a encore Box b = new Box(4); de la démo des constructeurs et que ce dossier n'a pas de classe Box que vous voulez garder, enlevez cette ligne. Gardez Tin t = new Tin(7); et System.out.println(t.size);. Le compilateur n'inventera pas de Box pour vous quand vous enseignez Tin.
Quand le dossier tient encore Box.java ou Hall.java, laissez-les ou supprimez-les seulement s'ils embrouillent votre commande de compilation. Lancez java Lab après avoir compilé la paire Tin et Lab de cette leçon.

Avant les méthodes d'instance

Vous pouvez déclarer int size;, écrire Tin(int size) { this.size = size; }, et construire avec Tin t = new Tin(7); depuis Lab. Compilez les deux fichiers et lancez java Lab. L'écran montre 7. Le mot this nomme le champ de l'objet quand le paramètre utilise le même nom. Vous avez passé le nombre au moment de la construction, le constructeur l'a stocké avec this, et l'affichage a prouvé le stockage. La page suivante est méthodes d'instance, où les méthodes sur l'objet utilisent les champs après que l'objet existe déjà.
Gardez l'en-tête du constructeur sans void. Gardez this. sur le champ. Gardez l'affichage sur t.size. Ces trois habitudes sont le point de contrôle de cette page avant d'avancer.

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

❓
6
Questions
🎯
70%
Pour Réussir
♾️
∞
Temps
🔄
∞
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut