Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Constructeur | Classes
Java Avancé

bookConstructeur

Comment simplifier l'initialisation d'une classe

Initialiser chaque champ à chaque fois peut être fastidieux. Pour cela, les classes disposent de constructeurs. La syntaxe d’un constructeur est la suivante :

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Examinons chaque terme utilisé ici :

  • modifier : Désigne le modificateur d’accès, qui est souvent public pour les constructeurs. Les cas où un constructeur peut avoir un autre modificateur d’accès seront abordés dans un cours séparé ;
  • ClassName : Correspond simplement au nom de la classe dans laquelle ce constructeur est créé ;
  • ParameterType : Indique le type du paramètre utilisé dans le constructeur. Il est important de prêter attention à ce point, car ce paramètre doit être du même type que le champ dans la classe ; Par exemple : Si la classe possède deux paramètres, String name et int age, alors le constructeur doit avoir les mêmes paramètres (si l’on souhaite initialiser tous les champs via le constructeur). Si l’on souhaite initialiser uniquement un champ spécifique de la classe via le constructeur, par exemple name, il faut alors utiliser un seul paramètre du même type et du même nom que le champ dans la classe ;
  • Ensuite, à l’intérieur du corps du constructeur, les valeurs sont attribuées aux champs de la classe à l’aide des valeurs passées en paramètre.

Mot-clé "this"

À l'aide du mot-clé this, il est possible de faire référence à l'attribut de la classe dans laquelle la valeur de ce mot-clé est utilisée. Par exemple, lorsqu'une classe possède deux attributs : name et age, il est possible d'écrire this.name à l'intérieur du constructeur ou d'une méthode, ce qui fera spécifiquement référence à l'attribut de la classe, et non à la variable locale transmise en paramètre à ce constructeur ou à cette méthode. Ainsi, il est possible d'initialiser les attributs de la classe via le constructeur en utilisant la syntaxe : this.name = name;.

Exemple

Voici un exemple de constructeur dans une classe qui permet d'initialiser tous les attributs afin de clarifier ce concept :

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

On dispose d'une classe appelée Person avec trois attributs. Chacun de ces attributs a été ajouté au constructeur à l'aide du mot-clé this. Ainsi, le constructeur initialise les attributs avec les valeurs des paramètres. Utilisons ce constructeur dans la méthode main afin d'observer que les attributs sont initialisés avec les valeurs transmises en paramètres :

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Nous avons initialisé l'objet Person nommé bob en utilisant le constructeur, en passant le name, age et gender en tant que paramètres. Ensuite, nous avons affiché ses paramètres à l'écran et constaté que l'objet possède les valeurs de champs spécifiées dans les paramètres du constructeur.

Surcharge du constructeur

Le constructeur peut également être surchargé et ne pas couvrir l'initialisation de tous les champs de la classe. Par exemple, si nous ne voulons pas spécifier le genre d'Alice, nous pouvons surcharger le constructeur pour accepter seulement 2 paramètres et initialiser les champs avec ceux-ci :

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

On peut en conclure qu'un constructeur, comme une méthode, peut être surchargé et accepter différents nombres et types de paramètres.

Constructeur par défaut

Un constructeur par défaut est un constructeur qui ne prend aucun paramètre et n'initialise aucun champ. Il existe dans toutes les classes par défaut si elles ne possèdent pas d'autre type de constructeur, d'où son nom de constructeur par défaut. Chaque fois qu'un objet d'une classe est créé, un constructeur est utilisé. Pour utiliser le constructeur par défaut lorsqu'un constructeur avec paramètres existe déjà, il est également nécessaire d'écrire un constructeur vide :

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Trois constructeurs différents sont utilisés pour initialiser chacun des objets Person. Comme illustré dans le dernier exemple, John ne possède ni nom ni âge car ces champs ne sont pas initialisés pour cet objet. Ainsi, il est possible de surcharger le constructeur autant de fois que nécessaire et de créer des objets via celui-ci.

1. Laquelle des affirmations suivantes concernant les constructeurs est vraie ?

2. Quel est le but d'un constructeur en Java ?

3. Lequel des extraits de code suivants démontre la bonne façon de créer un constructeur paramétré ?

question mark

Laquelle des affirmations suivantes concernant les constructeurs est vraie ?

Select the correct answer

question mark

Quel est le but d'un constructeur en Java ?

Select the correct answer

question mark

Lequel des extraits de code suivants démontre la bonne façon de créer un constructeur paramétré ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 6

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain more about how constructor overloading works?

What happens if I don't define any constructor in my class?

Can you give more examples of using the "this" keyword in constructors?

Awesome!

Completion rate improved to 2.63

bookConstructeur

Glissez pour afficher le menu

Comment simplifier l'initialisation d'une classe

Initialiser chaque champ à chaque fois peut être fastidieux. Pour cela, les classes disposent de constructeurs. La syntaxe d’un constructeur est la suivante :

Main.java

Main.java

copy
1234
modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }

Examinons chaque terme utilisé ici :

  • modifier : Désigne le modificateur d’accès, qui est souvent public pour les constructeurs. Les cas où un constructeur peut avoir un autre modificateur d’accès seront abordés dans un cours séparé ;
  • ClassName : Correspond simplement au nom de la classe dans laquelle ce constructeur est créé ;
  • ParameterType : Indique le type du paramètre utilisé dans le constructeur. Il est important de prêter attention à ce point, car ce paramètre doit être du même type que le champ dans la classe ; Par exemple : Si la classe possède deux paramètres, String name et int age, alors le constructeur doit avoir les mêmes paramètres (si l’on souhaite initialiser tous les champs via le constructeur). Si l’on souhaite initialiser uniquement un champ spécifique de la classe via le constructeur, par exemple name, il faut alors utiliser un seul paramètre du même type et du même nom que le champ dans la classe ;
  • Ensuite, à l’intérieur du corps du constructeur, les valeurs sont attribuées aux champs de la classe à l’aide des valeurs passées en paramètre.

Mot-clé "this"

À l'aide du mot-clé this, il est possible de faire référence à l'attribut de la classe dans laquelle la valeur de ce mot-clé est utilisée. Par exemple, lorsqu'une classe possède deux attributs : name et age, il est possible d'écrire this.name à l'intérieur du constructeur ou d'une méthode, ce qui fera spécifiquement référence à l'attribut de la classe, et non à la variable locale transmise en paramètre à ce constructeur ou à cette méthode. Ainsi, il est possible d'initialiser les attributs de la classe via le constructeur en utilisant la syntaxe : this.name = name;.

Exemple

Voici un exemple de constructeur dans une classe qui permet d'initialiser tous les attributs afin de clarifier ce concept :

Person.java

Person.java

copy
1234567891011
class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }

On dispose d'une classe appelée Person avec trois attributs. Chacun de ces attributs a été ajouté au constructeur à l'aide du mot-clé this. Ainsi, le constructeur initialise les attributs avec les valeurs des paramètres. Utilisons ce constructeur dans la méthode main afin d'observer que les attributs sont initialisés avec les valeurs transmises en paramètres :

Main.java

Main.java

copy
123456789101112131415161718192021
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }

Nous avons initialisé l'objet Person nommé bob en utilisant le constructeur, en passant le name, age et gender en tant que paramètres. Ensuite, nous avons affiché ses paramètres à l'écran et constaté que l'objet possède les valeurs de champs spécifiées dans les paramètres du constructeur.

Surcharge du constructeur

Le constructeur peut également être surchargé et ne pas couvrir l'initialisation de tous les champs de la classe. Par exemple, si nous ne voulons pas spécifier le genre d'Alice, nous pouvons surcharger le constructeur pour accepter seulement 2 paramètres et initialiser les champs avec ceux-ci :

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }

On peut en conclure qu'un constructeur, comme une méthode, peut être surchargé et accepter différents nombres et types de paramètres.

Constructeur par défaut

Un constructeur par défaut est un constructeur qui ne prend aucun paramètre et n'initialise aucun champ. Il existe dans toutes les classes par défaut si elles ne possèdent pas d'autre type de constructeur, d'où son nom de constructeur par défaut. Chaque fois qu'un objet d'une classe est créé, un constructeur est utilisé. Pour utiliser le constructeur par défaut lorsqu'un constructeur avec paramètres existe déjà, il est également nécessaire d'écrire un constructeur vide :

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }

Trois constructeurs différents sont utilisés pour initialiser chacun des objets Person. Comme illustré dans le dernier exemple, John ne possède ni nom ni âge car ces champs ne sont pas initialisés pour cet objet. Ainsi, il est possible de surcharger le constructeur autant de fois que nécessaire et de créer des objets via celui-ci.

1. Laquelle des affirmations suivantes concernant les constructeurs est vraie ?

2. Quel est le but d'un constructeur en Java ?

3. Lequel des extraits de code suivants démontre la bonne façon de créer un constructeur paramétré ?

question mark

Laquelle des affirmations suivantes concernant les constructeurs est vraie ?

Select the correct answer

question mark

Quel est le but d'un constructeur en Java ?

Select the correct answer

question mark

Lequel des extraits de code suivants démontre la bonne façon de créer un constructeur paramétré ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 6
some-alt