Главная » Java » This в Java

0

в разделе 2.5.1 этой главы (см. страницу 66) мы уже упоминали о том, каким образом можно обеспечить явный вызов одного конструктора из тела другого. Вы, вероятно, помните, что для этого мы В и меняли выражение this (), размещаемое в самом начале тела конструктора-инициатора. Кроме того, мы показали, как служебное слово this, выполняющее роль специальной объектной ссылки, следует использовать в теле нестатического метода для указания на текущий объект, которому этот метод "принадлежит". Для методов, объявленных как statiс, ссылки this не существует, поскольку они вызываются без указания конкретного экземпляра класса.

Ссылка this часто используется и в роли носителя информации о текущем объекте, передаваемого в качестве аргумента другим методам. Предположим, что в теле метода требуется добавить текущий объект в список объектов, ожидающих выполнения определенного сервиса. Подобная операция могла бы выглядеть так:

service.add(this);

В методе capture класса Body ссылка this позволяет задать для поля orbits объекта victiт  значение, указывающее на текущий объект.

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

name = bodyName;

в теле конструктора Body с двумя параметрами равноценна следующей:

this.name = bodyName;

В соответствии с устоявшейся традицией ссылку this указывают только в тех случаях, когда она действительно необходима – например, если наименование поля класса перекрывается в контексте метода именем локальной переменной или параметра. Таким образом, объявление упомянутого выше конструктора Body с двумя параметрами могло бы выглядеть и так:

public Body(String name, Body orbits) {

this();

this.name = name;

this.orbits = orbits ;

}

Поля класса Body в теле конструктора "перекрываются" одноименными параметрами. Чтобы, скажем, получить доступ к полю name (а не к параметру name!), мы обязаны предпослать идентификатору name префикс this., чтобы явно указать на то, что нас интересует именно поле. Подобное умышленное перекрытие одних идентификаторов другими можно считать вполне приемлемой практикой – правда, преимущественно при использовании в контексте конструкторов и методов set. Более подробные сведения, касающиеся проблемы разрешения коллизий имен, приведены в разделе 6.5 на странице 170.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии