Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java ce mot clé

Java ce mot-clé

Dans cet article, nous allons découvrir ce mot-clé en Java, comment et où les utiliser à l'aide d'exemples.

ce mot-clé

En Java, ce mot-clé est utilisé pour faire référence à l'objet courant à l'intérieur d'une méthode ou d'un constructeur. Par exemple,

class Main {
    int instVar;

    Main(int instVar){
        this.instVar = instVar;
        System.out.println("this reference = " + this);
    }

    public static void main(String[] args) {
        Main obj = new Main(8);
        System.out.println("object reference = " + obj);
    }
}

Sortie :

this reference = Main@23fc625e
object reference = Main@23fc625e

Dans l'exemple ci-dessus, nous avons créé un objet nommé obj de la classe Main . On imprime ensuite la référence à l'objet obj et this mot clé de la classe.

Ici, nous pouvons voir que la référence des deux obj et this est le même. Cela signifie qu'il ne s'agit que de la référence à l'objet actuel.

Utilisation de ce mot clé

Il existe diverses situations où this mot-clé est couramment utilisé.

Utilisation de ceci pour les noms de variables ambigus

En Java, il n'est pas permis de déclarer deux ou plusieurs variables ayant le même nom à l'intérieur d'une portée (portée de classe ou portée de méthode). Cependant, les variables d'instance et les paramètres peuvent avoir le même nom. Par exemple,

class MyClass {
    // instance variable
    int age;

    // parameter
    MyClass(int age){
        age = age;
    }
}

Dans le programme ci-dessus, la variable d'instance et le paramètre portent le même nom :age. Ici, le compilateur Java est confus en raison de l'ambiguïté du nom.

Dans une telle situation, nous utilisons ce mot-clé. Par exemple,

Voyons d'abord un exemple sans utiliser this mot-clé :

class Main {

    int age;
    Main(int age){
        age = age;
    }

    public static void main(String[] args) {
        Main obj = new Main(8);
        System.out.println("obj.age = " + obj.age);
    }
}

Sortie :

obj.age = 0

Dans l'exemple ci-dessus, nous avons passé 8 comme valeur pour le constructeur. Cependant, nous obtenons 0 comme sortie. En effet, le compilateur Java est confus en raison de l'ambiguïté des noms entre l'instance de la variable et le paramètre.

Maintenant, réécrivons le code ci-dessus en utilisant this mot-clé.

class Main {

    int age;
    Main(int age){
        this.age = age;
    }

    public static void main(String[] args) {
        Main obj = new Main(8);
        System.out.println("obj.age = " + obj.age);
    }
}

Sortie :

obj.age = 8

Maintenant, nous obtenons la sortie attendue. C'est parce que lorsque le constructeur est appelé, this à l'intérieur du constructeur est remplacé par l'objet obj qui a appelé le constructeur. D'où l'âge la variable est affectée de la valeur 8 .

De plus, si le nom du paramètre et de la variable d'instance est différent, le compilateur ajoute automatiquement ce mot-clé. Par exemple, le code :

class Main {
    int age;

    Main(int i) {
        age = i;
    }
}

est équivalent à :

class Main {
    int age;

    Main(int i) {
        this.age = i;
    }
}

cela avec Getters et Setters

Une autre utilisation courante de this le mot clé est dans les méthodes setters et getters d'une classe. Par exemple :

class Main {
   String name;

   // setter method
   void setName( String name ) {
       this.name = name;
   }

   // getter method
   String getName(){
       return this.name;
   }

   public static void main( String[] args ) {
       Main obj = new Main();

       // calling the setter and the getter method
       obj.setName("Toshiba");
       System.out.println("obj.name: "+obj.getName());
   }
}

Sortie :

obj.name: Toshiba

Ici, nous avons utilisé this mot-clé :

  • pour attribuer une valeur à l'intérieur de la méthode setter
  • pour accéder à la valeur dans la méthode getter

Utilisation de ceci dans la surcharge de constructeur

Lorsque vous travaillez avec la surcharge de constructeurs, nous devrons peut-être invoquer un constructeur à partir d'un autre constructeur. Dans un tel cas, nous ne pouvons pas appeler explicitement le constructeur. Au lieu de cela, nous devons utiliser this mot-clé.

Ici, nous utilisons une forme différente de ce mot-clé. C'est-à-dire this() . Prenons un exemple,

class Complex {

    private int a, b;

    // constructor with 2 parameters
    private Complex( int i, int j ){
        this.a = i;
        this.b = j;
    }

    // constructor with single parameter
    private Complex(int i){
        // invokes the constructor with 2 parameters
        this(i, i); 
    }

    // constructor with no parameter
    private Complex(){
        // invokes the constructor with single parameter
        this(0);
    }

    @Override
    public String toString(){
        return this.a + " + " + this.b + "i";
    }

    public static void main( String[] args ) {
  
        // creating object of Complex class
        // calls the constructor with 2 parameters
        Complex c1 = new Complex(2, 3); 
    
        // calls the constructor with a single parameter
        Complex c2 = new Complex(3);

        // calls the constructor with no parameters
        Complex c3 = new Complex();

        // print objects
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
    }
}

Sortie :

2 + 3i
3 + 3i
0 + 0i

Dans l'exemple ci-dessus, nous avons utilisé this mot-clé,

  • pour appeler le constructeur Complex(int i, int j) du constructeur Complex(int i)
  • pour appeler le constructeur Complex(int i) du constructeur Complex()

Remarquez la ligne,

System.out.println(c1);

Ici, quand on imprime l'objet c1 , l'objet est converti en chaîne. Dans ce processus, le toString() est appelé. Puisque nous remplaçons le toString() méthode à l'intérieur de notre classe, nous obtenons la sortie selon cette méthode.

L'un des énormes avantages de this() est de réduire la quantité de code en double. Cependant, nous devons toujours être prudents lorsque nous utilisons this() .

En effet, l'appel d'un constructeur à partir d'un autre constructeur ajoute une surcharge et c'est un processus lent. Un autre énorme avantage d'utiliser this() est de réduire la quantité de code en double.

Remarque :L'invocation d'un constructeur à partir d'un autre constructeur est appelée invocation de constructeur explicite.

Passer ceci comme argument

Nous pouvons utiliser this mot-clé pour passer l'objet courant comme argument à une méthode. Par exemple,

class ThisExample {
    // declare variables
    int x;
    int y;

    ThisExample(int x, int y) {
       // assign values of variables inside constructor
        this.x = x;
        this.y = y;

        // value of x and y before calling add()
        System.out.println("Before passing this to addTwo() method:");
        System.out.println("x = " + this.x + ", y = " + this.y);

        // call the add() method passing this as argument
        add(this);

        // value of x and y after calling add()
        System.out.println("After passing this to addTwo() method:");
        System.out.println("x = " + this.x + ", y = " + this.y);
    }

    void add(ThisExample o){
        o.x += 2;
        o.y += 2;
    }
}

class Main {
    public static void main( String[] args ) {
        ThisExample obj = new ThisExample(1, -2);
    }
}

Sortie :

Before passing this to addTwo() method:
x = 1, y = -2
After passing this to addTwo() method:
x = 3, y = 0

Dans l'exemple ci-dessus, à l'intérieur du constructeur ThisExample() , remarquez la ligne,

add(this);

Ici, nous appelons le add() méthode en passant ceci comme argument. Puisque ce mot clé contient la référence à l'objet obj de la classe, on peut changer la valeur de x et y à l'intérieur du add() méthode.


Java

  1. C# ce mot-clé
  2. Opérateurs Java
  3. Commentaires Java
  4. Java pour chaque boucle
  5. Constructeurs Java
  6. Chaînes Java
  7. Java ce mot clé
  8. Mot-clé Java final
  9. InterfaceJava