Для объявления переменной используется следующее выражение:
[модификаторы] тип имя_переменной;
В данном случае тип — это либо один из простых типов (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, которая указывает на суперкласс данного класса и может быть использована для вызова любых методов суперкласса.