1159 Stimmen

Was ist eine "statische Klasse" in Java?

Gibt es so etwas wie static class in Java?

Was ist die Bedeutung einer solchen Klasse? Müssen alle Methoden der statischen Klasse auch static sein?

Ist es auch umgekehrt erforderlich? Dass wenn eine Klasse nur statische Methoden enthält, die Klasse auch statisch sein muss?

Wofür sind statische Klassen gut?

6 Stimmen

Sie könnten sich für stackoverflow.com/questions/3584113/java-static-class interessieren.

0 Stimmen

Statische Klassen werden im Grunde verwendet, um Klassen zusammenzufassen.

1 Stimmen

Was meinst du mit "wie static class"?

26voto

roottraveller Punkte 7134

Kann eine Klasse in Java statisch sein?

Die Antwort lautet 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 keine Top-Level (äußere) Klasse statisch machen. Nur geschachtelte Klassen können statisch sein.

Statische geschachtelte Klasse vs. nicht statische geschachtelte Klasse

1) Eine geschachtelte statische Klasse benötigt keine Referenz der äußeren Klasse, aber eine nicht statische geschachtelte Klasse oder Innere Klasse benötigt eine Referenz zur äußeren Klasse.

2) Eine Innere Klasse (oder nicht statische geschachtelte Klasse) kann sowohl auf statische als auch nicht-statische Member der äußeren Klasse zugreifen. Eine statische Klasse kann nicht auf nicht-statische Member der äußeren Klasse zugreifen. Sie kann nur auf statische Member der äußeren Klasse zugreifen.

hier sehen: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

1 Stimmen

Auch innere 'nicht statische' Klassen können keine statischen Felder oder Methoden deklarieren

1 Stimmen

Die Top-Level-Klassen sind standardmäßig statisch, das ist der einzige Grund, warum man das statische Schlüsselwort nicht für sie verwenden kann. Es wäre einfach überflüssig. (Man benötigt keine Instanz der Klasse, um auf die Klasse zuzugreifen, daher sind sie statisch).

12voto

Bennet Huber Punkte 149

Da dies das oberste Ergebnis bei Google für "statische Klasse Java" ist und die beste Antwort nicht hier ist, dachte ich, ich füge sie hinzu. Ich interpretiere die Frage des OP als die statische Klassen in C#, die in der Java-Welt als Singletons bekannt sind. Für diejenigen, die es nicht wissen, kann im C# das Schlüsselwort "static" auf eine Klassendeklaration angewendet werden, was bedeutet, dass die resultierende Klasse nie instanziiert werden kann.

Auszug aus "Effective Java - Second Edition" von Joshua Bloch (weitgehend als einer der besten Java-Style-Guides verfügbar angesehen):

 

Ab Version 1.5 gibt es einen dritten Ansatz zur Implementierung von Singletons. Erstellen Sie einfach einen Enum-Typ mit einem Element:

// Enum Singleton - der bevorzugte Ansatz
public enum Elvis {
    INSTANCE;
    public void leaveTheBuilding() { ... }
}

    

Dieser Ansatz ist funktional äquivalent zum Ansatz mit öffentlichem Feld, außer dass er prägnanter ist, die Serialisierungsmaschinerie kostenlos bereitstellt und eine eiserne Garantie gegen mehrfache Instanziierung bietet, selbst bei ausgeklügelten Serialisierungs- oder Reflektionsangriffen. Obwohl dieser Ansatz noch nicht weit verbreitet ist, ist ein Enum-Typ mit einem Element der beste Weg, um einen Singleton zu implementieren. (Hervorhebung des Autors)

Bloch, Joshua (2008-05-08). Effective Java (Java Series) (S. 18). Pearson Education.

Ich denke, die Implementierung und Rechtfertigung sind ziemlich selbsterklärend.

7 Stimmen

Ein guter Weg, um ein Singleton zu implementieren. Leider handelt es sich bei der Frage nicht um Singletons, sondern um statische Klassen.

1 Stimmen

Java hat eine ziemlich einzigartige Interpretation des Schlüsselworts "static". Es sieht so aus, als ob OP aus C# kommt, wo "static class" das Äquivalent zu einem Singleton in Java ist. Ich habe meine Antwort aktualisiert, um diese Interpretation der Frage klarzustellen.

2 Stimmen

Eine C#-Statische Klasse ist kein Singleton. Eine Singleton-Instanz ist ein Objekt und kann ein Interface implementieren, was bedeutet, dass es an Dependency Injection teilnehmen und gemockt werden kann. Eine C#-Statische Klasse kann kein Interface implementieren oder auf irgendeine Weise eingefügt werden, und ist viel näher an einer Gruppe von C-Funktionen, und erlaubt natürlich auch Erweiterungsmethoden.

6voto

Saket Punkte 44477

Äußere Klassen können nicht statisch sein, aber verschachtelte/innere Klassen können es sein. Das hilft Ihnen im Grunde genommen, die verschachtelte/innere Klasse zu verwenden, ohne eine Instanz der äußeren Klasse zu erstellen.

2 Stimmen

0 Stimmen

Äußere Klassen sind standardmäßig statisch (es ist kein Exemplar erforderlich, um ein Exemplar zu erstellen)

6voto

saichand Punkte 885

In einfachen Worten unterstützt Java die Deklaration einer Klasse nur für die inneren Klassen als statisch, aber nicht für die Top-Level-Klassen.

Top-Level-Klassen: Ein Java-Projekt kann mehr als eine Top-Level-Klasse in jeder Java-Quellcodedatei enthalten, wobei eine der Klassen nach dem Dateinamen benannt wird. Es gibt nur drei Optionen oder Schlüsselwörter, die vor den Top-Level-Klassen erlaubt sind, public, abstract und final.

Innere Klassen: Klassen, die sich innerhalb einer Top-Level-Klasse befinden, werden als innere Klassen bezeichnet, was im Grunde das Konzept der verschachtelten Klassen ist. Innere Klassen können statisch sein. Die Idee, die inneren Klassen statisch zu machen, besteht darin, den Vorteil zu nutzen, Objekte der inneren Klassen zu instanziieren, ohne das Objekt der Top-Level-Klasse instanziieren zu müssen. Dies funktioniert genau auf die gleiche Weise wie statische Methoden und Variablen innerhalb einer Top-Level-Klasse.

Daher unterstützt Java statische Klassen auf der Ebene der inneren Klassen (bei verschachtelten Klassen)

Und Java unterstützt keine statischen Klassen auf der Ebene der Top-Level-Klassen.

Ich hoffe, dass dies eine einfachere Lösung für die Frage zur grundlegenden Verständnis der statischen Klassen in Java bietet.

1 Stimmen

0 Stimmen

Die obersten Klassen sind standardmäßig statisch (keine Notwendigkeit für eine Instanz, um auf sie zuzugreifen). Da sie nicht nicht statisch sein können (Sie benötigen sie, um eine Instanz zu erstellen), würde es erfordern, alle Top-Level-Klassen als statisch zu kennzeichnen, wenn das Schlüsselwort static erlaubt würde. Deshalb wird dieses Schlüsselwort nicht unterstützt. Das bedeutet nicht, dass die Eigenschaft statisch zu sein, nicht unterstützt wird.

2voto

Nahid Nisho Punkte 39

Sie können das Schlüsselwort "static" nicht mit einer Klasse verwenden, es sei denn, es handelt sich um eine innere Klasse. Eine statische innere Klasse ist eine verschachtelte Klasse, die ein statisches Element der äußeren Klasse ist. Sie kann ohne Instanziierung der äußeren Klasse über andere statische Elemente zugegriffen werden. Genau wie statische Elemente hat eine statische verschachtelte Klasse keinen Zugriff auf die Instanzvariablen und -methoden der äußeren Klasse.

public class Outer {
   static class Nested_Demo {
      public void my_method() {
          System.out.println("Dies ist meine verschachtelte Klasse");
      }
   }
public static void main(String args[]) {
      Outer.Nested_Demo nested = new Outer.Nested_Demo();
      nested.my_method();
   }
}

1 Stimmen

Du kannst das Schlüsselwort static nicht mit einer Klasse verwenden, es sei denn, es handelt sich um eine verschachtelte Klasse. 'Statische innere' ist ein Widerspruch in sich.

0 Stimmen

Off-Topic, aber Ihre Antwort scheint von diesen Websites abgerissen zu sein: Tutorialspoint, Euroinformatica, CUITutorial

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X