Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Java.doc
Скачиваний:
16
Добавлен:
07.09.2019
Размер:
569.34 Кб
Скачать

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

Методы и поля, описанные в объявлении класса, становятся доступными только при создании объекта этого класса. В то же время может быть необходимо в классе иметь доступными поля и методы, независимо от того, сколько объектов создано, или созданы ли объекты этого класса вообще. Либо требуется описать метод, не ассоциируемый с объектом определенного класса (аналог глобального метода). Достигается это использованием ключевого слова static по отношению к полям и методам. Это означает, они не привязаны к определенному экземпляру объекта класса. И статический метод может быть вызван, либо обеспечен доступ к статическому полю, даже если нет объектов данного класса. Статические методы, не требующие создания объекта до их использования, не могут получить прямой доступ к не статическим полям или методам простым обращением к ним без указания имени объекта, так как они не получают ссылки this.

Поле или метод класса является статическим, если при его определении перед ним указывается ключевое слово static:

class StaticDemo {

static int n1 = 1;

int n2;

static void metod1() { StaticDemo.n1++; }

void metod2() { n2++; }

}

В этом случае даже при создании нескольких объектов StaticDemo, все они будут иметь общее поле StaticDemo.n1.

StaticDemo obj1 = new StaticDemo();

StaticDemo obj2 = new StaticDemo();

При этом obj1.n1, и obj2.n1 имеют одно и то же значение 1, так как они ссылаются на одну и ту же область памяти.

Ссылаться на статические компоненты класса можно как через объект, так и прямо через имя класса(например, StaticDemo.n1), что невозможно с не статическими членами.

Добавление атрибута static к полю класса изменяет путь его создания (одни для всего класса против не статического: один для каждого объекта). Атрибут static примененный к методу класса позволит вызывать этот метод без создания объекта.

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

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

Спецификатор final (аналогично const в С++) используется для предотвращения изменения значения переменной с которой она объявлена.Например:

final int GOD = 2008;

final char SIMVOL = 'a';

объявленные т.о. переменные не могут быть изменены. Идентификаторы соответствующие им принято набирать заглавными буквами.

Вложенные и внутренние классы

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

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

Другой тип вложенного класса это внутренний нестатический класс. Этот класс находится полностью в области видимости включающего класса и может обращаться ко всем его компонентам. Приводимая ниже программа демонстрирует этот тип вложенности.

class Ext // внешний класс Ext

{

int a=4; // объявление и явная инициализация

public int b; // объявление и инициализация 0

void fun_Ext()

{ In ob= new In();

ob.fun_In();

System.out.println("vneshnyi class " + a+ b);

}

class In // вложенный класс In

{

int aa;

public int bb;

void fun_In()

{ System.out.println("vlogenyi class "+ a+ b);

}

}

}

public class start

{

public static void main(String[] args)

{ Ext ob=new Ext();

ob.fun_Ext();

}

}

Класс In известен только в пределах видимости класса Ext, следовательно попытка создать объект класса In, например, в функции main приведет к ошибке.

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

Вложенные классы наиболее полезны при обработке событий в апплетах.

Вложенные классы так же могут быть анонимными, не имеющими имен.