Dans Méthodes et membres de données, nous avons mentionné que les objets en Java sont initialisés lors de leur création. Lors de l'initialisation, les données membres de l'objet se voient attribuer des valeurs initiales. Nous pouvons l'initialiser explicitement. Si nous n'attribuons pas de valeur initiale au membre de données, le membre de données adoptera une valeur initiale par défaut en fonction de son type.
L'initialisation explicite nous oblige à déterminer la valeur initiale lors de l'écriture du programme, ce qui est parfois gênant. Nous pouvons utiliser un constructeur pour initialiser des objets. Les constructeurs peuvent initialiser les données membres et spécifier des opérations spécifiques. Ces opérations sont effectuées automatiquement lors de la création de l'objet.
définir le constructeur
Un constructeur est une méthode. Comme les méthodes normales, nous définissons des constructeurs dans la classe. Les constructeurs ont les caractéristiques de base suivantes :
1. Le nom du constructeur est le même que le nom de la classe
2. Le constructeur n'a pas de valeur de retour
Nous définissons le constructeur de la classe Human :
public class Test{ public static void main(String[] args) { Humain aPerson = new Human(160); (int h) { this.height = h; System.out.println("Je suis né"); } /** * accesseur */ int getHeight() { return this.height } hauteur int ;}
Le programme ci-dessus imprimera le code copié comme suit :
je suis né
160
Les constructeurs peuvent recevoir des listes de paramètres comme les méthodes ordinaires. Ici, le constructeur Human() reçoit un entier en paramètre. Dans le corps de la méthode, nous attribuons le paramètre entier à la hauteur du membre de données. Le constructeur fait deux choses lorsque l'objet est créé :
Les constructeurs peuvent recevoir des listes de paramètres comme les méthodes ordinaires. Ici, le constructeur Human() reçoit un entier en paramètre. Dans le corps de la méthode, nous attribuons le paramètre entier à la hauteur du membre de données. Le constructeur fait deux choses lorsque l'objet est créé :
1. Fournissez la valeur initiale du membre de données this.height = h ;
2. Effectuer des opérations initiales spécifiques System.out.println("I'm born");
De cette façon, nous pouvons définir de manière flexible la valeur initiale lors de l'appel du constructeur sans être aussi contraint qu'une initialisation explicite.
Comment s’appelle le constructeur ? Lorsque nous créons des classes, nous utilisons tous new Human(). En fait, nous appelons le constructeur de la classe Human. Lorsque nous ne définissons pas cette méthode, Java fournira un constructeur vide à appeler lors de l'utilisation de new. Mais lorsque nous définissons un constructeur, Java appellera le constructeur défini lors de la création d'un objet. Lors de l'appel, nous fournissons un paramètre de 160. Vous pouvez également voir dans les résultats finaux d'exécution que la hauteur de l'objet est bien initialisée à 160.
Priorité de la méthode d'initialisation
Dans les méthodes et les données membres, nous pouvons voir que si nous fournissons une valeur initiale explicite, alors le membre de données prendra la valeur initiale explicite au lieu de la valeur initiale par défaut. Mais si nous fournissons tous les deux une valeur initiale explicite et initialisons le même membre de données dans le constructeur, la valeur initiale finale sera déterminée par le constructeur. Par exemple, l'exemple suivant :
public class Test{ public static void main(String[] args) { Humain aPerson = new Human(160); (int h) { this.height = h; } /** * accesseur */ int getHeight() { return this.height } int height=170;
Le résultat courant est :
Copiez le code comme suit :
160
La valeur d'initialisation finale de l'objet est cohérente avec la valeur de la méthode de construction. donc:
Méthodes de construction > Initialiseurs explicites > Initialiseurs par défaut
(En fait, la soi-disant priorité est liée à l'ordre d'exécution lors de l'initialisation, j'aborderai ce point plus tard)
Surcharge de méthode
Une classe peut définir plusieurs constructeurs, par exemple :
public class Test{ public static void main(String[] args) { Humain neZha = new Human(150, "shit"); System.out.println(neZha.getHeight() }}class Human{ /** *); constructeur 1 */ Humain(int h) { this.height = h; System.out.println("Je suis né"); } /** * constructeur 2 */ Humain(int h, String s) { this.height = h; System.out.println("Ne Zha : Je suis né, " + s); } /** * accesseur */ int getHeight() { return this.height } int height; ;}
Résultats en cours d'exécution :
Copiez le code comme suit :
Ne Zha : Je suis né, merde
150
Deux constructeurs sont définis ci-dessus, tous deux nommés Human. Les deux constructeurs ont des listes de paramètres différentes.
Lors de l'utilisation de new pour créer un objet, Java décidera quel constructeur construire en fonction des paramètres fournis. Par exemple, lors de la construction de neZha, nous fournissons deux paramètres : l'entier 150 et la chaîne "shit", qui correspond à la liste des paramètres de la deuxième méthode de build, donc Java appellera la deuxième méthode de build.
En Java, Java détermine la méthode à appeler en fonction à la fois du nom de la méthode et de la liste des paramètres. C'est ce qu'on appelle la surcharge de méthode. Les méthodes Build peuvent être surchargées, et les méthodes ordinaires peuvent également être surchargées, comme la méthode Breath() ci-dessous :
public class Test{ public static void main(String[] args) { Humain aPerson = new Human(); aPerson.breath(10 }}class Humain{ /** * souffle() 1 */ void souffle() { System.out.println("hu...hu..."); } /** * souffle() 2 */ void souffle(int rep) { int i; ) { System.out.println("lu...lu..."); } } int hauteur;}
Résultats en cours d'exécution :
Copiez le code comme suit :
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
Comme vous pouvez le constater, puisqu'un paramètre est fourni lors de l'appel : l'entier 10, la deuxième méthode Breath() dont la liste de paramètres lui correspond est appelée.
Résumer
caractéristiques du constructeur : même nom que la classe, pas de valeur de retour
Objectif du constructeur : initialisation, surcharge de la méthode d'opération initiale : nom de la méthode + liste des paramètres -> quelle méthode est réellement appelée