Le mot-clé this désigne, dans une classe, l'instance courante de la classe elle-même. Il est utilisé à différentes fins décrites dans les sections suivantes.

Rendre univoque

modifier

Il peut être utilisé pour rendre le code explicite et non ambigu.

Par exemple, si dans une méthode, on a un paramètre ayant le même nom qu'un attribut de la classe dont la méthode fait partie, on peut désigner explicitement l'attribut grâce à this :

public class Calculateur
{
    protected int valeur;

    public void calcule(int valeur)
    {
        this.valeur = this.valeur + valeur;
    }
}

Dans cet exemple, la méthode calcule additionne le paramètre valeur à l'attribut valeur et stocke le résultat dans l'attribut valeur de l'objet. L'attribut a été désigné explicitement par le mot-clé this, désignant l'instance de la classe, préfixé au nom de l'attribut.

S'auto-désigner comme référence

modifier

Le mot-clé this peut être utilisé pour passer une référence à l'instance elle-même comme paramètre d'une méthode.

Par exemple : s'enregistrer comme écouteur d'évènement :

source.addListener(this);

Désigner l'instance de la classe qui encadre

modifier

Dans le cas de classes imbriquées, c'est-à-dire qu'une classe interne utilise l'instance de la classe externe, le mot-clé this préfixé du nom de la classe externe permet de désigner l'instance de la classe externe. S'il n'est pas préfixé, il désigne l'instance de la classe interne.

Exemple :

public class Livre
{
    String titre = "Le livre";

    class Chapitre
    {
        String titre = "Chapitre 1";

        public String toString()
        {
            return
                Livre.this.titre +    // "Le livre"
                "/" +
                this.titre ;          // "Chapitre 1"
        // ou   Chapitre.this.titre ; // "Chapitre 1"
        }
        // -> "Le livre/Chapitre 1"
    }
}

Appeler un autre constructeur de la classe

modifier

Un constructeur peut appeler un autre constructeur de la classe en utilisant le mot-clé this comme nom appelé. Il doit s'agir de la première instruction du constructeur. Ce genre d'appel est utile pour définir des constructeurs alternatifs avec moins de paramètres, pour utiliser des valeurs par défaut.

Exemple :

public class Livre
{
    String titre, auteur, editeur;
    int pages, annee;

    public Livre(String titre)
    {
        this(titre, "Moi", "fr.wikibooks.org");
    }

    public Livre(String titre, String auteur, String editeur)
    {
        this(titre, auteur, editeur, 800, 2021);
    }

    public Livre(String titre, String auteur, String editeur, int pages, int annee)
    {
        this.titre = titre;
        this.auteur = auteur;
        this.editeur = editeur;
        this.pages = pages;
        this.annee = annee;
    }
}