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?
Antwort
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 {
}
}
}
}
Eine innere Klasse ist per Definition nicht statisch. – assylias
@assylias true .. :), bearbeitet – PermGenError
@ PermGenError, so gibt es höchstens zwei Ebenen. – Al2O3
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
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.
- 1. Warum wird die Klasse java.util.Scanner als 'final' deklariert?
- 2. Warum kann Konstruktor in C++ nicht als statisch deklariert werden?
- 3. Warum ist die Random-Klasse nicht statisch?
- 4. Warum WebMethod als Static deklariert?
- 5. C- Verknüpfung von Funktionen, die als statisch deklariert wurden
- 6. Warum argv [] als const deklariert wird?
- 7. Warum wird Reads nicht als kovariant deklariert?
- 8. Warum kann ich eine PHP-Funktion in einer Klasse statisch aufrufen, ohne dass die Methode als statisches Schlüsselwort deklariert wurde?
- 9. Kann eine Klasse in Java als statisch instanziiert werden?
- 10. Warum deklariert ein Array als Objekt in Java korrekt?
- 11. Unter Verwendung von Generics wird es als Button deklariert, wird aber als internes Steuerelement für die Klasse behandelt. Warum?
- 12. Warum sind Abhängigkeitseigenschaften "statisch"?
- 13. Java: Alles in einer Klasse ist statisch - ist das vernünftig?
- 14. Warum wird in .NET der Rückgabetyp void als Struktur deklariert?
- 15. Erweiterungsmethoden erfordern die Deklaration der Klasse als statisch
- 16. Java: Instanz wirklich besser als statisch?
- 17. Warum Callback-Funktionen statisch sein müssen, wenn in Klasse
- 18. Warum std :: map find() wird nicht als noexcept deklariert?
- 19. Warum wird die HttpUtility-Klasse nicht erkannt?
- 20. Java: Warum sind Thread.sleep() und yield() statisch?
- 21. Warum wird dieses Feld als privat und auch schreibgeschützt deklariert?
- 22. Können Ereignisse als statisch deklariert werden, wenn ja wie und warum
- 23. Warum sollte Java Thread Variablen statisch seine
- 24. Java: Herausfinden, warum * eine Klasse geladen wird
- 25. Warum müssen Thread-Funktionen als '__cdecl' deklariert werden?
- 26. Warum wird die Klasse subprocess.Popen nicht als Teilprozess bezeichnet?
- 27. Warum sind Schnittstellen statisch?
- 28. Warum wird Silverlight 5 Assembly.LoadFrom intern deklariert?
- 29. Wie deklariert man eine typisierte Klasse in Java?
- 30. Warum wird die Position absolut über der Position statisch gerendert?
Siehe [diese Antwort] (http://stackoverflow.com/a/3584151/545637). – Apalala