Статический класс-член не является внутренним классом

Класс-член, определенный в теле другого класса, может быть объявлен статическим.

Пример

Следующий код объявляет класс верхнего уровня A и статический класс-член B:

class A {
  // Static member class
  public static class B {
    // Body for class B goes here
  }
}

Примечание

Статический класс-член не является внутренним классом. Считается классом высшего уровня.

Статический класс-член также называется вложенным классом верхнего уровня.

Экземпляр класса A и экземпляр класса B могут существовать независимо, поскольку оба являются классами верхнего уровня.

Статический класс-член может быть объявлен общедоступным, защищенным, на уровне пакета или закрытым, чтобы ограничить его доступность за пределами окружающего его класса.

Есть два преимущества использования статического класса-члена:

  • Статический класс-член может получить доступ к статическим членам окружающего его класса, включая частные статические члены.
  • Пакет действует как контейнер для классов верхнего уровня, предоставляя пространство имен. Классы верхнего уровня, имеющие статические классы-члены, обеспечивают дополнительный уровень пространств имен.

Статический класс-член является прямым членом окружающего его класса верхнего уровня, а не членом пакета.

Объект статического класса-члена создается так же, как вы создаете объект класса верхнего уровня с помощью оператора new. Чтобы создать объект класса B, вы пишете

A.B bReference = new A.B();

Поскольку простое имя класса B находится в области видимости внутри класса A, мы можем использовать его простое имя для создания его объекта внутри класса A как

B  bReference2 = new B(); // This  statement appears inside class  A  code

Мы также можем использовать простое имя B вне класса A, импортировав класс com.java2s.innerclasses.A.B.

Пример 2

В следующем коде показано, как использовать статический внутренний класс.

public class Main {
  public static void main(String[] args) {
    Car.Tire m = new Car.Tire(17);
    Car.Tire m2 = new Car.Tire(19);
//w  w w.  j  a  va 2  s  .  c o m
    Car.Keyboard k = new Car.Keyboard(122);
    Car.Keyboard k1 = new Car.Keyboard(142);
    System.out.println(m);
    System.out.println(m2);
    System.out.println(k);
    System.out.println(k1);
  }
}
class Car {
  // Static member class - Monitor
  public static class Tire {
    private int size;
    public Tire(int size) {
      this.size = size;
    }
    public String toString() {
      return "Monitor   - Size:" + this.size + "  inch";
    }
  }
  // Static member class - Keyboard
  public static class Keyboard {
    private int keys;
    public Keyboard(int keys) {
      this.keys = keys;
    }
    public String toString() {
      return "Keyboard  - Keys:" + this.keys;
    }
  }
}

Приведенный выше код генерирует следующий результат.

Статический класс-член не является внутренним классом

Класс-член, определенный в теле другого класса, может быть объявлен статическим.

Пример

Следующий код объявляет класс верхнего уровня A и статический класс-член B:

class A {
  // Static member class
  public static class B {
    // Body for class B goes here
  }
}

Примечание

Статический класс-член не является внутренним классом. Считается классом высшего уровня.

Статический класс-член также называется вложенным классом верхнего уровня.

Экземпляр класса A и экземпляр класса B могут существовать независимо, поскольку оба являются классами верхнего уровня.

Статический класс-член может быть объявлен общедоступным, защищенным, на уровне пакета или закрытым, чтобы ограничить его доступность за пределами окружающего его класса.

Есть два преимущества использования статического класса-члена:

  • Статический класс-член может получить доступ к статическим членам окружающего его класса, включая частные статические члены.
  • Пакет действует как контейнер для классов верхнего уровня, предоставляя пространство имен. Классы верхнего уровня, имеющие статические классы-члены, обеспечивают дополнительный уровень пространств имен.

Статический класс-член является прямым членом окружающего его класса верхнего уровня, а не членом пакета.

Объект статического класса-члена создается так же, как вы создаете объект класса верхнего уровня с помощью оператора new. Чтобы создать объект класса B, вы пишете

A.B bReference = new A.B();

Поскольку простое имя класса B находится в области видимости внутри класса A, мы можем использовать его простое имя для создания его объекта внутри класса A как

B  bReference2 = new B(); // This  statement appears inside class  A  code

Мы также можем использовать простое имя B вне класса A, импортировав класс com.java2s.innerclasses.A.B.

Пример 2

В следующем коде показано, как использовать статический внутренний класс.

public class Main {
  public static void main(String[] args) {
    Car.Tire m = new Car.Tire(17);
    Car.Tire m2 = new Car.Tire(19);
//w  w w.  j  a  va 2  s  .  c o m
    Car.Keyboard k = new Car.Keyboard(122);
    Car.Keyboard k1 = new Car.Keyboard(142);
    System.out.println(m);
    System.out.println(m2);
    System.out.println(k);
    System.out.println(k1);
  }
}
class Car {
  // Static member class - Monitor
  public static class Tire {
    private int size;
    public Tire(int size) {
      this.size = size;
    }
    public String toString() {
      return "Monitor   - Size:" + this.size + "  inch";
    }
  }
  // Static member class - Keyboard
  public static class Keyboard {
    private int keys;
    public Keyboard(int keys) {
      this.keys = keys;
    }
    public String toString() {
      return "Keyboard  - Keys:" + this.keys;
    }
  }
}

Приведенный выше код генерирует следующий результат.

Monitor   - Size: 17
Monitor   - Size: 19
Keyboard  - Keys: 122
Keyboard  - Keys: 142