2013-03-16 19 views
11

Ich habe gesehen Klasse als static in java deklariert, aber verwirrt:
Da Klasse verwendet wird, um Objekte zu erstellen, und verschiedene Objekte haben unterschiedliche Speicherzuweisungen.
Dann was ist "static" für verwendet, wenn eine Klasse deklariert? Bedeutet es die member variables sind alle static?
Macht das Sinn?Warum wird die Klasse in Java als statisch deklariert?

+1

Siehe [diese Antwort] (http://stackoverflow.com/a/3584151/545637). – Apalala

Antwort

21

Erstens können Sie nicht Top-Level-Klasse statisch machen. Sie können eine verschachtelte Klasse nur statisch machen. Wenn Sie eine geschachtelte Klasse statisch machen, sagen Sie im Grunde, dass Sie keine Instanz der geschachtelten Klasse benötigen, um sie aus Ihrer äußeren Klasse/obersten Klassenklasse zu verwenden.

Beispiel:

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

auch hinzufügen, es ist illegal, statische Felder innerhalb einer inneren Klasse zu erklären, es sei denn, sie sind Konstanten (in anderen Worten, static final). Da eine statische geschachtelte Klasse keine innere Klasse ist, können Sie statische Member deklarieren.

Kann die Klasse in der geschachtelten Klasse verschachtelt werden?

In einem Wort, ja. Schauen Sie sich die folgenden Test an, sowohl verschachtelte innere Klassen als auch verschachtelte statische Klassen können geschachtelte Klassen in ihnen haben. Aber denken Sie daran, dass Sie nur eine statische Klasse innerhalb einer Top-Level-Klasse deklarieren können, es ist illegal, sie innerhalb einer inneren Klasse zu deklarieren.

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

Eine innere Klasse ist per Definition nicht statisch. – assylias

+0

@assylias true .. :), bearbeitet – PermGenError

+0

@ PermGenError, so gibt es höchstens zwei Ebenen. – Al2O3

5

Verschachtelte Klassen (eine Klasse innerhalb einer Klasse) sind die einzigen, die statisch deklariert werden können. Dies bedeutet, dass die Elternklasse nicht instanziiert werden muss, um auf die geschachtelte Klasse zuzugreifen.

Es gibt einige gute Beispiel-Code in this answer

0

Es beschreibt nur die Beziehung dieser Klasse mit der enthaltenden Klasse.

Die inneren Klassen sind Klassen, die im Rahmen einer anderen Klasse definiert sind. Instanzen innerer Klassen sind an eine bestimmte Instanz der Containerklasse (die Instanz, in der sie erstellt wurden) angehängt.

Statisch geschachtelte Klassen sind geschachtelte Klassen, sind jedoch statisch definiert. Wie statische Member haben sie keine Beziehung zu einer bestimmten Instanz; Sie gehören nur zur enthaltenden Klasse. In verschachtelten Klassen können Sie nicht auf nicht statische Member/Methoden der enthaltenden Klasse verweisen, da ihnen keine bestimmte Instanz zugeordnet ist.

Verwandte Themen