English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java Flusskontrolle

Java Array

Java objektorientiert (I)

Java objektorientiert (II)

Java objektorientiert (III)

Java Ausnahmebehandlung

Java Liste (List)

Java Queue (Warteschlange)

Java Map-Sammlung

Java Set-Sammlung

Java Eingabe-Ausgabe (I/O)

Java Reader/Writer

Andere Themen von Java

Java Verkettete statische Klasse

In diesem Tutorial werden Sie durch Beispiele eingebaute statische Klassen lernen. Sie werden auch die Unterschiede zwischen statischen Klassen und internen Klassen verstehen.

Wie in den vorherigen Tutorials erwähnt, können wir in einer anderen Klasse in Java eine Klasse haben. Eine solche Klasse wird als eingebaute Klasse bezeichnet. In Java gibt es zwei Arten von eingebaute Klassen:

  • eingebaute nicht-statische Klasse (interne Klasse)

  • eingebaute statische Klasse.

Im vorherigen Tutorial haben wir bereits interne Klassen besprochen. Wenn Sie mehr über interne Klassen erfahren möchten, besuchen Sie bitteJava eingebaute Klasse.

In diesem Tutorial werden wir eingebaute statische Klassen lernen.

Java eingebaute statische Klasse

Wir verwenden den Schlüsselwort static, um unsere eingebaute Klasse statisch zu machen.

Hinweis:In Java sind nur eingebaute Klassen statisch erlaubt.

Wie bei gewöhnlichen Klassen können statische Nestklasse sowohl statische als auch nicht-statische Felder und Methoden enthalten. Zum Beispiel,

Klasse Animal {
   static class Mammal {
      // Statische und statische Member der Klasse Mammal
   }
   // Mitglied der Klasse Animal
}

Statische Nestklasse sind mit der externen Klasse verbunden.

Um auf die statische Nestklasse zuzugreifen, benötigen wir kein Objekt der externen Klasse.

Beispiel: Statische Nestklasse

class Animal {
  //Eingebettete Klasse
   class Reptile {
      public void displayInfo() {
        System.out.println("Ich bin ein Reptil.");
      }
   }
  //Statische Klasse
   static class Mammal {
      public void displayInfo() {
        System.out.println("Ich bin ein Säugetier.");
      }
   }
}
class Main {
   public static void main(String[] args) {
      //Objekterstellung der externen Klasse
      Animal animal = new Animal();
      //Objekterstellung von nicht statischen Klassen
      Animal.Reptile reptile = animal.new Reptile();
      reptile.displayInfo();
      //Objekterstellung von statischen Nestklassen
      Animal.Mammal mammal = new Animal.Mammal();
      mammal.displayInfo();
   }
}

Ausgaberesultat

Ich bin ein Reptil.
Ich bin ein Säugetier.

Im obigen Programm haben wir in der Klasse Animal zwei eingebettete Klassen Mammal und Reptile.

Um ein Objekt der nicht statischen Klasse Reptile zu erstellen, haben wir

Animal.Reptile reptile = animal.new Reptile()

Um ein Objekt der statischen Klasse Mammal zu erstellen, haben wir

Animal.Mammal mammal = new Animal.Mammal()

Zugriff auf die Mitglieder der externen Klasse

In Java sind statische Nestklasse mit der externen Klasse verbunden. Dies ist der Grund, warum statische Nestklasse nur auf die Klassenmitglieder der externen Klasse (statische Felder und Methoden) zugreifen kann.

Lassen Sie uns sehen, was passiert, wenn wir versuchen, auf die nicht statischen Felder und Methoden einer externen Klasse zuzugreifen.

Beispiel: Zugriff auf nicht statische Member

class Animal {
  static class Mammal {
   public void displayInfo() {
     System.out.println("Ich bin ein Säugetier.");
   }
 }
 class Reptile {
   public void displayInfo() {
     System.out.println("Ich bin ein Reptil.");
   }
 }
 public void eat() {
   System.out.println("Ich esse Nahrung.");
 }
}
class Main {
 public static void main(String[] args) {
   Animal animal = new Animal();
   Animal.Reptile reptile = animal.new Reptile();
   reptile.displayInfo();
   Animal.Mammal mammal = new Animal.Mammal();
   mammal.displayInfo();
   mammal.eat();
 }
}

Ausgaberesultat

Main.java:28: Fehler: Symbol nicht gefunden
    mammal.eat();
          ^
  symbol: Methode eat()
  location: Variable mammal vom Typ Mammal
1 Fehler
Kompilierer-Ausgangsstatus 1

Im obigen Beispiel haben wir in der Klasse Animal eine nicht statische Methode eat() erstellt.

Nun, wenn wir versuchen, das Objekt mammal auf die Methode eat() zuzugreifen, zeigt der Compiler einen Fehler an.
Dies liegt daran, dass mammal ein Objekt einer statischen Klasse ist, daher können wir keine nicht-statischen Methoden aus einer statischen Klasse aufrufen.

Statische Top-Klasse

Wie erwähnt, können nur verschachtelte Klassen statisch sein. Wir können keine statischen Top-Klassen haben.

Lassen Sie uns sehen, was passiert, wenn wir versuchen, eine Top-Klasse zu statisch zu machen.

static class Animal {
 public static void displayInfo() {
   System.out.println("Ich bin ein Tier");
 }
}
class Main {
 public static void main(String[] args) {
   Animal.displayInfo();
 }
}

Ausgaberesultat

Main.java:1: Fehler: Modifikator static hier nicht erlaubt
static class Animal {
       ^
1 Fehler
Kompilierer-Ausgangsstatus 1

In dem obigen Beispiel versuchen wir, eine statische Klasse Animal zu erstellen. Da Java das Verwenden von statischen Top-Klassen nicht erlaubt, tritt ein Fehler auf.