Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Для чего нужны статические классы?


Автор: BezImeni 19.5.2006, 14:33
Если кто может привести пример попроще, для чего может понадобиться статический класс. Можно и без кода - на словах. smile  

Автор: batigoal 19.5.2006, 14:41
Статический класс или статические поля в классе? 

Автор: ALKS 19.5.2006, 15:02
или статические методы? smile

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

Автор: MisterCleric 19.5.2006, 15:06
Брюс Эккель:

static внутренние классы

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

   1. Вам не нужен объект внешнего класса для создания объекта static внутреннего класса.
   2. Вы не можете получить доступ к внешнему объекту из static внутреннего класса. 

Static внутренние классы отличаются от не-static внутренних классов. Поля и методы в не-static внутренних классах могут быть только на внешнем уровне класса, поэтому не-static внутренние классы не могут иметь static данные, static поля или static внутренние классы. Однако static внутренний класс не ограничен таким ограничением:

Код

public class Parcel10 {
  private static class PContents 
  implements Contents {
    private int i = 11;
    public int value() { return i; }
  }
  protected static class PDestination
      implements Destination {
    private String label;
    private PDestination(String whereTo) {
      label = whereTo;
    }
    public String readLabel() { return label; }
    // Static внутренний класс может содержать 
    // другие static элементы:
    public static void f() {}
    static int x = 10;
    static class AnotherLevel {
      public static void f() {}
      static int x = 10;
    }
  }
  public static Destination dest(String s) {
    return new PDestination(s);
  }
  public static Contents cont() {
    return new PContents();
  }
  public static void main(String[] args) {
    Contents c = cont();
    Destination d = dest("Tanzania");
  }
}
 

Автор: YuG 19.5.2006, 15:35
MisterCleric, человек не теорию спрашивал, а конкретный пример из практики.

BezImeni, первое, что пришло в голову: счетчик посещений smile
Второе, более сложное: есть несколько клиентов. они обрабатывают определенные данные.
задача стоит в том, чтоб два клиента не могли обрабатывать одни и те же данные.
Решение: создаем статический класс, который выдает данные клиентам для обработки 
и принимает обработанные клиентами данные (что-то типа очереди) 

Автор: MisterCleric 19.5.2006, 16:08
А, сорри. Ну вот пусть почитает, где используют:
http://lib.juga.ru/article/view/163
 

Автор: BezImeni 20.5.2006, 23:12
Спасибо!  То, что надо - и примеры и код! smile 



 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)