Ключевое слово 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
- Задания
27) Это ключевое слово
Ключевое слово THIS – это ссылочная переменная в Java, которая ссылается на текущий объект.
Ниже перечислены различные варианты использования ключевого слова «ЭТО» в Java:
- Может использоваться для ссылки на переменную экземпляра текущего класса
- Может использоваться для вызова или запуска текущего конструктора класса
- Может быть передан как аргумент в вызове метода
- Это может быть передано в качестве аргумента в вызове конструктора
- Может использоваться для возврата текущего экземпляра класса
Нажмите здесь, если видео не доступно
Понять ключевое слово this с примером.
- Класс : учетная запись класса
- Переменная экземпляра : a и b
- Метод Set data : установить значение для a и b.
- Метод Показать данные : для отображения значений a и b.
- Основной метод: где мы создаем объект для класса Account и вызываем методы, устанавливаем данные и показываем данные.
Давайте скомпилируем и запустим код
Наш ожидаемый результат для A и B должен быть инициализирован значениями 2 и 3 соответственно.
Но значение равно 0, почему? Давай расследуем.
В методе Set data аргументы объявляются как a и b, а переменные экземпляра также именуются как a и b.
Во время выполнения компилятор запутался. Является ли «a» слева от назначенного оператора переменной экземпляра или локальной переменной. Следовательно, он не устанавливает значение ‘a’ при вызове набора данных метода.
Решением является ключевое слово “ЭТО”
Добавьте оба «a» и «b» с ключевым словом «this», за которым следует оператор точки (.).
Во время выполнения кода, когда объект вызывает метод ‘setdata’. Ключевое слово ‘this’ заменяется обработчиком объекта “obj.” (См. Изображение ниже).
Итак, теперь компилятор знает,
- ‘A’ в левой части является переменной Instance.
- Принимая во внимание, что ‘a’ на правой стороне является локальной переменной
Переменные инициализируются правильно, и отображается ожидаемый результат.
Предположим, вы достаточно умны, чтобы выбирать разные имена для вашей переменной экземпляра и аргументов методов.
Но на этот раз вы создаете два объекта класса, каждый из которых вызывает метод набора данных.
Как компилятор определит, должен ли он работать с переменной экземпляра объекта 1 или объекта 2.
Что ж, компилятор неявно добавляет переменную экземпляра с ключевым словом «ЭТО» (рисунок ниже).
Таким образом, когда объект 1 вызывает метод набора данных, к переменной экземпляра добавляется его ссылочная переменная.
Пока объект 2 вызывает метод набора данных, переменная экземпляра объекта 2 изменяется.
Этот процесс заботится самим компилятором. Вам не нужно явно добавлять ключевое слово this, если нет исключительной ситуации, как в нашем примере.
Пример: чтобы узнать, как использовать это ключевое слово
Шаг 1) Скопируйте следующий код в блокнот.
class Account < int a; int b; public void setData(int a ,int b)< a = a; b = b; >public void showData()< System.out.println("Value of A ="+a); System.out.println("Value of B vertical-align: inherit;"> Шаг 2) Сохраните, скомпилируйте и запустите код. Шаг 3) Значение a & b отображается как ноль? Чтобы исправить ошибку, добавьте строки № 6 и 7 с ключевым словом ” this “.
this.a =a; this.b =b;
Шаг 4) Сохраните, скомпилируйте и запустите код. На этот раз значения a & b установлены на 2 и 3 соответственно.
Резюме
- Ключевое слово «ЭТО» в Java – это ссылочная переменная, которая ссылается на текущий объект.
- Может использоваться для ссылки на переменную экземпляра текущего класса
- Может использоваться для вызова или запуска текущего конструктора класса
- Может быть передан как аргумент в вызове метода
- Это может быть передано в качестве аргумента в вызове конструктора
- Может использоваться для возврата текущего экземпляра класса
- «this» – это ссылка на текущий объект, метод которого вызывается.
- Вы можете использовать ключевое слово “this”, чтобы избежать конфликтов имен в методе / конструкторе вашего экземпляра / объекта.
19. Java – Методы
Метод в Java – это комплекс выражений, совокупность которых позволяет выполнить определенную операцию. Так, например, при вызове метода System.out.println(), система выполняет ряд команд для выведения сообщения на консоль.
На данном этапе вы освоите технику создания собственных методов с либо без возвращаемых значений, вызова методов с указанием либо без указания параметров, и выделения методов при разработке программы.
Создание метода
Ниже рассмотрен пример, иллюстрирующий синтаксис метода, как в Java создать метод.
Синтаксис
public static int methodName(int a, int b) < // тело >
- public static – модификатор;
- int – возвращаемый тип;
- methodName – имя метода;
- a, b – формальные параметры;
- int a, int b – перечень параметров.
Определение метода представлено заголовком и телом метода. То же самое мы можем наблюдать в следующем синтаксисе создания метода.
Синтаксис
modifier returnType nameOfMethod (Parameter List) < // тело метода >
Приведенный выше синтаксис включает:
- modifier – определяет тип доступа для метода и возможность его использования.
- returnType – метод может возвратить значение.
- nameOfMethod – указывает имя метода. Сигнатура метода включает имя метода и перечень параметров.
- Parameter List – перечень параметров представлен типом, порядком и количеством параметров метода. Данная опция задается произвольно, в методе может присутствовать нулевой параметр.
- method body – тело метода определяет метод работы с командами.
Пример
Далее представлен исходный код рассмотренного выше метода, именуемого max(). Данный метод использует два параметра num1 и num2 и возвращает больший из двух.
/* фрагмент кода возвращает минимальное между двумя числами */ public static int minFunction(int n1, int n2) < int min; if (n1 >n2) min = n2; else min = n1; return min; >
Вызов метода
Перед использованием метода его необходимо вызвать. Существует два способа для вызова метода в Java, т.е. метод производит возврат значения либо не производит (отсутствует возвращающее значение).
Алгоритм вызова метода достаточно прост. Когда программа производит в Java вызов метода, программное управление передается вызванному методу. Данный вызванный метод затем возвращает управление вызывающему клиенту в двух случаях, если:
- выполняется оператор возврата;
- достигнута закрывающая фигурная скобка окончания метода.
Метод возврата типа void производит вызов команды. Рассмотрим пример:
System.out.println("Это proglang.su!");
Метод возврата значения может быть проиллюстрирован следующим примером:
int result = sum(6, 9);
Пример ниже демонстрирует способ определения и вызова метода в Java.
Пример
public class ExampleMinNumber < public static void main(String[] args) < int a = 11; int b = 6; int c = minFunction(a, b); System.out.println("Минимальное значение dos">Минимальное значение = 6
Ключевое слово void
Ключевое слово void в Java позволяет нам создать методы, не производящие возврат значения. В примере, расположенном далее, нами был рассмотрен метод типа void – methodRankPoints. Методы типа void в Java не производят возврат каких-либо значений. Вызов метода типа void выполняется командой, т.е. methodRankPoints(255.7);. Это java-выражение, которое оканчивается точкой с запятой, как показано в примере ниже:
Пример
public class ExampleVoid < public static void main(String[] args) < methodRankPoints(255.7); >public static void methodRankPoints(double points) < if (points >= 202.5) < System.out.println("Ранг A1"); >else if (points >= 122.4) < System.out.println("Ранг A2"); >else < System.out.println("Ранг A3"); >> >
В итоге будет получен следующий результат:
Ранг A1
Передача параметров по значению в Java
При выполнении вызывающего процесса производится в Java передача аргументов. Процедура должна осуществляться согласно порядку, предусмотренному соответствующими параметрами в спецификации метода. Передача параметров может производиться по значению либо по ссылке.
В Java передача параметров по значению обозначает вызов метода с параметром. За счет этого производится передача значения аргумента параметру.
Пример
Следующая программа демонстрирует пример передачи параметра по значению. Значения аргументов остаются неизменными даже после вызова метода.
public class swappingExample < public static void main(String[] args) < int a = 30; int b = 45; System.out.println("Перед тем как передать, значения аргументов a = " + a + " и b = " + b); // Вызов метода передачи swapFunction(a, b); System.out.println("\nСейчас, до и после передачи значения аргументов "); System.out.println("остались неизменными, a = " + a + " и b = " + b); >public static void swapFunction(int a, int b) < System.out.println("До замены: a = " + a + " b = " + b); // Передача параметров int c = a; a = b; b = c; System.out.println("После замены: a = " + a + " b dos">Перед тем как передать, значения аргументов a = 30 и b = 45 До замены: a = 30 b = 45 После замены: a = 45 b = 30 Сейчас, до и после передачи значения аргументов остались неизменными, a = 30 и b = 45
Перегрузка методов
Перегрузка методов в Java – случай, когда в классе присутствуют два и более метода с одинаковым именем, но различными параметрами. Данный процесс отличен от переопределения методов. При переопределении методов, метод характеризуется аналогичным именем, типом, числом параметров и т.д.
Рассмотрим пример, который был представлен выше при определении минимальных чисел целочисленного типа. Так допустим, мы хотим определить минимальное число двойного типа. В данном случае будет представлена концепция перегрузки для создания двух и более методов с одинаковым именем, но различными параметрами.
Рассмотренный пример поясняет вышесказанное.
Пример
public class ExampleOverloading < public static void main(String[] args) < int a = 7; int b = 3; double c = 5.1; double d = 7.2; int result1 = minFunction(a, b); // такая же функция с другими параметрами double result2 = minFunction(c, d); System.out.println("Минимальное значение = " + result1); System.out.println("Минимальное значение dos">Минимальное значение = 3 Минимальное значение = 5.1
Методы перегрузки делают программу читаемой. Таким образом, представлены два метода с одинаковым именем, но различными параметрами. В результате чего мы получили минимальные int число и число double типа.
Использование аргументов командной строки
В ходе работы программы вам может понадобиться произвести передачу определенной информации. Это может быть сделано в Java за счет передачи аргументов командной строки в main().
В Java аргумент командной строки представляет информацию, которая напрямую следует за именем программы в командной строке при ее выполнении. Получение доступа к аргументам командной строки в java-программе не представляет сложности. Они хранятся в виде строки в массиве строк, переданном в main().
Пример
Программа ниже отображает все вызванные аргументы командной строки.
public class CommandLine < public static void main(String args[]) < for(int i = 0; i < args.length; i++) < System.out.println("args[" + i + "]: " + args[i]); >> >
Попробуйте выполнить данную программу, как показано далее:
$java CommandLine это командная строка 300 -200
В итоге будет получен следующий результат:
args[0]: это args[1]: командная args[2]: строка args[3]: 300 args[4]: -200
Конструктор в Java
В Java конструктор инициализирует объект при его создании. Его имя аналогично имени класса, а синтаксис сходен с синтаксисом метода. Однако, в отличие от последнего, в конструкторе отсутствует возвращаемое значение.
Как правило, конструктор в Java может использоваться для присвоения исходного значения переменных экземпляра, определяемых классом, либо для выполнения каких-либо иных процедур запуска, необходимых для создания полностью сформированного объекта.
Конструкторы присутствуют во всех классах, независимо от их указания, в виду того, что Java автоматически предоставляет конструктор по умолчанию, который инициализирует все переменные членов класса до нуля. Вместе с этим, после того как вы определите собственный конструктор, конструктор по умолчанию больше не будет задействован.
Пример
В примере ниже рассмотрено использование конструктора класса без параметров.
// Простой конструктор. class MyClass < int x; // Далее следует конструктор MyClass() < x = 10; >>
Для инициализации объектов вам необходимо выполнить вызов конструктора согласно следующему примеру.
public class ConsDemo < public static void main(String args[]) < MyClass t1 = new MyClass(); MyClass t2 = new MyClass(); System.out.println(t1.x + " " + t2.x); >>
10 10
Параметризованный конструктор
Чаще всего вам может понадобиться конструктор, который принимает один и более параметров. Добавление параметров к конструктору аналогично их добавлению в метод, следует только внести их в круглые скобки после имени конструктора.
Пример
Далее рассмотрен простой пример использования конструктора с параметром.
// Простой конструктор. class MyClass < int x; // Ниже конструктор MyClass(int i) < x = i; >>
С целью инициализации объектов вам понадобится вызвать конструктор согласно следующему примеру.
public class ConsDemo < public static void main(String args[]) < MyClass t1 = new MyClass( 10 ); MyClass t2 = new MyClass( 20 ); System.out.println(t1.x + " " + t2.x); >>
Получим следующий результат:
10 20
Ключевое слово this
Ключевое слово this – используется для ссылки на текущий класс с учетом метода или конструктора экземпляра. Используя this в Java, Вы можете ссылаться на экземпляры класса, такие как конструкторы, переменные и методы.
Примечание: ключевое слово this используется только в составе методов либо конструкторов экземпляра.

Как правило, ключевое слово this в Java используется для:
- дифференцирования между переменными экземпляра и локальными переменными в случае, если у них одинаковые имена, в составе конструктора или метода.
class Student < int age; Student(int age) < this.age = age; >>
- вызова конструктора одного типа (параметризованного конструктора либо конструктора по умолчанию) из другого в составе класса. Данный процесс также носит название явного вызова конструктора.
class Student < int age Student() < this(20); >Student(int age) < this.age = age; >>
Пример
Далее представлен пример, в котором ключевое слово this используется для доступа к экземплярам класса. Необходимо копировать и вставить данную программу в файл с названием This_Example.java.
public class This_Example < // Инициализация переменной num int num = 11; This_Example() < System.out.println("Это пример программы с ключевым словом this"); >This_Example(int num) < // Вызов конструктора по умолчанию this(); // Присвоение локальной переменной num переменной экземпляра num this.num = num; >public void greet() < System.out.println("Привет! Добро пожаловать на ProgLang!"); >public void print() < // Локальная переменная num int num = 20; // Вызов метода класса greet this.greet(); // Вывод локальной переменной. System.out.println("Значение локальной переменной num: " + num); // Вывод переменной экземпляра. System.out.println("Значение переменной экземпляра num: " + this.num); >public static void main(String[] args) < // Инициализация класса This_Example obj1 = new This_Example(); // Вызов метода print obj1.print(); // Передача нового значения переменной num через параметризованный конструктор This_Example obj2 = new This_Example(30); // Вызов снова метода print obj2.print(); >>
В итоге будет получен следующий результат:
Это пример программы с ключевым словом this Привет! Добро пожаловать на ProgLang! Значение локальной переменной num: 22 Значение переменной экземпляра num: 11 Это пример программы с ключевым словом this Привет! Добро пожаловать на ProgLang! Значение локальной переменной num: 22 Значение переменной экземпляра num: 30
Аргументы переменной (var-args)
JDK 1.5 и выше позволяет передавать методу переменное количество аргументов одного типа. Параметр в методе объявляется следующим образом:
typeName. parameterName
При объявлении метода Вы указываете тип, за которым следует многоточие (. ). В методе может быть указан только один параметр переменной длины, и этот параметр должен быть последним параметром. Любые регулярные параметры должны предшествовать ему.
Пример
public class VarargsDemo < public static void main(String args[]) < // Вызов метода с переменной args printMax(27, 11, 11, 5, 77.1); printMax(new double[]); > public static void printMax(double. numbers) < if (numbers.length == 0) < System.out.println("Ни один аргумент не передается"); return; >double result = numbers[0]; for (int i = 1; i < numbers.length; i++) if (numbers[i] >result) result = numbers[i]; System.out.println("Максимальное значение " + result); > >
В итоге будет получен следующий результат:
Максимальное значение 77.1 Максимальное значение 77.0
Метод finalize()
Метод finalize() – метод, который будет вызываться непосредственно перед окончательным уничтожением объекта сборщиком мусора. (финализатором). В Java finalize() может быть использован для обеспечения чистого завершения объекта.
К примеру, мы можете использовать finalize() чтобы удостовериться в том, что открытый файл, принадлежащий данному объекту, был закрыт.
Для добавления финализатора в класс, вам просто следует определить метод finalize() в Java. Среда выполнения Java производит вызов данного метода непосредственно перед обработкой объекта данного класса.
В составе метода finalize(), вы указываете те действия, которые должны быть выполнены перед уничтожением объекта.
В общем виде метод finalize() выглядит следующим образом:
protected void finalize() < // здесь финализация кода >
Здесь ключевое слово protected представляет спецификатор, предотвращающий доступ к finalize() посредством кода, определяемого вне его класса.
Это свидетельствует о том, что вы не можете знать как или даже когда будет производиться выполнение finalize(). К примеру, если ваша программа будет окончена до «сборки мусора», finalize() не будет выполняться.
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Что означает 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 золотой знак 3 3 серебряных знака 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, то ответ дан ранее.