CodeGym /Cours /JAVA 25 SELF /Création d’objets avec ne...

Création d’objets avec new

JAVA 25 SELF
Niveau 14 , Leçon 3
Disponible

1. Le mot‑clé new

En Java, pour créer un objet de n’importe quelle classe, on utilise le mot‑clé new. Ce « mot magique » demande à la JVM : alloue de la mémoire pour le nouvel objet et appelle son constructeur.

Analogie :
Si une classe — c’est le plan d’une voiture, alors new — c’est l’usine qui assemble une voiture réelle à partir de ce plan.

Exemple

Person vasya = new Person();

Ce qui se passe ici :

  1. new Person() — un nouvel objet de type Person est créé (le constructeur est appelé).
  2. vasya — la variable qui contient une référence vers l’objet créé.

À quoi cela ressemble en mémoire

Quand vous écrivez Person vasya = new Person();, une zone mémoire est allouée pour les champs de l’objet (par exemple, le nom et l’âge), et la variable vasya contient l’adresse de cette zone — une référence.

Attention :
Si vous oubliez d’écrire new, la variable ne sera qu’une référence qui ne pointe vers rien (null). Tenter d’accéder aux champs ou aux méthodes d’un tel « objet vide » entraînera une NullPointerException.

2. Appeler un constructeur : comment cela fonctionne‑t‑il ?

Un constructeur est une méthode spéciale appelée lors de la création de l’objet ; il initialise ses champs et prépare l’instance à fonctionner.

Syntaxe

NomDeClasse nomDeVariable = new NomDeClasse(arguments);
  • Si la classe possède un constructeur avec paramètres, vous devez obligatoirement les fournir.
  • Si le constructeur est sans paramètre (ou par défaut), les parenthèses restent vides.

Exemple : constructeur avec paramètres

public class Person {
    String name;
    int age;

    // Constructeur avec paramètres
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Créons un objet :

Person petya = new Person("Petya", 25);

Les valeurs "Petya" et 25 iront dans les champs name et age du nouvel objet.

Constructeur sans paramètres

public Person() {
    this.name = "Sans nom";
    this.age = 0;
}

Vous pouvez maintenant écrire :

Person mysteryMan = new Person(); // name="Sans nom", age=0

3. Manipuler un objet : champs et méthodes

Après avoir créé un objet, vous pouvez accéder à ses champs et méthodes via l’opérateur point (.) :

petya.name = "Pyotr";
System.out.println(petya.name); // Pyotr

petya.sayHello();

S’il y a une méthode dans la classe :

public void sayHello() {
    System.out.println("Bonjour, je m'appelle " + name + " !");
}

Alors l’appel petya.sayHello(); affichera : Bonjour, je m'appelle Pyotr !

Exemple : classe complète

public class Person {
    String name;
    int age;

    public Person(String name, int age) { // constructeur
        this.name = name;
        this.age = age;
    }

    public void sayHello() { // méthode
        System.out.println("Bonjour, je m'appelle " + name + " !");
    }
}

Utilisation :

Person vasya = new Person("Vasya", 30);
vasya.sayHello(); // Bonjour, je m'appelle Vasya !

4. Variables de référence : qu’est‑ce que c’est ?

En Java, une variable de type classe est une référence vers un objet en mémoire, et non l’objet lui‑même.

Démonstration

Person vasya = new Person("Vasya", 30);
Person anotherVasya = vasya;

À présent, vasya et anotherVasya pointent vers le même objet en mémoire. Si vous modifiez un champ via une variable — il sera modifié aussi pour l’autre :

anotherVasya.age = 31;
System.out.println(vasya.age); // 31

Point important :
Si vous créez deux objets différents, ils sont indépendants :

Person petya = new Person("Petya", 25);
Person masha = new Person("Masha", 22);

petya.age = 99;
System.out.println(masha.age); // 22 (inchangé !)

5. Exemple : création et utilisation de plusieurs objets

Ajoutons plusieurs objets à l’application. Supposons que nous ayons une classe Person, et dans main nous créons plusieurs personnes et affichons leurs salutations.

Classe Person

public class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void sayHello() {
        System.out.println("Bonjour, je m'appelle " + name + ", j'ai " + age + " ans !");
    }
}

Utilisation dans main

public class Main {
    public static void main(String[] args) {
        Person vasya = new Person("Vasya", 25);
        Person petya = new Person("Petya", 27);

        vasya.sayHello(); // Bonjour, je m'appelle Vasya, j'ai 25 ans !
        petya.sayHello(); // Bonjour, je m'appelle Petya, j'ai 27 ans !

        // Démonstration de l'indépendance des objets :
        vasya.age = 100;
        vasya.sayHello(); // Bonjour, je m'appelle Vasya, j'ai 100 ans !
        petya.sayHello(); // Bonjour, je m'appelle Petya, j'ai 27 ans !
    }
}

Sortie du programme :

Bonjour, je m'appelle Vasya, j'ai 25 ans !
Bonjour, je m'appelle Petya, j'ai 27 ans !
Bonjour, je m'appelle Vasya, j'ai 100 ans !
Bonjour, je m'appelle Petya, j'ai 27 ans !

6. Erreurs courantes lors de la création d’objets

Erreur n° 1 : vous avez oublié d’écrire new

Person vasya;
vasya.name = "Vasya"; // NullPointerException!

La variable vasya ne référence aucun objet (null). Il faut absolument créer un objet à l’aide de new.

Erreur n° 2 : paramètres non fournis au constructeur

Person petya = new Person(); // Erreur de compilation s'il n'y a pas de constructeur sans paramètre

Si la classe ne possède qu’un constructeur avec paramètres, vous devez obligatoirement fournir ces paramètres lors de la création de l’objet.

Erreur n° 3 : croire que la variable contient l’objet lui‑même

Person a = new Person("Anya", 20);
Person b = a;
b.age = 99;
System.out.println(a.age); // 99, car a et b sont des références vers le même objet !

En Java, une variable de type classe — est toujours une référence, jamais l’objet lui‑même.

Erreur n° 4 : modifier les champs d’un objet en s’attendant à ce qu’un autre ne change pas

Person x = new Person("X", 1);
Person y = x;
x.age = 42;
System.out.println(y.age); // 42

Si vous avez besoin de deux objets indépendants — créez‑les séparément !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION