Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Ключевое слово this






 

Ключевое слово this является стандартной ссылкой на объект, из которого вы­зывается метод. При этом следует учесть, что в Java ссылка на объект фактиче­ски является именем этого объекта. Хотя наличие такой ссылки может на первый взгляд показаться излишним, она достаточно часто используется на практике. Условно можно выделить два типа ситуаций, когда может потребоваться ссылка this: если она реально необходима и если благодаря ей улучшается читабель­ность программного кода. Примеры первого типа приводятся в последующих главах книги — для их понимания необходимо сначала познакомиться с особен­ностями выполнения ссылок на объекты, способами передачи аргументов мето­дам и механизмом возвращения методом объекта в качестве результата. Здесь же мы приведем примеры использования ключевого слова this в «косметических» целях.

В рассматривавшихся ранее примерах ссылки на члены класса в теле методов этого же класса выполнялись простым указанием имени соответствующего члена. Если для класса создается объект и из этого объекта вызывается метод, то об­ращение к члену класса в программном коде метода означает обращение к со­ответствующему члену объекта. В то же время обращение к полям и методам объекта выполняется в «точечном» синтаксисе, то есть указывается имя объек­та, точка и затем имя поля или метода. Для упомянутой ситуации это означает, что в методе объекта выполняется обращение к члену того же объекта. Этот замечательный факт можно отразить в программном коде метода в явном виде с помощью ссылки this. Пример приведен в листинге 4.5.

Листинг 4.5. Использование ссылки this

class MyClass{

// Поля класса:

double Re, Im;

void set(double Re, double Im){

// Использование ссылки this:

this.Re=Re;

this.Im=Im; }

void get(){

// Инструкция перехода на новую строку \n:

System.out.println(" Значения полей: \nRe=" +this.Re+" и Im=" +this.Im); }

}

class ThisDemo{

public static void main(String[] args){

MyClass obj=new MyClass();

obj.set(1, 5);

obj.get(); }

}

В данном случае класс MyClass содержит всего два поля Re и Im типа double. Кста­ти, обращаем внимание, что оба поля объявлены одной инструкцией, в которой указан тип полей, а сами поля перечислены через запятую. Данный класс яв­ляется очень слабой аналогией реализации комплексных чисел, у которых есть действительная (поле Re) и мнимая (поле Im) части.

Кроме двух полей, у класса имеется два метода: метод set() для присваивания значений полям и метод get() для отображения значений полей. У метода set() два аргумента типа double, причем их названия совпадают с названиями полей класса. Разумеется, в таком экстремизме необходимости нет, вполне можно было предложить иные названия для аргументов, но мы не ищем простых пу­тей, поэтому сложившаяся ситуация далеко не однозначна. Если в теле мето­да set() использовать обращение Re или Im, то это будет ссылка на аргумент метода, а не на поле класса, поскольку в случае совпадения имен переменных приоритет имеет локальная переменная (то есть объявленная в блоке, в кото­ром находится инструкция вызова переменных с совпадающими именами). Из ситуации выходим, воспользовавшись ссылкой this. Так, инструкции this.Re и this.Im означают поле Re и поле Im соответственно объекта this, то есть того объекта, из которого вызывается метод set(). При этом инструкции Re и Im яв­ляются обращениями к аргументам метода. Поэтому, например, команду this. Re=Re следует понимать так: полю Re объекта this (объекта, из которого вызыва­ется метод set()) присвоить значение аргумента Re, то есть первого аргумента, переданного методу set() при вызове. Хотя описанная ситуация вполне оправ­дывает использование ссылки this, все же такой прием считается несколько ис­кусственным, поскольку в запасе всегда остается возможность просто поменять названия аргументов.

Совсем неоправданным представляется использование ссылки this в программ­ном коде метода get(), который выводит сообщение со значениями полей объекта. В данном случае инструкции вида this.Re и this.Im можно заменить простыми обращениями Re и Im соответственно — функциональность кода не изменится. У метода аргументов нет вообще, поэтому никаких неоднозначно­стей не возникает. По большому счету, обращение к полю класса (или методу) по имени является упрощенной формой ссылки this (без применения самого ключевого слова this). Этой особенностью синтаксиса языка Java мы пользо­вались ранее и будем пользоваться в дальнейшем. Тем не менее в некоторых случаях указание ссылки this даже в «косметических» целях представляется оправданным.

Обращаем внимание на инструкцию перехода на новую строку \n в тексто­вом аргументе метода println() в теле метода get(). Эта инструкция вклю­чена непосредственно в текст и ее наличие приводит к тому, что в месте размещения инструкции при выводе текста выполняется переход на новую строку. Поэтому в результате выполнения программы получим сообщение из двух строк:

Значения полей:

Re=1.0 и Im=5.0

Как уже отмечалось, это далеко не единственный способ использования ин­струкции this. Далее в книге есть и другие примеры.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.