2013-03-16 10 views
11

Widziałem, że klasa została zadeklarowana jako static w java, ale jest zdezorientowana:
Ponieważ klasa służy do tworzenia obiektów, a różne obiekty mają różne przydziały pamięci.
To, co jest "static" używane podczas deklarowania klasy? Czy to oznacza, że ​​member variables są wszystkie static?
Czy to ma sens?Dlaczego klasa jest zadeklarowana jako statyczna w Javie?

+1

Zobacz [tę odpowiedź] (http://stackoverflow.com/a/3584151/545637). – Apalala

Odpowiedz

21

Po pierwsze nie można utworzyć statycznego poziomu najwyższego poziomu. możesz zagnieździć tylko klasę zagnieżdżoną. Tworząc zagnieżdżoną klasę statyczną, zasadniczo mówisz, że nie potrzebujesz instancji klasy zagnieżdżonej, aby użyć jej z zewnętrznej klasy/najwyższego poziomu klasy.

przykład:

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

także dodać, jest nielegalne zadeklarować pola statycznego wewnątrz wewnętrznej grupy, o ile nie są stałe (innymi słowy, static final). Ponieważ statyczna klasa zagnieżdżona nie jest klasą wewnętrzną, możesz deklarować statyczne elementy tutaj.

Czy klasa może być zagnieżdżona w klasie zagnieżdżonej?

Jednym słowem, tak. Spójrz na poniższe: Test, obie zagnieżdżone klasy wewnętrzne i zagnieżdżone klasy statyczne mogą mieć klasy zagnieżdżone w 'em. Ale pamiętaj, że możesz zadeklarować tylko klasę statyczną w klasie najwyższego poziomu, nie można jej deklarować wewnątrz klasy wewnętrznej.

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

Wewnętrzna klasa nie jest statyczna z definicji. – assylias

+0

@assylias true .. :), edytowane – PermGenError

+0

@ PermGenError, więc najwyżej są dwa poziomy. – Al2O3

5

Zagnieżdżone klasy (klasa w klasie) są jedynymi, które można zadeklarować statycznie. W ten sposób klasa nadrzędna nie musi być instancjonowana, aby uzyskać dostęp do zagnieżdżonej klasy.

Jest jakiś dobry przykład kodu w this answer

0

To po prostu opisuje relację z tej klasy zawierającej klasy.

Klasy wewnętrzne to klasy zdefiniowane w ramach innej klasy. Wystąpienia klas wewnętrznych są dołączane do określonej instancji klasy kontenera (instancji, w której zostały utworzone).

Statyczne klasy zagnieżdżone są klasami zagnieżdżonymi, ale są zdefiniowane jako statyczne. Podobnie jak statyczni członkowie nie mają związku z konkretną instancją; po prostu należą do klasy zawierającej. W klasach zagnieżdżonych nie można odwoływać się do niestatycznych elementów/metod klasy zawierającej, ponieważ nie ma z nimi żadnej konkretnej instancji.

Powiązane problemy