2013-03-16 5 views
11

Я видел, что класс был объявлен как static в java, но confused:
Поскольку класс используется для создания объектов, а разные объекты имеют разные распределения памяти.
Тогда что такое "static", который используется при объявлении класса? Означает ли это, что member variables - все static?
Имеет ли это смысл?Почему класс объявлен как статический в Java?

+1

См. [Этот ответ] (http://stackoverflow.com/a/3584151/545637). – Apalala

ответ

21

Во-первых, вы не можете сделать статический класс высшего уровня. вы можете сделать только статический класс вложенного класса. Создавая вложенный класс static, вы в основном говорите, что вам не нужен экземпляр вложенного класса для его использования из вашего внешнего класса/класса верхнего уровня.

Пример:

class Outer { 

static class nestedStaticClass { 

//its member variables and methods (don't nessarily need to be static) 
//but cannot access members of the enclosing class 
} 

public void OuterMethod(){ 
//can access members of nestedStaticClass w/o an instance 
} 
} 

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

Может ли класс быть вложенным в вложенный класс?

Одним словом, да. Посмотрите ниже Test, и вложенные внутренние классы, и вложенный статический класс могут иметь вложенные классы в em. Но помните, что вы можете объявить только статический класс внутри класса верхнего уровня, это запрещено объявлять внутри внутреннего класса.

public class Test { 
    public class Inner1 { 
     public class Inner2 { 
      public class Inner3 { 

      } 
     } 
    } 
    public static class nested1 { 
     public static class nested2 { 
      public static class nested3 { 

      } 
     } 
    } 
} 
+5

внутренний класс не статичен по определению. – assylias

+0

@assylias true .. :), отредактировано – PermGenError

+0

@ PermGenError, поэтому в лучшем случае есть два уровня. – Al2O3

5

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

Там какой-то хороший пример код в this answer

0

Он просто описывает связь этого класса с классом, содержащим.

Внутренние классы являются классами, определенными в рамках другого класса. Экземпляры внутренних классов привязаны к определенному экземпляру класса контейнера (экземпляр, в котором они были созданы).

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

Смежные вопросы