<< Предыдущая Оглавление Следующая >>


7.13. Директива final

Все методы и переменные объектов могут быть замещены по умолчанию. Если же вы хотите объявить, что подклассы не имеют права замещать какие- либо переменные и методы вашего класса, вам нужно объявить их как final: final int FILE NEW = 1;

По общепринятому соглашению при выборе имен переменных типа final используются только символы верхнего регистра. Использование final-методов порой приводит к выигрышу в скорости выполнения кода — поскольку они не могут быть замещены, транслятору ничто не мешает заменять их вызовы встроенным (in-line) кодом (байт-код копируется непосредственно в код вызывающего метода).

7.14. Деструкторы

В Java существует возможность объявлять методы с именем finalize. Методы finalize - это деструкторы - методы, которые уничтожают объект. Исполняющая среда Java будет вызывать его каждый раз, когда сборщик мусора соберется уничтожить объект этого класса.

7.15. Статические методы

Иногда требуется создать метод, который можно было бы использовать вне контекста какого-либо объекта его класса. Так же, как в случае main, все, что требуется для создания такого метода — указать при его объявлении модификатор типа static. Статические методы могут непосредственно обращаться только к другим статическим методам, в них ни в каком виде не допускается использование ссылок this и super. Переменные также могут иметь тип static, они подобны глобальным переменным, то есть доступны из любого места кода. Внутри статических методов недопустимы ссылки на переменные представителей. Ниже приведен пример класса, у которого есть статические переменные, статический метод и статический блок инициализации.

class Static {
static int а = 3;
static int  b;
static void method(int x) {
System.out.println("x =” + x);
System.out.println("a =” + a);
System.out.println("b = " + b);
}
static {
System.out.println("Статический блок инициализации");
b = а * 4;
}
public static void main(String args[]) {
method(42);
}
}

Результат запуска этой программы:

х = 42
а = 3
b = 12

В следующем примере мы создали класс со статическим методом и несколькими статическими переменными. Второй класс может вызывать статический метод по имени и ссылаться на статические переменные непосредственно через имя класса.

class StaticClass {
static int a = 42;
static int b = 99;
static void callme() {
System.out.println("a =” + a);
}
}

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

А вот и результат запуска этой программы:

а = 42
b = 99

 



<< Предыдущая Оглавление Следующая >>