Статический класс
Last updated: 4 мая 2025 г.Статический класс
это всегда внутренний класс. Статического не внутреннего класса не бывает.
Обычный внутренний класс и статический внутренний класс часто сравнивают.
Главное отличие статического от обычного внутреннего в том что не нужно создавать экземпляр внешнего класса для обращения к его элементам, но обращаться внутренний статический класс может только к статическим элементам внешнего класса.
То есть отличаеться такой класс от просто внутреннего тем что он не сильно связан с внешним классом, его можно создавать и использовать без объекта внешнего класса, так как, как уже было сказано он не может работать (и ему и не нужно) с нестатическими элементами внешенго класса, а соответственно связь слабая.
Он работает лишь со статическими элементами внешнего класса то есть с элементами, которые общие для всех обьектов внешнего класса, и поэтому связь не сильная, поскольку статические элементы не зависят от обьекта класса, то есть необязательно создавать обьект внешнего класса для использования обьектом внутреннего статического класса статических членов обьекта внешнего класса.
Например есть класс Торт Наолеон.
У него есть внутри какая-то статическая переменная, например колличество масла, и внутренний статический класс Рецепт Торта Наполеон.
В отличие от мотора, который выполняет важные функции в машине и без которого машина не поедет и от которого нет смысла без машины для которой он существует рецепт торта наполеон очевидно может существовать отдельно от самого торта наполеон, но тем не менее он всё равно имеет смысловую связь с тортами наполеон, ведь торты наполеон готовяться по этому рецепту. Поэтому Рецепт торта наполеон есть смысл описать как внутренний статический класс класса Торт Наполеон.
И соответственно обьект внутреннего статического класса Рецепт торта наполеон будет иметь лишь общую связь со всеми обьектами класса торт наполеон, поскольку будет иметь связь только со статическими (общими) элементами класса торт наполеон.
Поясним на примере:
1class CakeNapoleon { // класс торт Наполеон
2 private static int butter = 600;
3
4 public void printRecipe() {
5 // Как видим ниже, внешний класс
6 // не должен создавать объект внутреннего класса.
7 // Можно обращаться к методам внутреннего
8 // напрямую через внутренний класс RecipeOfNapoleon.
9 RecipeOfNapoleon.showRecipe(200);
10 }
11
12 // Внутренний статический класс рецепт Наполеона
13 static class RecipeOfNapoleon {
14 public static void showRecipe(int Salt) {
15 // Используется статическое поле butter
16 // внешнего класса.
17 // К нестатическим членам внешнего класса доступа нет.
18 System.out.println("Recipe of Napoleon – " +
19 Salt + " of salt " + "butter" of butter and so on");
20 }
21 }
22}
23
24class StaticClass {
25 public static void main(String[] args) {
26 // Создаётся экземпляр
27 // внутреннего статического класса RecipeOfNapoleon
28 // без создания объекта внешнего класса CakeNapoleon.
29 CakeNapoleon.RecipeOfNapoleon recipeOfNapol =
30 new CakeNapoleon.RecipeOfNapoleon();
31 recipeOfNapol.showRecipe(100);
32 }
33}
Вывод:

Дополнительные материалы
Следующие уроки
Ссылочные типы и типы значений
12
мин.
Передача в метод ссылочных типов и типов значений
9
мин.
Аннотации в Java
12
мин.