Переменные.

Лекция №3.

Для объявления переменной используется следующее выражение:

[модификаторы] тип имя_переменной;

В данном случае тип — это либо один из простых типов (int, char, Boolean и т. д.), либо имя класса.

Простые типы используются так же, как и в языке C. После объявления переменной в неё можно записывать различные значения, включать её в состав выражения и т. д.

На первый взгляд кажется, что имена классов одинаково используются в качест­ве типов переменных как в Java, так и в C. Однако сходство это чисто внешнее.

Предположим, что в программе на языке C определён класс с именем ClassC. При­ведённое ниже выражение создает экземпляр класса ClassC и размещает его в пере­менной с именем objC.

Посредством objC мы можем обращаться к переменным и функциям-членам клас­са ClassC.

Рассмотрим подобную ситуацию в программе на языке Java. Предположим, что в ней определён класс с именем ClassJava и что в тексте программы присутствует такое выражение

ClassJava objJava;

В отличие от языка C, эк­земпляр класса не создаётся. Данное выражение объявляет переменную, которая мо­жет хранить ссылку на экземпляр класса ClassJava.

В языке Java отсутствуют указатели. И это не случайно, ведь , Java-апплеты могут пе­ремещаться по глобальной сети, поэтому подобная программа должна быть лишена любой возможности непосредственно обращаться к ресурсам локального компьютера. При наличии указателей добиться выполнения запрета на доступ к ресурсам практи­чески невозможно, ведь указателю можно присвоить любое значение, а затем исполь­зовать его для обращения к произвольной области памяти.

С другой стороны, работать с объектами без указателей крайне сложно, поэтому в Java был реализован механизм ссылок. Упрощённо ссылку можно представить себе как указатель, который может указывать лишь на существующий объект определён­ного типа.

Для создания объекта и связывания с этим объектом переменной определенного типа служит оператор new. Вернёмся к рассмотренному выше примеру. После того как в программе определена переменная objJava типа ClassJava, мы можем включить в программу следующее выражение:

objJava = new ClassJava ();

Очевидно, что ClassJava () — это один из конструкторов данного класса. Он созда­ёт экземпляр класса ClassJava и возвращает ссылку на этот объект. Ссылка помещает­ся в переменную objJava.

После выполнения данной команды обращение к переменным и методам класса ClassJava производится так, как будто в переменной objJava содержится не ссылка, а экземпляр класса.

До сих пор не было сказано ни слова о модификаторах, которые могут указываться при объявлении переменных.

· Модификатор типа доступа определяет, из каких классов может производить­ся обращение к объявляемой переменной. Доступ к переменным и методам в Javaорганизован несколько сложнее, чем в языке C, поэтому на первых эта­пах изучения языка руководствуйтесь простым правилом: чтобы разрешить обращение к переменной из-за пределов пакета, которому принадлежит класс, следует указать в описании этой переменной модификатор public.

· Модификатор static превращает переменную экземпляра в переменную класса. Этот вид переменных хорошо знаком вам из языка C. В отличие от переменной экземпляра, переменная класса, или статическая переменная, с конкретным именем создаётся одна для всех объектов данного класса. Изменение значения этой переменной проявляется во всех экземплярах класса.

· Модификатор final сообщает, что значение переменной не может изменяться. Другими словами, переменная final представляет собой не переменную в обычном смысле этого слова, а именованную константу.

Разговор о переменных, используемых внутри класса, закончим упоминанием о двух переменных, имеющих специальное назначение.

Переменная this хорошо известна вам из языка C. Она ссылается па текущий эк­земпляр класса. Наряду с переменной this в Java определена переменная super, кото­рая указывает на суперкласс данного класса и может быть использована для вызова любых методов суперкласса.