Constructeurs en Java
Écrivez une classe Box dans Box.java avec un champ int nommé size et un constructeur Box(int n) qui fait size = n;. Dans Hall.java, construisez un box avec Box b = new Box(4);, puis affichez b.size. Compilez les deux fichiers et lancez java Hall. L'écran doit montrer une ligne : 4. Le nombre que vous passez à new atteint le constructeur, et le constructeur le stocke sur l'objet avant que main continue. Fixer le champ au moment de la construction — dans le constructeur — est ce que cette page enseigne.
Une méthode qui s'exécute quand new construit
Un constructeur porte le même nom que la classe. Il n'a pas de type de retour void ni d'autre type de retour. Quand main écrit new Box(4), Java construit l'objet et exécute ce constructeur avec 4 comme n. Après la fin du constructeur, la variable tient l'objet prêt. C'est tout le travail de cette page : passer une valeur à new, laisser le constructeur la stocker sur le champ, puis afficher le champ pour voir que le stockage a fonctionné.
Créez d'abord Box.java. La ligne public class est public class Box. Ne laissez pas un ancien nom de classe Cup ou Chip ici. À l'intérieur des accolades déclarez int size;. Puis écrivez le constructeur : Box(int n) { size = n; }. Sur cette page utilisez un nom de paramètre différent de size pour que l'affectation soit claire sans le mot this. Il n'y a pas de main dans Box.java. Enregistrez avant de compiler.
La ligne de champ seule ne met pas 4 dans l'objet. Le corps du constructeur fait ce travail quand new l'appelle. Si vous sautez le constructeur et ne déclarez que le champ, un new Box(4) plus tard ne correspondra pas, et javac se plaindra de l'appel. Gardez les deux pièces dans Box.java : le champ et le constructeur qui y écrit.
public class Box {
int size;
Box(int n) {
size = n;
}
}
Hall passe 4 dans new Box
Créez Hall.java dans le même dossier. Sa ligne public class est public class Hall. Dans main, écrivez Box b = new Box(4); puis System.out.println(b.size);. L'argument 4 entre dans le paramètre de constructeur n. Vous n'avez pas besoin d'une ligne séparée b.size = 4; sur cette page — le constructeur a déjà stocké la valeur. La ligne d'affichage est là pour que vous puissiez faire confiance à ce que le constructeur a fait sans deviner.
Gardez Hall comme la classe qui contient main. Ne mettez pas main dans Box pour cette leçon. La forme à deux fichiers correspond aux pages objets et champs précédentes : un fichier définit le type, l'autre construit et l'utilise. Si vous renommez le fichier mais laissez une ancienne ligne public class Shelf, javac refusera jusqu'à ce que les noms correspondent à nouveau.
public class Hall {
public static void main(String[] args) {
Box b = new Box(4);
System.out.println(b.size);
}
}
Depuis le dossier qui contient les deux fichiers, lancez javac Box.java Hall.java. Vous pouvez compiler Box.java d'abord et Hall.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 Hall — pas java Hall.java, et pas java Box. 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 : 4. 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 Box(4) plus l'affichage dans Hall, avec le constructeur dans Box. Un curseur en attente n'est pas un problème de constructeur ; c'est du code d'entrée restant au mauvais endroit.
Parcourez l'exécution une fois. Java démarre à Hall.main. L'expression new Box(4) construit un Box et appelle Box(int n) avec n égal à 4. Le corps écrit size = n, donc le size de cet objet devient 4. Puis main affiche b.size et l'écran montre 4. Rien d'autre ne doit s'afficher. Si vous voyez ok ou 3 ou un reste de Cup, vous n'exécutez pas le programme Hall de cette page.
Si vous écrivez new Box() sans argument alors que le seul constructeur a besoin d'un int, javac refuse. Faites correspondre l'appel à la liste de paramètres du constructeur. Si vous ajoutez void avant le nom du constructeur, cela devient une méthode ordinaire, pas un constructeur, et new Box(4) n'exécutera pas ce corps comme cette page l'attend. L'en-tête doit ressembler à Box(int n), pas à void Box(int n), et pas à static int Box(int n).
Comparé à l'affectation après new
Sur la page des champs vous écriviez c.fill = 3; après new Cup(). Cela fonctionne encore. Cette page déplace le stockage dans le constructeur pour que la valeur soit fixée pendant la construction de l'objet. Une démo Cup restante avec c.fill = 3; est une autre leçon. Pour cette page gardez Box et Hall et new Box(4). Si Hall a encore c.fill = 3; et que ce dossier n'a pas de classe Cup, enlevez cette ligne. Le compilateur n'inventera pas de Cup pour vous.
Afficher b seul avec System.out.println(b); ne montre pas un 4 propre. Affichez b.size pour voir le nombre stocké. La référence d'objet seule n'est pas la valeur du champ. Vous avez déjà appris ce motif sur la page des champs ; gardez-le ici quand vous vérifiez le travail du constructeur.
Vous pouvez encore affecter un champ après new dans d'autres programmes. Cette leçon choisit simplement le chemin du constructeur pour que la première valeur utile arrive au moment de la construction. Ne mélangez pas les deux styles dans la même démo Hall sur cette page. Un chemin clair suffit : argument à new, stockage dans le constructeur, affichage du champ.
Deux boxes, deux sizes
Chaque new Box(...) exécute le constructeur à nouveau pour un objet séparé. Vous pouvez écrire Box a = new Box(2); et Box b = new Box(9);, puis afficher les deux champs size. Le premier appel stocke 2 sur un objet. Le second appel stocke 9 sur un autre objet. Les deux objets ne partagent pas un seul emplacement size.
public class Hall {
public static void main(String[] args) {
Box a = new Box(2);
Box b = new Box(9);
System.out.println(a.size);
System.out.println(b.size);
}
}
Compilez et lancez à nouveau : javac Box.java Hall.java, puis java Hall. L'écran doit montrer 2 sur une ligne et 9 sur la suivante. Chaque appel de constructeur a stocké son propre argument sur son propre objet. Écrire Box b = a; ne construit pas un second objet — utilisez deux appels new Box(...) quand vous voulez deux sizes. Copier une référence n'est pas la même chose qu'appeler le constructeur deux fois.
Si les deux lignes montrent le même nombre, vérifiez que chaque new passe un argument différent et que vous affichez a.size et b.size dans cet ordre. Si javac s'arrête sur le second new, cherchez une parenthèse manquante ou un mauvais nom de classe resté d'un ancien fichier. Les petites fautes dans le second appel sont courantes quand vous collez la première ligne et oubliez de changer l'argument.
Ce que cela laisse pour this
Cette page utilise size = n; avec des noms différents. Une page plus tard — this — montre comment parler du champ de l'objet lui-même quand les noms se heurtent. Restez ici avec le nom de paramètre clair n. N'inventez pas this.size sur cette page sauf si vous le connaissez déjà ; le but de la leçon est l'appel du constructeur depuis new. Le mot this est le sujet suivant, pas une exigence pour stocker n dans size aujourd'hui.
Si javac ne trouve pas Box en compilant Hall.java, vérifiez que Box.java est dans le même dossier et que la ligne de classe est public class Box. Si l'écran montre 0, le constructeur peut manquer l'affectation, ou main utilise encore une forme sans argument qui ne fixe jamais size — gardez Box(int n) { size = n; } et new Box(4). Un zéro à l'écran signifie en général que le champ est resté à sa valeur par défaut parce que le stockage n'a jamais tourné.
Quand le dossier tient encore Cup.java ou Shelf.java de la page des champs, laissez-les ou supprimez-les seulement s'ils embrouillent votre commande de compilation. Ne compilez pas un ancien Shelf qui assigne encore c.fill en espérant l'écran de cette page. Lancez java Hall après avoir compilé la paire Box et Hall de cette leçon.
Avant this
Vous pouvez déclarer int size;, écrire Box(int n) { size = n; }, et construire avec Box b = new Box(4); depuis Hall. Compilez les deux fichiers et lancez java Hall. L'écran montre 4. Le constructeur s'exécute quand new construit l'objet. Vous avez passé le nombre au moment de la construction, le constructeur l'a stocké sur le champ, et l'affichage a prouvé le stockage. La page suivante est this, où vous apprenez une autre façon de nommer les champs de l'objet à l'intérieur de ses méthodes et constructeurs.
Gardez l'en-tête du constructeur sans void. Gardez l'argument sur new. Gardez l'affichage sur b.size. Ces trois habitudes sont le point de contrôle de cette page avant d'avancer.
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 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