Java Q&A



         

Статические классы


Перевод на русский © , 2000

Java Q&A

Можно ли объявить внутренний или обычный класс как статический (static)?

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

Обычные классы Вы объявляете обычный класс на уровне члена пакета (package). Каждый обычный класс соответствует своему собственному файлу java, использующему тоже имя, что и класс.

Обычный класс по-определению уже находится снаружи, поэтому нет смысла объявлять его статическим; это ошибка. Компилятор определит ее и сообщит вам.

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

1. Анонимный. Анонимный класс объявляется и создается внутри одного и того же выражения. У них нет имен и они могут быть созданы только один раз.

Вот пример анонимного класса:

okButton.addActionListener( new ActionListener(){ public void actionPerformed (ActionEvent e){ dispose(); } });

Так как анонимный класс не содержит нормального заголовка класса, где можно использовать static, он не может быть объявлен, как статический.

2. Локальный. Локальные классы точно такие-же, как и локальные переменные, в том смысле, что они создаются и используются внутри блока кода. Как только класс внутри блока объявлен, он может быть создан сколько угодно раз внутри этого блока. Как и локальные переменные, локальные классы не могут быть объявлены как public, protected, private или static.

Вот пример кода:

//some code block .......{ class ListListener implements ItemListener { List list; public ListListener(List l) { list = l; }

public void itemStateChanged(ItemEvent e) { String s = l.getItemSelected(); doSomething(s); } } List list1 = new List(); list list2 = new List(); list1.addItemListener( new ListListener(list1)); list2.addItemListener( new ListListener(list2)); }




Содержание    Вперед