Вопрос по methods, java, object, this – Может ли кто-нибудь подробно объяснить мне использование слова «это»?

1

Я действительно не понимаю, как использовать это. на Яве. Если бы кто-то мог помочь мне уточнить, я был бы очень признателен.

На этом сайте написано:http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

& quot; В методе экземпляра или конструкторе это ссылка на текущий объект & # x2014; объект, метод или конструктор которого вызывается. С помощью этого можно ссылаться на любой член текущего объекта из метода экземпляра или конструктора. & Quot;

и это дает следующий пример:

Например, класс Point был написан так

<code>public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}
</code>

но это можно было бы написать так:

<code>public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
</code>

Тем не менее, я до сих пор не до конца понимаю, почему x = a можно было записать так: x = x? Почему это не this.x = a? Почему х на левой стороне?

Извините, но я новичок в Java. Я прошу прощения за скучные эксперты.

Во втором примере параметры конструктора именуютсяx а такжеy неa а такжеbтак что не имеет смысла говоритьthis.x = a потому что нетa существует. В вашем первом примереthis.x = a а такжеthis.y = b вполне приемлемо.this используется как общий способ различения переменных с одинаковыми именами, как во втором примере, если вы только что сказалиx = x компилятор не сможет сказать, какойx был который Hunter McMillen

Ваш Ответ

9   ответов
0

Это ; является скрытым «аргументом» это передается вам так, что методы, которые работают с объектом, знают, с каким именно объектом они должны работать.

Теперь представьте, что вы передаете аргумент имени & quot; x & quot; но класс уже определил это имя переменной. Что просходит ? Ну, имя х, которое "принадлежит" объекту и аргументу x - это не один и тот же объект данных, но они имеют общее имя.

Чтобы устранить неоднозначность, необходимо явно сказать «this.x», который сообщает компилятору, что вы говорите о x, который уже принадлежит «this». объект. (То есть текущий объект, над которым вы пытаетесь работать.)

2

вы имеете в виду x field / свойство класса, частью которого является метод. Это может читаться как: Point.x = аргумент x

это используется для того, чтобы разграничить эти два, делая ясным смысл кода.

1

& Quot; это & Quot; является ссылкой на текущий объект, который вы используете. когда у вас есть конфликт имен между полем и параметром. Параметр имеет приоритет над полями.

Нет столкновения, нет необходимости в этом:

public Point(int a, int b) {
    x = a;
    y = b;
}

Но это тоже будет работать:

public Point(int a, int b) {
    this.x = a;
    this.y = b;
}

Столкновение имени, необходимо использовать & quot; это & quot ;:

public Point(int x, int y) {
    this.x = x;
    this.y = y;
}

Если бы вы только

public Point(int x, int y) {
    x = x;
    y = y;
}

тогда вы просто присваиваете параметры со своим собственным значением, которое фактически ничего не делает.

Существует более широкое использование ключевого слова "это".

Большое спасибо все прояснили Outlier
1

this является ссылкой на текущий объект, поэтому вы получаете к нему доступ как к любому другому объекту -this.x этоx собственностьюthis, Такx переданный аргумент, который вы назначаетеthis.x.

Это пространство имен - идея о том, что имя переменной применимо только внутри данного блока кода. В Java, где вы работаете в функции, принадлежащей классу, вы находитесь внутри пространства имен для этого класса, однако, если у вас есть другая переменная с тем же именем, что и аргумент, она будет иметь приоритет, и вы вместо этого получите доступ к атрибуту с помощьюthis.

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

window.draw(this)

Вы также можете вызвать функции

this позволяет нам ссылаться на объект, в котором мы на данный момент находимся «внутри», поэтому мы можем передать текущий объект в качестве аргумента. Это очень полезно. (Не каламбур предназначен).

0

как компилятор Java идентифицирует переменные по их имени. Имена параметров функций (формальных) предшествуют переменным членов класса. В первом примере формальными именами параметров являются a и b, и они не сталкиваются с переменными-членами x и y, поэтому

x = a;

логично, так как x может означать только переменную-член класса Point.

Во втором примере x относится как к имени формального параметра, так и к переменной-члену. Запись x в теле функции относится к параметру, поэтому, если вам нужен какой-то другой способ для ссылки на переменную-член x. Это делается путем явного доступа к члену через «этот»; ключевое слово.

1

very ясно, что вы предоставляете значения дляx а такжеyв вашем конструкторе.

Проблема заключается в том, что из-за правил области видимости в конструктореx относится к переданному значению, а не к полюx, следовательноx = x в результате параметру присваивается его собственное значение, а затененное поле остается неизменным. Обычно это не то, что нужно.

Следовательно, необходим механизм, чтобы сказать «мне нужно»another х, чем тот, который сразу виден здесь ". Вотthis относится к текущему объекту - такthis.x ссылается на поле в текущем объекте, иsuper ссылается на объект, который расширяет этот объект, так что вы можете попасть в поле "выше".

0

a а такжеb; они были изменены наx а такжеy, а такжеthis.x = x; означает "назначить переменную-член этого экземпляра класса Point"x значение передается конструктору какx& Quot ;.

3

что и у свойства объекта, она "перекрывается" имя этого свойства и следует использовать this.var_name.

Так что да, это можно записать какthis.x = a, но несколько избыточно.

Можете ли вы указать, почему использованиеthis ссылка? Заранее спасибо.
игнорировать мой предыдущий комментарий. :)
1

во втором примере. Дело в том, что вы можете использовать одно и то же имя переменной, что не так сложно: - |

спасибо, что я не смог увидеть. : D Outlier

Похожие вопросы