Comme vous le savez, une classe fournit le plan des objets; vous créez un objet à partir d’une classe. Chacune des instructions suivantes tirées du programme CreateObjectDemo
crée un objet et l’assigne à une variable:
La première ligne crée un objet du Point
et les deuxième et troisième lignes créent chacune un objet de la classe Rectangle
.
Chacune de ces instructions comporte trois parties (discuté en détail ci-dessous):
- Déclaration: Les codes mis en gras sont toutes les déclarations de variables qui associent un nom de variable à un type d’objet.
- Instanciation: Le nouveau mot-clé est un opérateur Java qui crée l’objet.
- Initialisation: le nouvel opérateur est suivi d’un appel à un constructeur, qui initialise le nouvel objet.
Déclaration d’une variable faire référence à un objet
Auparavant, vous avez appris que pour déclarer une variable, vous écrivez:
type name;
Cela notifie au compilateur que vous utiliserez nom pour faire référence aux données dont le type est type. Avec une variable primitive, cette déclaration réserve également la bonne quantité de mémoire pour la variable.
Vous pouvez également déclarer une variable de référence sur sa propre ligne. Par exemple:
Point originOne;
Si vous déclarez originOne
comme ceci, sa valeur sera être indéterminé jusqu’à ce qu’un objet soit réellement créé et lui est attribué. La simple déclaration d’une variable de référence ne crée pas d’objet. Pour cela, vous devez utiliser l’opérateur new
, comme décrit dans la section suivante. Vous devez attribuer un objet à originOne
avant de l’utiliser dans votre code. Sinon, vous obtiendrez une erreur de compilation.
Une variable dans cet état, qui ne fait actuellement référence à aucun objet, peut être illustrée comme suit (le nom de la variable, originOne
, plus une référence ne pointant vers rien):
Instanciation d’une classe
L’opérateur new instancie une classe en allouant de la mémoire pour un nouvel objet et en renvoyant une référence à cette mémoire. L’opérateur new invoque également le constructeur d’objet.
Le nouvel opérateur nécessite un seul argument de suffixe: un appel à un constructeur. Le nom du constructeur fournit le nom de la classe à instancier.
L’opérateur new renvoie une référence à l’objet qu’il a créé. Cette référence est généralement attribuée à une variable du type approprié, comme:
La référence renvoyée par le nouvel opérateur ne doivent être affectés à une variable. Il peut également être utilisé directement dans une expression. Par exemple:
int height = new Rectangle().height;
Cette déclaration sera abordée dans la section suivante.
Initialisation d’un objet
Voici le code de la classe Point:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}
Cette classe contient un seul constructeur. Vous pouvez reconnaître un constructeur car sa déclaration utilise le même nom que la classe et elle n’a pas de type de retour. Le constructeur de la classe Point prend deux arguments entiers, comme déclaré par le code (int a, int b). L’instruction suivante fournit 23 et 94 comme valeurs pour ces arguments:
Point originOne = new Point(23, 94);
Le résultat de l’exécution de ce La déclaration peut être illustrée dans la figure suivante:
Voici le code de la classe Rectangle, qui contient quatre constructeurs:
Chaque constructeur vous permet de fournir des valeurs initiales pour l’origine, la largeur et la hauteur du rectangle, en utilisant à la fois des types primitifs et de référence. Si une classe a plusieurs constructeurs, ils doivent avoir des signatures différentes. Le compilateur Java différencie t les constructeurs basés sur le nombre et le type des arguments. Lorsque le compilateur Java rencontre le code suivant, il sait appeler le constructeur dans la classe Rectangle qui nécessite un argument Point suivi de deux arguments entiers:
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Ceci appelle l’un des constructeurs de Rectangle
« qui initialise origin
à originOne
. De plus, le constructeur définit width
sur 100 et height
sur 200.Il y a maintenant deux références au même objet Point – un objet peut avoir plusieurs références à celui-ci, comme le montre la figure suivante:
La ligne de code suivante appelle le constructeur Rectangle
qui nécessite deux arguments entiers, qui fournissent l’initiale valeurs de largeur et de hauteur. Si vous inspectez le code dans le constructeur, vous verrez qu’il crée un nouvel objet Point dont les valeurs x et y sont initialisées à 0:
Rectangle rectTwo = new Rectangle(50, 100);
Le constructeur Rectangle utilisé dans l’instruction suivante ne prend aucun argument, il est donc appelé un constructeur sans argument:
Rectangle rect = new Rectangle();
Toutes les classes ont au moins un constructeur. Si une classe n’en déclare aucun explicitement, le compilateur Java fournit automatiquement un constructeur sans argument, appelé constructeur par défaut. Ce constructeur par défaut appelle le constructeur sans argument du parent de classe, ou le constructeur Object
si la classe n’a pas d’autre parent. Si le parent n’a pas de constructeur (Object
en a un), le compilateur rejettera le programme.