Статические элементы
Иногда возникает необходимость определить элемент (член) класса так,
чтобы появилась возможность пользоваться им независимо от какого-либо
объекта этого класса. Обычно к элементам класса нужно обращаться только
через объект этого класса. Однако можно создать элемент для
использования без ссылки на определенный объект. Чтобы это сделать,
укажите в начале его объявления ключевое слово static. Когда элемент
объявляется как static, к нему можно обращаться до того, как создаются
какие-либо объекты его класса, и без ссылки на какой-либо объект.
Статическими можно объявлять как методы, так и переменные. Наиболее
общим примером static-элемента является метод main(). Он объявляется как static, потому что должен вызваться прежде, чем будут созданы какие-либо объекты. Переменные экземпляра, объявленные как static,
это, по существу, глобальные переменные. Когда создаются объекты их
класса, никакой копии static-переменной не делается. Вместо этого, все
экземпляры класса совместно используют (разделяют) одну и ту же
static-переменную. Методы, объявленные-как static имеют несколько ограничений: могут вызывать только другие static-методы; должны обращаться только к static-данным; никогда не могут ссылаться на this или super. (Ключевое слово super касается наследования)
Для организации вычислений с целью инициализировать статические
переменные можно объявить статический блок, который выполняется только
один раз, когда класс впервые загружается. Следующий пример
демонстрирует класс, который имеет статические методы, несколько
переменных и блок инициализации:
static { System.out.println("static"); System.out.println("Статический блок инициализирован."); b = a * 4; }
public static voidmain(String[] args) { System.out.println("main"); meth(42); } }
Bсe static-инструкции выполняются сразу же после загрузки класса UseStatic.
Сначала, в а устанавливается 3, затем выполняется static-блок (печатая
сообщения), и наконец, b инициализируется значением а * 4 или 12. Затем
вызывается метод main о, который обращается к metho, передавая 42
параметру х. Три оператора println о обращаются к двум
static-переменным (а и b) и к локальной переменной x.
Вывод этой программы: static Статический блок инициализирован. main meth x = 42 a = 3 b = 12
Вне класса, в котором они определены, статические методы и переменные
могут использоваться независимо от любого объекта. В этом случае для
обращения к ним используются имена их класса и точечная операция.
Например, если нужно вызвать static-метод вне его класса, можно
воспользоваться следующей общей формой вызова:
classname.methodname()
Здесь classname — имя класса, в котором объявлен static-метод; methodname
— имя статического метода. Нетрудно заметить, что этот формат подобен
вызову нестатических методов через переменные, ссылающиеся на объект. К
переменной static можно обращаться таким же образом — при помощи
точечной операции с именем класса (в качестве левого операнда). Так
Java реализует управляемую версию глобальных функций и глобальных
переменных.
public classStaticByName { public static voidmain(String[] args) { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b); } }
Здесь внутри метода main() к статическому методу callme() и статической переменной b обращаются вне их класса.
Вывод этой программы:
a = 42 b = 99
Спецификаторfinal Переменную можно объявить как final,
предохраняя ее содержимое от изменения. Это означает, что нужно
инициализировать final-переменную, когда она объявляется. Например:
public classFinaDemol { public static void main(String[] args) { 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_NEW = 8; // Выдает сообщение о невозможности назначить переменной значение } }
После таких объявлений последующие части программы могут
использовать FILE_NEW и т. д., как константы, без опасения, что их
значения были изменены. Общее соглашение кодирования для
final-переменных — выбирать все идентификаторы в верхнем регистре.
Переменные, объявленные как final, не занимают память на "поэкземплярной" основе. Таким образом, final- переменная — по существу константа. Ключевое слово final может также применяться и с методами, но его назначение в этом случае существенно отличается от применяемого в переменных. Применение final в методах связаны с наследованием (для отказа от переопределения и для отмены наследования)
Да господин Шилд, это Ваше. Не претендую на Ваши труды. Спасибо что нашли мой сайт на просторах сети. Как только у меня будет пара часов свободного времени, на всех страницах укажу ссылку на Вас.