Statische Klasse in Java
In der Java-Sprache können wir keine äußere Klasse als statische Klasse erstellen, aber es gibt das Privileg, eine verschachtelte innere Klasse als statische Klasse zu erstellen. Die Eigenschaften einer statischen Klasse sind wie folgt.
Eine statische innere Klasse kann niemals auf einen nicht statischen Member der äußeren Klasse zugreifen.
Eine statische innere Klasse benötigt keine äußere Klassenreferenz, um auf die Membervariablen zuzugreifen.
Statische Klasse kann nie instanziiert werden. Daher sind Methoden direkt über den Klassennamen zugänglich.
Unten ist der Code, der die beiden obigen Zeilen demonstriert.
package static_class;
public class StaticInnerClass {
static int i = 1;
int j = 9;
public static void main(String[] args) {
StaticInnerClass s = new StaticInnerClass();
// s.InnerClass.printNum();
InnerClass.printNum();
}
public static class InnerClass {
public static void printNum() {
System.out.println(i);
// System.out.println(j);
}
}
}
Im obigen Code haben wir eine äußere Klasse mit dem Namen StaticInnerClass
erstellt. Diese Klasse hat ein statisches Feld, ein nicht statisches Feld, eine statische Methode und eine statische innere Klasse. In der statischen main-Methode haben wir eine Instanz einer äußeren Klasse namens s
-Objekt erstellt. Wenn wir versuchen, auf die Methode der inneren Klasse printNum()
mit einem Objekt der äußeren Klasse zuzugreifen, das heißt s.InnerClass.printNum();
Die IDE gibt einen Kompilierzeitfehler aus, der besagt, dass die statische innere Klasse keine Referenz auf das Referenzobjekt der äußeren Klasse benötigt, um auf Methoden der inneren Klasse zuzugreifen. Daher können wir über den Klassennamen direkt auf die Methoden der inneren Klasse zugreifen.
Jetzt sehen wir die Definition der Methode printNum()
. Es hat zwei print-Anweisungen. Druckt zuerst das statische Feld der äußeren Klasse und versucht zweitens, die nicht-statische Variable derselben zu drucken. Die Anweisung System.out.println(i);
ist gültig, was bedeutet, dass auf statische Member nur aus dem statischen Kontext zugegriffen werden kann. Aber mit Blick auf die zweite Aussage System.out.println(j);
ist ungültig, da aus dem statischen Kontext nie auf nicht-statische Member zugegriffen werden kann.
In der Java-Klasse gibt es keine Möglichkeit, eine äußere Klasse static
zu erstellen. Aber wir können das Verhalten mit einigen definierten Schlüsselwörtern imitieren.
Die Verwendung des Schlüsselworts final
dient dazu, die Klasse endgültig zu machen. Dieses Schlüsselwort verhindert, dass die Klasse weiter erweitert wird. Der Grund dafür ist, dass die Erweiterung einer statischen Klasse nicht verwendet wird.
Verwenden Sie das Schlüsselwort private
, um den Konstruktor privat zu machen, da dies die Instanziierung einer statischen Klasse verhindert. Wie die Eigenschaft der statischen Klasse sagt, kann man sie nie instanziieren.
Verwenden Sie das Schlüsselwort static
bei Member-Variablen und Member-Methoden. Da kein Objekt erstellt wird, kann man nie auf nicht-statische Memberfelder und Funktionen zugreifen.
Unten ist eine statische Klasse definiert und ihre Verwendung findet bei der Erstellung der Klasse Utility
, wo die Objekterzeugung dieser Klasse nicht erforderlich ist.
package static_class;
public final class StaticClass {
private static int a = 1;
private StaticClass() {
System.out.println("Cannot be instantiated");
}
public static void printNum() {
System.out.println(a);
}
}
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn