Java Урок 22: КЛАСС, статические переменные класса

Иногда возникает необходимость определить элемент (член) класса так, чтобы появилась возможность пользоваться им независимо от какого-либо объекта этого класса.

Скачать исходники для статьи можно ниже

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

// Демонстрирует статические переменные и блоки.
class UseStatic {
    static int a = 3;
    static int b; 

    static {
        System.out.println("static");
        System.out.println("Статический блок инициализирован.");
        b = a * 4;
    }
}

Bсe static-инструкции выполняются сразу же после загрузки класса UseStatic. Сначала, в а устанавливается 3, затем выполняется static-блок (печатая сообщения), и наконец, b инициализируется значением а * 4 или 12.
Вне класса, в котором они определены, статические переменные могут использоваться независимо от любого объекта. В этом случае для обращения к ним используются имена их класса и точечная операция. Например, если нужно вызвать static-переменную вне его класса, можно воспользоваться следующей общей формой вызова:

classname.a

Здесь classname — имя класса, в котором объявлена static-переменная а, и а — имя статической переменной. Так Java реализует управляемую версию глобальных переменных.
Например:

class StaticDemo {
     static int b = 99; 
}

public class StaticByName {
    public static void main(String[] args) {
        System.out.println("b = " + StaticDemo.b);
    }
}

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

b = 99

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

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

public class FinaDemol {
    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- переменная — по существу константа.

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Добавить комментарий