Что означает Class.this
Получается, что this — это ссылка на объект. Тогда у меня возникает вопрос, что означает эта запись:
Что здесь может возвращать this, если в классе я не создавал никаких объектов. Чем здесь является this?
Отслеживать
задан 20 мар 2021 в 10:42
user428447 user428447
Можно же посмотреть дебагером/принтом.
20 мар 2021 в 10:43
ru.stackoverflow.com/q/1258341/177345 — это один и тот же вопрос? Если да, то не нужно создавать новые дубликаты, делайте уточнения в уже заданном (кнопка «править» под вопросом)
20 мар 2021 в 12:06
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Записи типа Class.this используются во вложенных или анонимных классах, когда из них нам нужно сослаться на объект включающего их класса. Class — имя внешнего (включающего) сласса, this — ссылка на экземпляр внешнего (включающего) класса. Если вы вложенном классе или анонимном классе обратитесь, просто по this, то вы сошлётесь на текущий объект этого вложенного или анонимного класса, а не на объект внешнего.
Отслеживать
ответ дан 20 мар 2021 в 18:32
997 1 1 золотой знак 4 4 серебряных знака 16 16 бронзовых знаков
Да, это я уже выяснил из просторов инета, но я не понимаю на какой объект мы ссылаемся при такой записи, если в своем классе я не создавал никакого объекта, например когда в своем классе(Info) я создаю объект Intent и в первый параметр конструктора я пишу Info.this. Так на какой объект я ссылаюсь если объектов в классе Info я не создавал?
– user428447
21 мар 2021 в 9:52
@Михаил Вы имеете в виду в первый параметр конструктора объекта Intent? Тогда так: На этапе выполнения, во время создания объекта класса Info в нём будет создан объект класса Intent и в качестве аргумента в конструктор этого объекта (Intent) будет передан сам объект Info, то есть текущий объект класса Info, но в такой ситуации вы можете использовать просто — this. Использование Info.this в этом случае — это просто для удобочитаемости, этого можно было и не писать
21 мар 2021 в 10:59
@Михаил если же вы не получаете объект Intent в определении класса Info, а определяете класс Intent, как вложенный в класс Info, то ответ дан ранее.
Ключевое слово this
Иногда требуется, чтобы метод ссылался на вызвавший его объект. Ключевое слово this в Java используется в теле любого метода для ссылки на текущий объект.
Рассмотрим конструктор, в котором параметры имеют те же имена, что и переменные класса. В этом случае параметры перекрывают область видимости переменных класса и мы не можем напрямую обратится к переменным класса. Чтобы это сделать используется ключевое слово this:
Box(double width, double height, double depth)
В этом примере использование ключевого слова this не является необходимым — можно обойтись и без него:
Box(double w, double h, double d)
2. Использование ключевого слова this() в конструкторе
Второй вариант использования ключевого слова this() — с его помощью можно вызвать один конструктор из другого. Вызов this() может находиться только в первой строчке конструктора:
public class Toy < String name; int cost; String manufacturer; int age; public Toy(String name, int cost, String manufacturer, int age) < this(name, cost, manufacturer); this.age = age; System.out.println("В конструкторе с четырьмя параметрами"); >public Toy(String name, int cost, String manufacturer) < this(); this.name = name; this.cost = cost; this.manufacturer = manufacturer; System.out.println("В конструкторе с тремя параметрами"); >public Toy() < System.out.println("В конструкторе по умолчанию"); >>
public class ToyDemo < public static void main(String[] args) < Toy toy = new Toy("Кукла", 34, "Disney", 3); >>
В конструкторе по умолчанию В конструкторе с тремя параметрами В конструкторе с четырьмя параметрами
- Процедурное и объектно-ориентированное программирование
- Принципы ООП
- Классы и объекты
- Конструктор
- Перегрузка
- Стек и куча
- Передача объектов в методы
- Java varargs
- Рекурсия
- Сборщик мусора и метод finalize
- Наследование
- Ключевое слово super
- Модификаторы доступа
- Геттеры и сеттеры
- Переопределение методов
- Абстрактные классы и методы
- Ключевое слово final
- Задания
Ключевое слово this
Иногда будет требоваться, чтобы метод ссылался на вызвавший его объект. Чтобы это было возможно, в Java определено ключевое слово this. Оно может использоваться внутри любого метода для ссылки на текущий объект. То есть this всегда служит ссылкой на объект, для которого был вызван метод. Ключевое слово this можно использовать везде, где допускается ссылка на объект типа текущего класса.
Для пояснения рассмотрим следующую версию конструктора Point:
public class Point public int x = 0; public int y = 0; //constructor public Point(int x, int y) this.x = x; this.y = y; > >
Можно ли в примере обойтись без ключевого слова this?
Как использовать this как параметр java
Ключевое слово this — это ссылка на текущий объект: объект, метод или конструктор которого вызывается ( спецификация Oracle ).
Поэтому, передавая this как параметр, мы фактически передаем ссылку на текущий объект. Рассмотрим на примере:
//Создадим простой класс ThisExample public class ThisExample private String message = "null"; //добавим конструктор с аргументом public ThisExample(String message) this.message = message; > >
Ключевое слово this в данном случае использовали, чтобы присвоить переменной класса переданный аргумент в конструктор, т.к. их названия одинаковые.
Также можно использовать ссылки на конструкторы одного и того же класса.
public class ThisExample public ThisExample() System.out.println("Конструктор без аргументов"); > public ThisExample(String message) this(); System.out.println("Конструктор с сообщением: " + message); > >
Если мы создадим конструктор класса с аргументом, то сначала будет вызван конструктор без аргумента:
public static void main(String[] args) new ThisExample("this"); >
Вывод будет следующим:
Конструктор с сообщением: test
Или наоборот, можем вызвать конструктор с аргуметом из конструктора без аргумента и передать в него параметры:
private String message = "null"; public ThisExample() this("Test message"); > public ThisExample(String message) this.message = message; >
Можно передать this в качестве аргумента в метод:
static class ThisExample private String message = "null"; public ThisExample() printMessage(this); > public ThisExample(String message) this.message = message; printMessage(this); > //метод, в который передаем this в качестве аргумента public void printMessage(ThisExample msg) System.out.println(msg); > //переопределим метод toString, для наглядности @Override public String toString() return "message='" + message + '\''; > >
Запустим наш код:
public static void main(String[] args) new ThisExample(); new ThisExample("this"); >
Вывод будет следующим:
message='this'