Objet
En Java, il existe deux types de types : les types primitifs et les types d'objets. Les primitifs, comme int
et boolean
, commencent par des minuscules ; les types d'objets commencent par des majuscules. Cette distinction est utile car elle nous rappelle certaines des différences entre eux :
Lorsque vous déclarez une variable primitive, vous obtenez une espace de stockage pour une valeur primitive. Lorsque vous déclarez une variable d'objet, vous obtenez un espace pour une référence à un objet. Pour obtenir de l'espace pour l'objet lui-même, vous devez utiliser l'opérateur new
.
Si vous n'initialisez pas une variable primitive, elle est donnée une valeur par défaut qui dépend de son type. Par exemple, 0
pour les int
et false
pour les boolean
. La valeur par défaut pour les types d'objets est null
, ce qui indique qu'aucun objet n'est référencé par les variables de référence.
Les variables primitives sont bien isolées dans le sens où il n'y a rien que vous pouvez faire dans une méthode qui affectera une variable dans une autre méthode. Les variables d'objets peuvent être difficiles à manipuler car elles ne sont pas aussi bien isolées. Si vous passez une référence à un objet en tant qu'argument, la méthode que vous appelez peut modifier l'objet, auquel cas vous verrez l'effet. Bien sûr, cela peut être une bonne chose, mais vous devez en être conscient.
Si nous passons des variables primitives à une méthode (passage de paramètre par valeur), nous copions en fait les valeurs des primitives et les utilisons à l'intérieur de la méthode. Toutes les opérations à l'intérieur de la méthode s'effectuent sur les copies ; et, en dehors de la méthode, les valeurs des variables primitives restent inchangées. Mais, si nous passons des objets non primitifs à une méthode (passage de paramètre par référence), nous passons les variables de référence à la méthode. Toutes les opérations utiliseront et/ou affecteront les objets originaux.
Exemple :
Écrivez le code suivant dans le fichier /home/labex/project/objectTest.java
:
public class objectTest {
public static void main(String[] args){
// utilisez new pour créer un objet Array avec deux éléments
int[] numbers = new int[2];
// affectez des valeurs à l'objet tableau
numbers[0] = 1;
numbers[1] = 2;
// créez des variables primitives de cette manière
int a = 1, b = 2;
// créez un objet de test
objectTest test = new objectTest();
test.changeInt(a, b);
System.out.println("Maintenant a est " + a + ", b est " + b);
test.changeArray(numbers);
System.out.println("Maintenant numbers contient :");
for(int i : numbers){
System.out.print(i + "\t");
}
}
// définissez une méthode d'objet, changez la valeur de int
public void changeInt(int a,int b){
a = 2;
b = 3;
System.out.println("Dans la méthode changeInt, a est " + a + ", b est " + b);
}
// définissez une méthode d'objet, changez la valeur du tableau
public void changeArray(int[] number){
for(int i = 0;i < number.length;i++){
number[i] = number[i]+1; // changez la valeur de l'élément du tableau en augmentant de 1
}
System.out.println("Dans la méthode changeArray, numbers contient :");
for(int i : number){
System.out.print(i + "\t");
}
System.out.println();
}
}
Sortie :
Exécutez le fichier objectTest.java
en utilisant la commande suivante dans le terminal :
javac /home/labex/project/objectTest.java
java objectTest
Voyez la sortie :
Dans la méthode changeInt, a est 2, b est 3
Maintenant a est 1, b est 2
Dans la méthode changeArray, numbers contient :
2 3
Maintenant numbers contient :
2 3
Il y a une autre différence entre les primitifs et les types d'objets. Vous ne pouvez pas ajouter de nouveaux primitifs à Java (sauf si vous vous inscrivez au comité de normalisation), mais vous pouvez créer de nouveaux types d'objets! Nous verrons comment dans le chapitre suivant.