Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Ключевое слово this в Java: практическое применение, конструкторы и примеры

Ключевое слово this в Java

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

Что такое this?

В Java ключевое слово this ссылается на текущий экземпляр класса. Чаще всего оно используется внутри методов экземпляра или конструкторов для различения переменных экземпляра и параметров с одинаковыми именами.

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

Вывод:

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

И this, и переменная obj указывают на один и тот же экземпляр объекта, подтверждая, что this — это просто ссылка на текущий объект.


Когда использовать this

Ключевое слово незаменимо в нескольких распространенных паттернах кодирования:

Разрешение неоднозначности имен переменных

Java позволяет параметру иметь то же имя, что и переменная экземпляра, но без this компилятор не может определить, какое именно вы имеете в виду. Например:

class MyClass { int age; MyClass(int age){ age = age; } }

В конструкторе выше age = age присваивает параметр самому себе, оставляя переменную экземпляра неизменной. Использование 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:

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

Это эквивалентно this.age = i.

Использование this в геттерах и сеттерах

Сеттеры и геттеры часто принимают параметр с тем же именем, что и поле. this гарантирует обращение к правильной переменной:

class Main { String name; // setter void setName(String name) { this.name = name; } // getter String getName(){ return this.name; } public static void main(String[] args) { Main obj = new Main(); obj.setName("Toshiba"); System.out.println("obj.name: " + obj.getName()); } }

Вывод:

obj.name: Toshiba

Перегрузка конструкторов с this()

Когда один конструктор должен делегировать создание другому, this() выполняет явный вызов конструктора:

class Complex { private int a, b; private Complex(int i, int j){ this.a = i; this.b = j; } private Complex(int i){ this(i, i); // вызывает двухпараметровый конструктор } private Complex(){ this(0); // вызывает однопараметровый конструктор } @Override public String toString(){ return this.a + " + " + this.b + "i"; } public static void main(String[] args) { Complex c1 = new Complex(2, 3); Complex c2 = new Complex(3); Complex c3 = new Complex(); System.out.println(c1); System.out.println(c2); System.out.println(c3); } }

Вывод:

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

Ключевые моменты:

Примечание: Явный вызов конструктора через this() должен быть первым оператором в конструкторе.

Передача this в качестве аргумента

Поскольку this — это ссылка на текущий объект, его можно передать другим методам, позволяя им изменять состояние объекта:

class ThisExample { int x; int y; ThisExample(int x, int y) { this.x = x; this.y = y; System.out.println("Before passing this to addTwo() method:"); System.out.println("x = " + this.x + ", y = " + this.y); add(this); // передача текущего экземпляра 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) { new ThisExample(1, -2); } }

Вывод:

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

Здесь метод add получает тот же экземпляр объекта и напрямую обновляет его поля.

java

  1. Ключевое слово this в C#: разбор всех сценариев использования
  2. Освоение операторов Java: типы, синтаксис и практические примеры
  3. Комментарии в Java: типы, использование и лучшие практики
  4. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  5. Освоение конструкторов Java: типы, использование и практические примеры
  6. Освоение строк в Java: создание, методы и лучшие практики
  7. Ключевое слово this в Java: практическое применение, конструкторы и примеры
  8. Ключевое слово final в Java: переменные, методы и классы
  9. Интерфейсы в Java: концепции, реализация и лучшие практики
  10. Инкапсуляция в Java: практическое руководство по скрытию данных