Gibt es so etwas wie static class
in Java?
Was bedeutet eine solche Klasse? Müssen auch alle Methoden der statischen Klasse vorhanden sein static
?
Ist es umgekehrt erforderlich, dass, wenn eine Klasse alle statischen Methoden enthält, die Klasse auch statisch sein soll?
Wofür sind statische Klassen gut?
java
static-classes
Krake
quelle
quelle
Antworten:
Java verfügt über statisch verschachtelte Klassen, aber es scheint, als würden Sie nach einer statischen Klasse der obersten Ebene suchen. Java hat keine Möglichkeit, eine Klasse der obersten Ebene statisch zu machen, aber Sie können eine statische Klasse wie folgt simulieren:
final
- Verhindert die Erweiterung der Klasse, da die Erweiterung einer statischen Klasse keinen Sinn ergibtprivate
erstellen - Verhindert die Instanziierung durch Clientcode, da es nicht sinnvoll ist, eine statische Klasse zu instanziierenstatic
- Da die Klasse nicht keine Instanzmethoden aufgerufen werden können instanziiert werden kann oder Instanzfelder zugegriffenEinfaches Beispiel für Vorschläge von oben:
Was nützen statische Klassen? Eine gute Verwendung einer statischen Klasse besteht darin, einmalige Klassen, Dienstprogramme und / oder Bibliotheksklassen zu definieren, bei denen eine Instanziierung keinen Sinn ergibt. Ein gutes Beispiel ist die Math-Klasse, die einige mathematische Konstanten wie PI und E enthält und einfach mathematische Berechnungen bereitstellt. In einem solchen Fall wäre eine Instanziierung erforderlich und unnötig und verwirrend. Siehe
Math
Klassen- und Quellcode . Beachten Sie, dass es istfinal
und alle seine Mitglieder sindstatic
. Wenn Java die Deklaration von Klassen der obersten Ebene zulässt, iststatic
die Math-Klasse tatsächlich statisch.quelle
Foo
mit nurstatic
Methoden ist nicht dasselbe wiestatic class Foo
Nun, Java hat "statisch verschachtelte Klassen", aber sie sind überhaupt nicht mit den statischen Klassen von C # identisch, wenn Sie von dort kommen. Eine statisch verschachtelte Klasse ist nur eine Klasse, die nicht implizit auf eine Instanz der äußeren Klasse verweist.
Statisch verschachtelte Klassen können Instanzmethoden und statische Methoden haben.
In Java gibt es keine statische Klasse der obersten Ebene.
quelle
static
beim Deklarieren nicht verwenden . Sie sind implizit statisch, da Sie keinen Verweis auf etwas anderes benötigen, um einen zu erstellen. Persönlich finde ich die statische / nicht statische Terminologie für verschachtelte Klassen sowieso etwas seltsam ... Ich denke, es wäre einfacher, über das Verhalten zu sprechen.Es gibt eine statisch verschachtelte Klasse . Diese [statisch verschachtelte] Klasse benötigt keine Instanz der einschließenden Klasse, um selbst instanziiert zu werden.
Diese Klassen [statisch verschachtelte] können nur auf die statischen Elemente der einschließenden Klasse zugreifen [da sie keinen Verweis auf Instanzen der einschließenden Klasse haben ...]
Codebeispiel:
quelle
Ja, es gibt eine statisch verschachtelte Klasse in Java. Wenn Sie eine verschachtelte Klasse als statisch deklarieren, wird sie automatisch zu einer eigenständigen Klasse, die instanziiert werden kann, ohne die äußere Klasse instanziieren zu müssen, zu der sie gehört.
Beispiel:
Da
class B
es als statisch deklariert ist, können Sie explizit instanziieren als:Beachten
class B
Sie, dass ein Instanzobjektaufruf folgendermaßen ausgesehen hätte, wenn er nicht als statisch deklariert worden wäre, um ihn eigenständig zu machen:quelle
B b = new B();
wenn Sie versuchen, sie über die KlasseA
selbst zu instanziieren .Was passiert, wenn ein Mitglied in einem
class
alsstatic
.. deklariert wird ? Auf diese Mitglieder kann zugegriffen werden, ohne das zu instanziierenclass
. Daherstatic
hat es keine Bedeutung , eine äußere Klasse (Klasse der obersten Ebene) zu bilden . Daher ist es nicht erlaubt.Sie können jedoch innere Klassen als statisch festlegen (da sie Mitglied der Klasse der obersten Ebene sind). Dann kann auf diese Klasse zugegriffen werden, ohne die Klasse der obersten Ebene zu instanziieren. Betrachten Sie das folgende Beispiel.
Innerhalb einer anderen Klasse kann jetzt auf die
C
KlasseB
zugegriffen werden, ohne eine Instanz der Klasse zu erstellenA
.static
Klassen können auchnon-static
Mitglieder haben. Nur die Klasse wird statisch.Wenn das
static
Schlüsselwort jedoch aus der Klasse entfernt wirdB
, kann nicht direkt darauf zugegriffen werden, ohne eine Instanz von zu erstellenA
.Aber wir können keine
static
Mitglieder in einernon-static
inneren Klasse haben.quelle
static
hat nur eine Bedeutung in Java. Wenn sich etwasstatic
in einer Klasse befindet, bedeutet dies, dass auf dieses Objekt zugegriffen werden kann, ohne diese Klasse zu instanziieren. Es sagt nichts über das Erstellen von Instanzen oder nicht ..Da dies das Top-Ergebnis bei Google für "statische Klasse Java" ist und die beste Antwort nicht hier ist, dachte ich, ich würde es hinzufügen. Ich interpretiere die Frage von OP in Bezug auf statische Klassen in C #, die in der Java-Welt als Singletons bekannt sind. Für diejenigen, die es nicht wissen, kann in C # das Schlüsselwort "static" auf eine Klassendeklaration angewendet werden, was bedeutet, dass die resultierende Klasse niemals instanziiert werden kann.
Auszug aus "Effective Java - Second Edition" von Joshua Bloch (allgemein als einer der besten verfügbaren Java-Styleguides angesehen):
Bloch, Joshua (2008-05-08). Effektives Java (Java-Serie) (S. 18). Pearson Ausbildung.
Ich denke, die Umsetzung und Begründung sind ziemlich selbsterklärend.
quelle
Kann eine Klasse in Java statisch sein?
Die Antwort ist JA , wir können eine statische Klasse in Java haben. In Java haben wir statische Instanzvariablen sowie statische Methoden und auch statische Blöcke . Klassen können auch in Java statisch gemacht werden.
In Java können wir die (äußere) Klasse der obersten Ebene nicht statisch machen. Nur verschachtelte Klassen können statisch sein.
statisch verschachtelte Klasse gegen nicht statisch verschachtelte Klasse
1) Für verschachtelte statische Klassen ist keine Referenz der äußeren Klasse erforderlich, für nicht statische verschachtelte Klassen oder innere Klassen ist jedoch eine Referenz für die äußere Klasse erforderlich.
2) Die innere Klasse (oder nicht statische verschachtelte Klasse) kann sowohl auf statische als auch auf nicht statische Mitglieder der äußeren Klasse zugreifen. Eine statische Klasse kann nicht auf nicht statische Mitglieder der Outer-Klasse zugreifen. Es kann nur auf statische Mitglieder der Outer-Klasse zugreifen.
siehe hier: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
quelle
Äußere Klassen können nicht statisch sein, verschachtelte / innere Klassen jedoch. Das hilft Ihnen im Grunde, die verschachtelte / innere Klasse zu verwenden, ohne eine Instanz der äußeren Klasse zu erstellen.
quelle
In einfachen Worten, Java unterstützt die Deklaration einer Klasse als statisch nur für die inneren Klassen, nicht jedoch für die Klassen der obersten Ebene.
Klassen der obersten Ebene: Ein Java-Projekt kann mehr als eine Klasse der obersten Ebene in jeder Java-Quelldatei enthalten, wobei eine der Klassen nach dem Dateinamen benannt ist. Vor den Klassen der obersten Ebene sind nur drei Optionen oder Schlüsselwörter zulässig: öffentlich, abstrakt und endgültig .
Innere Klassen: Klassen, die sich innerhalb einer Klasse der obersten Ebene befinden, werden als innere Klassen bezeichnet. Dies ist im Grunde das Konzept verschachtelter Klassen. Innere Klassen können statisch sein . Die Idee, die inneren Klassen statisch zu machen, besteht darin, die Objekte der inneren Klassen zu instanziieren, ohne das Objekt der Klasse der obersten Ebene zu instanziieren. Dies ist genau so, wie die statischen Methoden und Variablen innerhalb einer Klasse der obersten Ebene funktionieren.
Daher unterstützt Java statische Klassen auf der Ebene der inneren Klassen (in verschachtelten Klassen).
Und Java unterstützt keine statischen Klassen in Klassen der obersten Ebene.
Ich hoffe, dies gibt eine einfachere Lösung für die Frage nach dem grundlegenden Verständnis der statischen Klassen in Java.
quelle
Java verfügt über statische Methoden, die Klassen zugeordnet sind (z. B. java.lang.Math verfügt nur über statische Methoden), die Klasse selbst ist jedoch nicht statisch.
quelle
Sie können das statische Schlüsselwort nur für eine Klasse verwenden, wenn es sich um eine innere Klasse handelt. Eine statische innere Klasse ist eine verschachtelte Klasse, die ein statisches Mitglied der äußeren Klasse ist. Auf den Zugriff kann zugegriffen werden, ohne die äußere Klasse mithilfe anderer statischer Elemente zu instanziieren. Genau wie statische Elemente hat eine statisch verschachtelte Klasse keinen Zugriff auf die Instanzvariablen und -methoden der äußeren Klasse.
quelle
static
Schlüsselwort nicht für eine Klasse verwenden, es sei denn, es ist eine verschachtelte Klasse. 'Static Inner' ist ein Widerspruch .Eine statische Methode bedeutet, dass im Gegensatz zu public auf sie zugegriffen werden kann, ohne ein Objekt der Klasse zu erstellen:
quelle
Alle guten Antworten, aber ich habe keinen Verweis auf java.util.Collections gesehen, der Tonnen statischer innerer Klassen für ihre statischen Faktormethoden verwendet. Also das gleiche hinzufügen.
Hinzufügen eines Beispiels aus java.util.Collections mit mehreren statischen inneren Klassen. Innere Klassen sind nützlich, um Code zu gruppieren, auf den über die äußere Klasse zugegriffen werden muss.
Hier ist die statische Faktormethode in der Klasse java.util.Collections
quelle