Я читаю книгу о Java. Это просто добралось до объяснения, как Вы создаете класс, названный "декой", которая содержит массив карт как его переменная (переменные) экземпляра. Вот отрывок кода:
class Deck {
Card[] cards;
public Deck (int n) {
cards = new Card[n];
}
}
почему не this.
команда используется?
например, почему не код это:
class Deck {
Card[] cards;
public Deck (int n) {
this.cards = new Card[n];
}
}
this.
неявно.
В целом, рекомендуется (по крайней мере, я считаю его одним) использовать this
только тогда, когда это абсолютно необходимо. Если у вас есть локальная переменная с именем cards
и переменная-член с именем cards
, например, вам понадобится this.cards
для ссылки на переменную-член, поскольку карты
относятся к локальной переменной.
В таком случае это
- хорошая идея (хотя, возможно, лучше переименовать переменную-член).
Во всех остальных случаях, когда неявное this
может работать, используйте его.
Ссылка на объект this
подразумевается, но это может быть полезно для ясности (и необходимо для разотождествления между членом объекта и одноименной локальной переменной, как в конструкторе ниже):
public class Foo {
final private int x;
public Foo(int x) { this.x = x; }
public int getX() { return this.x; }
}
Это имело бы смысл, если бы у вас также был параметр с именем cards
. Тогда this.cards
будет указывать, что вы имеете в виду именно поле cards
класса, а не параметр.
Но в любом случае считается хорошей практикой использовать this.
в случаях, описанных в вашем примере.
Потому что нет двусмысленности. Есть только одна переменная карт
. this
потребовалось бы, если бы их было два, одна из которых была переменной экземпляра (часть класса, как сейчас), а другая - аргументом конструктора.
И, кстати, это
не «команда». Это «ключевое слово».
Нет необходимости уточнять весь доступ к участникам с помощью ключевого слова this
. Вам нужно использовать его только тогда, когда другая переменная скрывает метод члена.
И эта функция не ограничивается конструктором, но доступна во всех методах:
public class Test
{
private int member;
private int value;
public Test(int value) {
member = 5;
this.value = value; // required to differentiate from the parameter
}
public void f( int member ) {
int value = 5
this.member = value; // assign local 'value' (5) to member 'member'
this.value = member; // assign parameter 'member' to member 'value'
}
}
Это
подразумевается.
Давайте подробнее:
class Deck {
Card[] cards;
public Deck (Card[] cards) {
this.cards = cards;
}
}
В этом случае вы передаете массив карт, который имеет то же имя, что и массив карт объекта. Это
относится к члену данных вашего объекта, а не к параметру конструктора.
Когда вы используете идентификатор cards
в конструкторе, компилятор замечает, что поле (также известное как переменная-член) cards
, и использует его. this.cards
потребуется только для устранения неоднозначности, например, если у вас также есть локальная переменная или параметр с именем cards
.
Ключевое слово "this" в этом случае излишне. Карточки уже определены в области видимости класса, и составитель знает, что член является частью класса "this".
"this" подразумевается. Нет необходимости использовать "this". Я обычно ставлю его там, чтобы сделать код читабельным, но, опять же, это не обязательно.
Я пытаюсь выбирать имена переменных таким образом, чтобы не было ключевого слова this. То есть, если у меня есть свойство с именем «значение», я перейду к параметру с именем val.
Ключевое слово this можно использовать для перегрузки конструктора. Примите во внимание следующее (я буду использовать это., Чтобы продемонстрировать разницу):
public class Person
{
int age;
public Person(int age)
{
this.age=age;
}
public Person()
{
this(25); //default age
}
}
По возможности я стараюсь избегать одинаковых имен свойств и параметров, чтобы избежать того, что вы видите в строке 6. Однако использование ключевое слово this для вызова другого конструктора - хороший способ предотвратить дублирование кода. Это тривиальный пример, но когда вы начинаете обнаруживать себя с конструкторами, которые выполняют одну и ту же работу с небольшими различиями между ними, это оказывается весьма кстати.