this — це спеціальне ключове зарезервоване слово Java, яке містить посилання на поточний екземпляр класу. В цій нотатці буде розглянуто приклади використання this:

  • звернення до змінних екземпляру (instance variables)
  • виклик конструктора класу
  • повернення методом поточного екземпляра класу

Звернення до змінних екземпляру (instance variables)

Один з прикладів використання this в Java, звернення до змінних екземпляра класу (instance variables). Це потрібно у випадках, коли в поточному блоці імена змінних екземпляру, перекриваються локальними змінними з аналогічними іменами. Приклад:

public class User {

    private String fullName;

    public void setFullName() {
        String fullName = "Вернигора Валентин Григорович";
        this.fullName = "Думенко Володимир Олегович";

        System.out.println("Full name local variable: " + fullName);
        System.out.println("Full name instance variable: " + this.fullName);
    }
}

  • клас User містить змінну екземпляру fullName
  • метод setFullName містить локальну змінну з таким самим ім’ям fullName
  • для звернення до змінної екземпляру, потрібно використати ключове слово this (синтаксис this.<instance_variable_name>)

Виклик setFullName:

public class Main {

    public static void main(String[] args) {
        User user = new User();
        user.setFullName();
    }
}

Результат:

Full name local variable: Вернигора Валентин Григорович
Full name instance variable: Думенко Володимир Олегович

Нотатка про instance variables в Java:

Що таке instance variables в Java

Виклик конструктора класу

Наступний приклад використання this – виклик конструктора класу, всередині іншого конструктора цього ж класу. Можна викликати конструктор без аргументів або з аргументами, передавши відповідні параметри. Приклад:

public class User {

    private String firstName;
    private String lastName;
    private String citizenship;

    public User(String firstName, String lastName) {
        this(firstName, lastName, "Україна");
    }

    public User(String firstName, String lastName, String citizenship) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.citizenship = citizenship;
    }

    @Override
    public String toString() {
        return "User{" +
                "firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", citizenship='" + citizenship + '\'' +
                '}';
    }
}

  • клас User містить два конструктори, з двома та трьома параметрами
  • конструктор з двома параметрами за допомогою this, робить виклик конструктора з трьома параметрами
  • при створенні об’єкту User, викликом конструктора з двома параметрами, поле citizenship буде проініціалізовано значенням за замовчуванням

Перевірка роботи класу User:

public class Main {

    public static void main(String[] args) {
        User user = new User("Віталій", "Дмитренко");
        System.out.println(user);
    }
}

Результат:

User{firstName='Віталій', lastName='Дмитренко', citizenship='Україна'}

Повернення методом поточного екземпляра класу

Метод має можливість повертати поточний екземпляр класу. Робиться це за допомогою return this. Це дає змогу створювати ланцюжки викликів і замість:

object.method1();
object.method2();
object.method3();

Писати:

object.method1().method2().method3();

Приклад:

public class User {

    private String firstName;
    private String lastName;
    private String citizenship;

    public User setFirstName(String firstName) {
        this.firstName = firstName;
        return this;
    }

    public User setLastName(String lastName) {
        this.lastName = lastName;
        return this;
    }

    public User setCitizenship(String citizenship) {
        this.citizenship = citizenship;
        return this;
    }

    public void printData() {
        System.out.printf("%s %s %s%n", firstName, lastName, citizenship);
    }
}

Робота з об’єктом класу User:

public class Main {

    public static void main(String[] args) {
        User user = new User();
        user.setFirstName("Віктор")
                .setLastName("Криворучко")
                .setCitizenship("Україна")
                .printData();
    }
}

Результат:

Віктор Криворучко Україна


Мітки: