Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Ключевое слово static. Ключевое слово final. Массивы как классы




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

В некоторых случаях желательно определить член класса, который будет использоваться независимо от любого объекта этого класса. Обычно обращение к члену класса должно выполняться только в сочетании с объектом его класса. Однако можно создать член класса, который может использоваться самостоятельно, без ссылки на конкретный экземпляр. Чтобы создать такой член, в начало его объявления нужно поместить ключевое слово static. Когда член класса объявлен как static (статический), он доступен до создания каких-либо объектов его класса и без ссылки на какой-либо объект. Статическими могут быть объявлены как методы, так и переменные. Наиболее распространенный пример статического члена – метод main(). Этот метод объявляют как static, поскольку он должен быть объявлен до создания любых объектов.

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

На методы, объявленные как static, накладывается ряд ограничений.

· Они могут вызывать только другие статические методы.

· Они должны осуществлять доступ только к статическим переменным.

· Они ни коим образом не могут ссылаться на члены типа this или super. (Ключевое слово super связано с наследованием и описывается в следующей главе. )

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

// Демонстрация статических переменных, методов и блоков.

class UseStatic {

static int a = 3;

static int b;

static void meth(int x) {

System. out. println(" x = " + x);

System. out. println(" a = " + a);

System. out. println(" b = " + b);

}

static {

System. out. println(" Статический блок инициализирован. " );

b = a * 4;

}

public static void main(String args[]) {

meth(42);

}

}

Сразу после загрузки класса UseStatic программа выполняет все операторы static. Вначале значение a устанавливается равным 3, затем программа выполняет блок static, который выводит сообщение, а затем инициализирует переменную b значением a*4, или 12. Затем программа вызывает метод main(), который обращается к методу meth(), передавая параметру x значение 42. Три оператора println() ссылаются на две статических переменные a и b на локальную переменную x.

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

Статический блок инициализирован.

x = 42

a = 3

b = 12

За пределами класса, в котором они определены, статические методы и переменные могут использоваться независимо от какого-либо объекта. Для этого достаточно указать имя их класса, за которым должна следовать операция точки. Например, если метод типа static нужно вызвать извне его класса, это можно выполнить, используя следующую общую форму:

имя_класса. метод( )

Здесь имя_класса – имя класса, в котором объявлен метод тип static. Как видите, этот формат аналогичен применяемому для вызова нестатических методов через переменные объектных ссылок. Статическая переменная доступна аналогичным образом – посредством операции точки, следующей за именем класса. Так в Java реализованы управляемые версии глобальных методов и переменных.

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

Переменная может быть объявлена как final (окончательная). Это позволяет предотвратить изменение содержимого переменной. Это означает, что переменная типа final должна быть инициализирована во время ее объявления. Например:

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 и прочими так, как если бы они были константами, без риска изменения их значений.

В практике программирования на Java принято идентификаторы всех переменных типа final записывать прописными буквами. Переменные, объявленные как final, не занимают отдельную область памяти для каждого экземпляра – т. е., по сути, они являются константами.

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

Массивы как классы

Все массивы реализованы как объекты. В связи с этим существует специальный атрибут массива, который наверняка пригодится. В частности, размер массива – т. е. количество элементов, которые может содержать массив – хранится в его переменной экземпляра length. Все массивы обладают этой переменной, которая всегда будет содержать размер массива. Ниже приведен пример программы, которая демонстрирует это свойство.

// Эта программа демонстрирует член длины массива.

class Length {

public static void main(String args[]) {

int a1[] = new int[10];

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

int a3[] = {4, 3, 2, 1};

System. out. println(" длина a1 равна " + a1. length);

System. out. println(" длина a2 равна " + a2. length);

System. out. println(" длина a3 равна " + a3. length);

}

}

Эта программа генерирует следующий вывод:

длина a1 равна 10

длина a2 равна 8

длина a3 равна 4

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...