Java це: Де і як ним користуватися?

У цій статті ми дізнаємося про це ключове слово в Java, як і де їх використовувати за допомогою прикладів.

це ключове слово

У Java це ключове слово використовується для посилання на поточний об'єкт усередині методу або конструктора. Наприклад,

 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); ) )

Вихід :

 це посилання = Main @ 23fc625e посилання на об'єкт = Main @ 23fc625e

У наведеному вище прикладі ми створили об’єкт з іменем obj класу Main. Потім ми друкуємо посилання на об’єкт obj та thisключове слово класу.

Тут ми можемо побачити, що посилання на obj і thisє однаковим. Це означає, що це не що інше, як посилання на поточний об'єкт.

Використання цього ключового слова

Існують різні ситуації, коли thisключове слово зазвичай використовується.

Використовуючи це для імен змінних неоднозначності

У Java не дозволяється оголошувати дві або більше змінних, що мають однакове ім'я, всередині області дії (сфера класу або область застосування методу). Однак змінні та параметри екземпляра можуть мати однакові назви. Наприклад,

 class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )

У наведеній вище програмі змінна екземпляра та параметр мають однакові назви: age. Тут компілятор Java плутається через неоднозначність імен.

У такій ситуації ми використовуємо це ключове слово. Наприклад,

Спочатку розглянемо приклад без використання thisключового слова:

 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); ) )

Вихід :

 mc.age = 0

У наведеному вище прикладі ми передали 8як значення конструктору. Однак ми отримуємо 0як результат. Це тому, що компілятор Java плутається через неоднозначність імен між екземпляром змінної та параметром.

Тепер давайте перепишемо наведений вище код, використовуючи thisключове слово.

 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); ) )

Вихід :

 obj.age = 8

Тепер ми отримуємо очікуваний результат. Це тому, що при виклику конструктора thisвсередині конструктора замінюється об’єкт obj, який викликав конструктор. Отже, віковій змінній присвоюється значення 8.

Крім того, якщо ім'я параметра та змінної екземпляра різне, компілятор автоматично додає це ключове слово. Наприклад, код:

 class Main ( int age; Main(int i) ( age = i; ) )

еквівалентно:

 class Main ( int age; Main(int i) ( this.age = i; ) )

це з Геттерами та Сеттерами

Ще одне поширене використання thisключового слова - в методах сетерів та геттерів класу. Наприклад:

 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()); ) )

Вихід :

 ім'я об'єкта: Toshiba

Тут ми використали thisключове слово:

  • призначити значення всередині методу встановлення
  • для доступу до значення всередині методу отримання

Використовуючи це в Constructor Overloading

Під час роботи з перевантаженням конструктора нам, можливо, доведеться викликати один конструктор з іншого конструктора. У такому випадку ми не можемо явно викликати конструктор. Натомість ми повинні використовувати thisключове слово.

Тут ми використовуємо іншу форму цього ключового слова. Тобто this(). Візьмемо приклад,

 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); ) )

Вихід :

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

У наведеному вище прикладі ми використовували thisключове слово,

  • викликати конструктор Complex(int i, int j)з конструктораComplex(int i)
  • викликати конструктор Complex(int i)з конструктораComplex()

Зверніть увагу на рядок,

 System.out.println(c1);

Here, when we print the object c1, the object is converted into a string. In this process, the toString() is called. Since we override the toString() method inside our class, we get the output according to that method.

One of the huge advantages of this() is to reduce the amount of duplicate code. However, we should be always careful while using this().

This is because calling constructor from another constructor adds overhead and it is a slow process. Another huge advantage of using this() is to reduce the amount of duplicate code.

Note: Invoking one constructor from another constructor is called explicit constructor invocation.

Passing this as an Argument

We can use this keyword to pass the current object as an argument to a method. For example,

 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); ) )

Вихід :

 Перед передачею цього методу addTwo (): x = 1, y = -2 Після передачі цього методу addTwo (): x = 3, y = 0

У наведеному вище прикладі всередині конструктора ThisExample()зверніть увагу на рядок,

 add(this);

Тут ми викликаємо add()метод, передаючи це як аргумент. Оскільки це ключове слово містить посилання на об'єкт obj класу, ми можемо змінити значення x та y всередині add()методу.

Цікаві статті...