Я знаю, что this относится к текущему объекту. Но я не знаю, когда мне действительно нужно это использовать. Например, будет ли какая-либо разница, если я использую x вместо this.x в некоторых методах? Может быть, x будет ссылаться на переменную, которая является локальной для рассматриваемого метода? Я имею в виду переменную, которая видна только в этом методе.
Как насчет this.method()? Могу ли я это использовать? Должен ли я это использовать. Если я просто использую method(), не будет ли это по умолчанию применено к текущему объекту?
Переведено автоматически
Ответ 1
Ключевое слово this в основном используется в трех ситуациях. Первая и наиболее распространенная - в методах setter для устранения неоднозначности ссылок на переменные. Второй - когда необходимо передать текущий экземпляр класса в качестве аргумента методу другого объекта. Третий - как способ вызова альтернативных конструкторов изнутри конструктора.
Случай 1: Использование this для устранения неоднозначности ссылок на переменные. В методах установки Java мы обычно передаем аргумент с тем же именем, что и закрытая переменная-член, которую мы пытаемся установить. Затем мы присваиваем аргумент xthis.x. Это дает понять, что вы присваиваете значение параметра "name" переменной экземпляра "name".
Пример 3: Использование this для вызова альтернативных конструкторов. В комментариях trinithis правильно указал на другое распространенное использование this. Когда у вас есть несколько конструкторов для одного класса, вы можете использовать this(arg0, arg1, ...) для вызова другого конструктора по вашему выбору, при условии, что вы делаете это в первой строке вашего конструктора.
classFoo { publicFoo() { this("Some default value for bar");
//optional other lines }
publicFoo(String bar) { // Do something with bar } }
Я также видел, что this используется, чтобы подчеркнуть тот факт, что на переменную экземпляра ссылаются (без необходимости устранения неоднозначности), но, на мой взгляд, это редкий случай.
Ответ 2
Второе важное использование this (помимо скрытия с помощью локальной переменной, как уже сказано во многих ответах) - это доступ к внешнему экземпляру из вложенного нестатического класса:
publicclassOuter { protectedint a;
publicclassInner { protectedint a;
publicintfoo(){ return Outer.this.a; }
public Outer getOuter(){ return Outer.this; } } }
Ответ 3
Вам нужно использовать только this - и большинство людей используют это только тогда, - когда есть перекрывающаяся локальная переменная с тем же именем. (Например, методы Setter.)
Конечно, еще одна веская причина для использования this заключается в том, что это приводит к появлению intellisense в IDE :)
Ответ 4
Единственная необходимость использовать this. квалификатор - это когда другая переменная в текущей области видимости имеет то же имя, и вы хотите сослаться на элемент экземпляра (как описывает Уильям). Кроме этого, нет никакой разницы в поведении между x и this.x.