Ключевое слово this
Ключевое слово this представляет собой ссылку на текущий объект, то есть на тот экземпляр класса, в котором в данный момент выполняется код. Оно позволяет обращаться к полям и методам этого объекта, а также вызывать другие конструкторы того же класса. Чаще всего this используется для устранения конфликта имен, когда имя параметра метода или конструктора совпадает с именем поля класса.
Синтаксис
this.fieldName;
this.methodName();
this();
Пример
Давайте рассмотрим класс, в конструкторе которого параметры имеют те же имена, что и поля. Ключевое слово this поможет явно указать, что мы обращаемся именно к полю объекта:
public class Main
{
public static void main(String[] args)
{
User user = new User("John", 25);
System.out.println(user.getName());
System.out.println(user.getAge());
}
}
class User
{
private String name;
private int age;
public User(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return this.name;
}
public int getAge()
{
return this.age;
}
}
Результат выполнения кода:
"John"
25
Пример
Ключевое слово this также можно использовать для вызова одного конструктора из другого внутри того же класса. Это позволяет избежать дублирования кода инициализации:
public class Main
{
public static void main(String[] args)
{
Point point = new Point(5);
System.out.println(point.getX());
System.out.println(point.getY());
}
}
class Point
{
private int x;
private int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public Point(int value)
{
this(value, value);
}
public int getX()
{
return this.x;
}
public int getY()
{
return this.y;
}
}
Результат выполнения кода:
5
5
Пример
Ключевое слово this можно вернуть из метода, чтобы передать ссылку на текущий объект наружу. Это часто применяется в шаблоне «текучий интерфейс» (fluent interface):
public class Main
{
public static void main(String[] args)
{
Builder builder = new Builder();
builder.setName("abcde").setValue(12345);
System.out.println(builder.getName());
System.out.println(builder.getValue());
}
}
class Builder
{
private String name;
private int value;
public Builder setName(String name)
{
this.name = name;
return this;
}
public Builder setValue(int value)
{
this.value = value;
return this;
}
public String getName()
{
return this.name;
}
public int getValue()
{
return this.value;
}
}
Результат выполнения кода:
"abcde"
12345
Смотрите также
-
конструктор
constructor,
который создает объекты класса -
ключевое слово
super,
которое ссылается на родительский класс -
ключевое слово
static,
которое делает члены класса общими -
ключевое слово
private,
которое ограничивает доступ к членам класса