Назад Зміст Вперед

7.1. Ключове слово this

Іноді буде вимагатися, щоб метод посилався на об'єкт, який його викликав. Щоб це було можливо, в Java визначено ключове слово this. Воно може використовуватися усередині будь-якого методу для посилання на поточний об'єкт. Тобто this завжди служить посиланням на об'єкт, для якого був викликаний метод. Ключове слово this можна використовувати скрізь, де допускається посилання на об'єкт типу поточного класу.

Для пояснення розглянемо наступну версію конструктора Box ():

// Надмірне застосування ключового слова this.
Box(double w, double h, double d) {
this.width = w;
this.height = h;
this.depth = d;
}

Ця версія конструктора Box () діє точно так само, як попередня. Застосування ключового слова this надлишково, але абсолютно правильно. Усередині методу Box () ключове слово this завжди буде посилатися на об'єкт, який його викликав. Хоча в даному випадку це і зайве, в інших випадках ключове слово this вельми корисно.

Статичні функції-члени класу оперують з тим об'єктом типу класу, з якого вони викликані. Ключове слово this позначає спеціальну локальну змінну, доступну в тілі будь-якої функції-члена класу, описаної без специфікації static. Змінна this не вимагає опису і завжди містить покажчик відповідного об'єкта.

  • this-> ім'я члена вказує на об'єкт, членом якого він є.
  • This являє собою сам об'єкт і, залежно від контексту, може бути ліво- або правобічною величиною.
  • This являє собою адресу об'єкта.
Найбільш часто this використовується, коли необхідно викликати методи зміненого об'єкта. 

Ключове слово this служить посиланням на екземпляр даного класу, в якому воно вказано. Зразок об'єкта, через який виходить доступ до змінної, або методу. Мета цього слова в тому, щоб не вигадувати і не створювати зайві змінні.

Наприклад ось ці методи присвоєння змінним значень еквівалентні:
int a;
// метод бачить змінну класу
void setValue(int b) { a = b; } 
// метод не бачить змінної класу
void setVariable(int a) { this.a = a; }
// змінна перекривається однойменно, але
// слово this дає посилання на змінну a 

У наведеному нижче прикладі метод setValue () приймає на вхід однойменні змінні класу прямокутника (ширину і висоту), а також виводить на екран свої власні змінні, які обмежені видимістю в межах фігурних дужок методу. Змінні класу тимчасово закоментовані, щоб не прийняли ті ж значення:

class Rectangle
{ 
int width;      // this - змінює ці поля класу
 
int height;          // інакше тільки поля методу
 
  void setValue (int width, int height)
  {
     // this.width = width;    // width класу
     // this.height = height;  // height класу
     width = width;            // width метода
     height = height;          // height метода
                // тут виводяться поля метода
    System.out.println 
        (" width метода = " + width +
            " height метода = " + height);
  }
   public static void main (String[]args)
  {
    Rectangle r = new Rectangle();
 
    r.setValue(1, 2);
              // тут виводяться поля класу    System.out.println 
        (" width класу = " + r.width + 
            " height класу = " + r.height);
  }
}
 
.