Logo Спонсор сайта — Хостинг Fornex.com Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
хостинг сайтов ГиперХост — хостинг сайтов который Вы искали.

Виртуальный хостинг, Аренда VPS серверов, рация доменных имен, SSL сертификаты

Тарифы от 59 руб в месяц за 512MB RAM и 5Gb NVMe SSD!

Hi-CPU тарифы с повышенной частотой процессора 3.8 – 4.2 GHz, автоматическая установка Windows

Дата-центры на выбор, защита от DDoS-атак

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

Лучший защищенный DDos хостинг в России. От 390 руб/м.

VPN, прокси без блокировок РКН в Москве (KVM: 2 core, 1GB RAM, 30GB SSD). От 349 руб/м.

Скидка 50% на первый месяц, для новых клиентов. Промокод ARGOTEL-NEW

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

Перевод на русский © Сергей Миссан, 2000
Оригинал статьи опубликован на сайте Javable.com

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));
}

3. Компонентный. Компонентный класс объявляется внутри тела класса. Вы можете использовать множество классов где-угодно внутри тела класса-контейнера. Вы должны объявить компонентный класс если вы хотите использовать переменные и методы класса-контейнера без необходимости делегирования.

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

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

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

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

Посмотрите на следующий пример:

public class Filter {
 Vector criteria = new Vector();
 public addCriterion(Criterion c) {
 criteria.addElement(c);
}
 public boolean isTrue(Record rec) {
  for(Enumeration e=criteria.elements();
  e.hasMoreElements();) {
   if(!
     ((Criterion)e.nextElement()).isTrue(rec))
   return false;
  }
 return true;
}

public static class Criterion {
 String colName, colValue;
 public Criterion(Stirng name, String val) {
  colName = name; colValue = val;
 }
 public boolean isTrue(Record rec) {
  String data = rec.getData(colName);
  if(data.equals(colValue)) return true;
  return false;
 }
}
}

И когда вы хотите его использовать:

Filter f = new Filter();
f.addCriterion(new
  Filter.Criterion("SYMBOL", "SUNW"));
f.addCriterion(new
  Filter.Criterion("SIDE", "BUY"));
.....
if(f.isTrue(someRec))
 //do some thing .....

Одно важное замечание: ключевое слово static не делает с заголовком класса тоже, что с заголовком пременной или метода.

Об авторе

Random Walk Computing это наибольшая консалтинговая фирма в Нью Йорке, специализирующаяся на Java/CORBA решениях для предприятий. Известные своим выдающимся знанием Java, консультанты Random Walk публикуются и выступают на самых престижных форумах мира. Для связи с Random Walk используйте javaqa@javaworld.com.

Reprinted with permission from the March 2000 edition of JavaWorld magazine.
Copyright © ITworld.com, Inc., an IDG Communications company.
View the original article at: http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html

Назад | Содержание | Вперед

 

Надежный хостинг сайтов и VPS на SSD с 2001 года.

Все включено: бесплатный конструктор сайтов, домены и SSL.

Супер партнерская программа. Заработай на хостинге!

Новости мира IT:

Архив новостей

Последние комментарии:

Будущее BI в облаках? (11)
Понедельник 08.04, 22:24
Интервью с Дональдом Кнутом (36)
Понедельник 08.04, 22:23
Гимн героям Microsoft (185)
Понедельник 08.04, 22:14

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 985 1945361
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...