Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 7. Методы и классы ' 179

class StaticByName {

public static void main(String args[]) { StaticDemo.callme();

System.out.println("b = " + StaticDemo,b); } }

Здесь внутри метода main() к статическому методу callme о и статической переменной ь обращаются вне их класса.

Вывод этой программы:

а = 42 b = 99

Спецификатор final

Переменную можно объявить как final, предохраняя ее содержимое от из­менения. Это означает, что нужно инициализировать final-переменную, когда она объявляется (в таком применении final подобен const в C/C++). Например:

final int FILE_NEW = 1;

final int. FILE_OPEN = 2;

final int FILE_SAVE = 3;

final int FILE_SAVEAS = 4.;

final int FILE_QUIT = 5;

После таких объявлений последующие части программы могут использовать file_open и т. д., как константы, без опасения, что их значения были изме­нены.

Общее соглашение кодирования для final-переменных — выбирать все идентификаторы в верхнем регистре. Переменные, объявленные как final, не занимают память на "поэкземплярной" основе. Таким образом, final-переменная — по существу константа.

Ключевое слово final может также применяться и с методами, но его на­значение в этом случае существенно отличается от применяемого в пере­менных. Это второе использование final демонстрируется в следующей гла­ве, где описано наследование.

Ревизия массивов

Массивы были представлены в этой книге раньше, чем были рассмотрены классы. Теперь, когда известны классы, для массивов можно сделать одно важное обобщение: их можно реализовать в форме объектов. В связи с этим

180 Часть I. Язык Java

имеется специальный атрибут массива, преимуществом которого вы, веро­ятно, захотите воспользоваться. Речь идет об экземплярной переменной length, которая определяет размер (длину) массива, т. е. число элементов, содержащихся в нем. Все массивы-объекты имеют эту переменную, и она всегда содержит размер массива. Следующая программа демонстрирует ука­занное свойство:

// Эта программа демонстрирует элемент длины массива, class Length {

public static void main(String args [ ]) {

int all] = new int[10];

int a2f] = {3, 5, 7, 1, 8, 99, 44, -10};

int аЗП = {4, 3, 2, 1} ;

System.out.println("Размер al равен " + al.length); System.out.println("Размер а2 равен " + a2.length); System.out.println("Размер аЗ равен " + аЗ.length); } }

Эта программа отображает (на экран) следующий вывод:

Размер al равен 10 Размер а2 равен 8 Размер аЗ равен 4

Здесь видно, что отображается размер каждого массива. Имейте в виду, что значение length не имеет никакого отношения к числу элементов, которые фактически используются. Она отражает только число элементов, на кото­рое массив рассчитан.

Вы можете использовать элемент length во многих ситуациях. Например, ниже показана улучшенная версия класса stack. Более ранние версии этого класса всегда создавали стек с десятью элементами. Следующая версия по­зволяет создавать стеки любого размера. Чтобы предотвратить переполнение стека, используется значение stckLength.

// Улучшенный Stack-класс, который использует length-элемент массива, class Stack {

private int stckf];

private int tos;

// выделить память и инициализировать стек Stack(int size) {

stck = new int[size];

tos = -1; }

Соседние файлы в папке JavaLit