IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Le mot clé "this"


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Par défaut Le mot clé "this"
    Bonjour les GARS,

    j'ai pas bien compris l'utilisation du mot clé this quelqu'un peut me l'expliquer avec un exemple concret et simple

    A+

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Par défaut
    LE mot clé this est une référence sur l'instance en cours d'utilisation.

    Il permet par exemple de différencier un attribut, d'une variable passé en paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Constructeur{
     
        protected String variable;
     
        public Constructeur (String variable){
            variable = variable; // On ne sait pas vraiment qui est assigné à qui.
            this.variable = variable; // l'attribut reçoit la valeur du paramètre
            variable = this.variable; // le paramètre reçoit la valeur de l'attribut
        }
    }
    Un attribut static ne peut pas être référencé par this.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le mot clé this représente soit, comme indiqué précédement, l'instance courante de la classe courante. Soit, dans une autre notation, un autre constructeur de la classe courante. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MaClass{
        String a;
        public MaClass(String a){
            this.a=a; // l'attribut a prend la valeur de la variable locale a
        }
        public MaClass(){
            this("Bonjour"); // appel du constructeur MaClass(String) avec comme paramètre "Bonjour"
        }
    }

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Par défaut
    Effectivement j'avais oublié cette notion

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    le mot clé this représente soit, comme indiqué précédement, l'instance courante de la classe courante. Soit, dans une autre notation, un autre constructeur de la classe courante. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MaClass{
        String a;
        public MaClass(String a){
            this.a=a; // l'attribut a prend la valeur de la variable locale a
        }
        public MaClass(){
            this("Bonjour"); // appel du constructeur MaClass(String) avec comme paramètre "Bonjour"
        }
    }

    Salut qu'est ce que veut dire "this represente l'instance courante de la classe courante "!

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Par défaut
    Je reprend l'exemple de Tchize,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaClass instance1 = new MaClass("1");
     
    MaClass instance2 = new MaClass("2");
    dans cet exemple, instance1 est différent de instance2. Ils sont de même type mais chacune des variable est une instance de la classe MaClasse.

    admettons que dans la classe MaClass, il y ait une méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public String getA(){
         return this.a;
    }
    Lorsque je fait :
    le mot clé this fera référence à l'objet créé lors de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass instance1 = new MaClass("1");


    Au contraire si je fait :
    Alors le mot clé this fera référence à l'objet créé lors de l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClass instance2 = new MaClass("2");
    Je sais pas si j'ai été très clair.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    instance courante = instance actuelle de la classe, celle pour laquelle le code de la méthode est occupé de travailler.

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    instance courante = instance actuelle de la classe, celle pour laquelle le code de la méthode est occupé de travailler.
    Salut,

    le Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
       public class Ville {
     
      private String nomVille;
      private String nomPays;
      private int nbreHabitant;
      private char categorie;
     
     
      public Ville()    // constructeur par défaut 
    {                     
              nomVille = "Inconnu";
              nomPays = "Inconnu";
              nbreHabitant = 0;
              this.setCategorie();  
      }
     
     
       // Constructeur d'initialisation
     
      public Ville(String pNom, int pNbre, String pPays) 
      {  
              nomVille = pNom;
              nomPays = pPays;
              nbreHabitant = pNbre;
              this.setCategorie();  
      }
     
     
     // ACCESSEURS  
     
     
    //Retourne le nom de la ville
     
      public String getNom()
      {
              return nomVille;
      }
     
     
    //Retourne le nom du pays
     
      public String getNomPays()
      {
              return nomPays;
      }
     
     
    //Retourne le nombre d'habitants
     
     public int getNombreHabitant()
     {
             return nbreHabitant;
     }
     
     
    //Retourne la catégorie de la ville
     
     public char getCategorie()
     {
             return categorie;
     }
     
    // MUTATEURS
     
     
    //nom de la ville
     
     public void setNom(String pNom)
     {
              nomVille = pNom;
     }
     
     
    //Définit le nom du pays
     
     public void setNomPays(String pPays)
     {
              nomPays = pPays;
     }
     
     
    //Définit le nombre d'habitants
     
    public void setNombreHabitant(int nbre)
    {
             nbreHabitant = nbre;
            this.setCategorie();
    }
     
     
     
    //METHODES DE CLASSE
     
    //Définit la catégorie de la ville
     
      private void setCategorie() {
     
          int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
            char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
     
            int i = 0;
     while (i < bornesSuperieures.length && this.nbreHabitant>=bornesSuperieures[i])
                    i++;
     
            this.categorie = categories[i];
     
     
      }
     
    //Retourne la description de la ville
     
      public String decrisToi(){
          return "\t"+this.nomVille+" est une ville de "+this.nomPays+", elle comporte : "+this.nbreHabitant+
                  " => elle est donc de catégorie : "+this.categorie;
      }
     
    // Retourne une chaîne de caractères selon le résultat de la comparaison
     
      public String comparer(Ville v1){
          String str = new String();
     
          if (v1.getNombreHabitant() > this.nbreHabitant)
              str = v1.getNom()+" est une ville plus peuplée que "+this.nomVille;
     
          else
              str = this.nomVille+" est une ville plus peuplée que "+v1.getNom();
     
          return str;
     
      }
     
    }
    J'ai pensé de mettre le code que je voudrais comprendre
    en faite y a quelque trucs que j'arrive pas à les saisir trés bienmes questions sont:
    1- pourquoi on a écrit "this.setCategorie();" dans le constructeur par défaut ainsi que dans le consctructeur d'initialisation autrement le role de this ici?
    2- quand on a ecrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void setCategorie() {
     
          int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
            char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
     
            int i = 0;
     while (i < bornesSuperieures.length && this.nbreHabitant>=bornesSuperieures[i])
                    i++;
     
            this.categorie = categories[i];
     
     
      }
    pourquoi on a mit "this.nbreHabitant" et non pas "nbreHabitant " ?

    quand on ecrit : this.categorie=categorie[i]; est-ce que this veut dire que la variable categorie de la calsse Ville.?

    J'espere que mes soucis sont claire...

    A+

    et merci d'avance de m'avoir aider à bien comprendre cette ce code..

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    "this" devant l'appel à une méthode ne sert à rien. (si ce n'est esthétique)
    En revanche, lorsqu'on utilise une propriété (variable de classe), this peut être nécessaire si un paramètre porte le même nom.

    Citation Envoyé par zpico Voir le message
    pourquoi on a mit "this.nbreHabitant" et non pas "nbreHabitant " ?
    En l'occurrence, ça revient au même car il n'y a pas d'ambiguïté avec un paramètre.

    Citation Envoyé par zpico Voir le message
    quand on ecrit : this.categorie=categories[i]; est-ce que this veut dire que la variable categorie de la calsse Ville.?
    Ici on a deux variables dont le nom se ressemble mais ce ne sont pas les mêmes noms (il y a une erreur dans la recopie du code, j'ai corrigé en gras).
    Le this n'est également pas obligatoire dans ce cas car il n'y a pas non plus d'ambiguïté.
    Il s'agit bien de la variable categorie de l'instance courante de cette classe Ville.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 130
    Par défaut
    Comme viens de le dire Nudger, dans ce code, tous les this utilisé le sont purement par esthétique :

    - il n'y a aucune ambiguïté entre les variables,
    - On peut s'en passer dans l'appel a la méthode setCategories()

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 172
    Par défaut Déroulement d'une boucle while
    Citation Envoyé par zpico Voir le message
    Salut,

    le Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //Définit la catégorie de la ville
     
      private void setCategorie() {
     
          int bornesSuperieures[] = {0, 1000, 10000, 100000, 500000, 1000000, 5000000, 10000000};
            char categories[] = {'?', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
     
            int i = 0;
     while (i < bornesSuperieures.length && this.nbreHabitant>=bornesSuperieures[i])
                    i++;
     
            this.categorie = categories[i];
     
     
      }

    Salut,

    je pense que la boucle ci-dessus donne toujours la categorie A si on a une ville de 0 habitant? or il faut avoir un "?" quelqu'un peut m'expliquer le déroulement de cette boucle je sais que c'est simple mais y a quelque chose qui m'échappe

    A+

    Merci encore de votre patience ...

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 576
    Par défaut
    L'opérateur de comparaison est >= "supérieur ou égal." Même zéro est supérieur ou égal à zéro.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. onmouseover=&quot;Menu_HoverStatic(this)&quot; object expected
    Par cyrano_de_bergerac dans le forum ASP.NET
    Réponses: 0
    Dernier message: 01/10/2010, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo