Статические классы и методы

Открыта

— Кроме статических методов есть ещё и статические классы. Что это такое мы рассмотрим в будущем, я лишь покажу пример, что такое может быть:

Пример
public class StaticClassExample
{
    private static int catCount = 0;

    public static void main(String[] args) throws Exception
    {
        Cat vaska = new Cat("Bella");
        Cat murka = new Cat("Tiger");

        System.out.println("Cat count " + catCount);
    }

    public static class Cat
    {
        private String name;

        public Cat(String name)
        {
            this.name = name;
            StaticClassExample.catCount++;
        }
    }

}
2
Задача
Java Syntax,  6 уровень,  7 лекция
Недоступна
Набираем код
Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

— Объектов класса Cat можно создавать сколько угодно. В отличие от, например, статической переменной, которая существует в единственном экземпляре.

— Основной смысл модификатора static перед объявлением класса — это регулирование отношения класса Cat к классу StaticClassExample. Смысл примерно такой: класс Cat не привязан к объектам класса StaticClassExample, и не может обращаться к обычным (нестатическим) переменным класса StaticClassExample.

— Значит, я могу создавать классы внутри других классов?

— Да. Java такое позволяет. Не слишком задумывайся об этом сейчас. В будущем я объясню еще некоторые вещи, и все станет немного проще.

— Надеюсь.

Комментарии (99)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Данила Губенко22 уровень, Fryazino
30 декабря 2019, 21:21
А почему бы не создать static int catCount внутри static class Cat? Тогда к ней как минимум можно обратиться catCount++. Правда тогда из main придется обращаться Cat.catCount, но! Если у нас есть к примеру классы Cat, Dog, Mouse - зачем забивать основной класс этими переменными? В каждый из этих классов - по своей, и код будет приятнее ИМХО
Wahldemahr11 уровень, Харьков
27 ноября 2019, 19:52
Вот еще статья про модификатор static
Иван15 уровень, Екатеринбург
16 ноября 2019, 15:42
По-моему, набор кода, который еще не объяснили - это лишнее. Только время отнимает.
12 декабря 2019, 13:07
правой кнопкой мыши, "выбрать все", "копировать". В окне ниже правой кнопкой мыши "Вставить" )
Aleksei10 уровень
5 ноября 2019, 19:15
Вроде все понятно и ни чего не понятно. 🙈
51_Drummer10 уровень, Минск
26 октября 2019, 19:00
vaska и murka порода "антикопипасты")))
Dmitriy22 уровень
2 ноября 2019, 17:08
и еще там двоеточие на выводе
Андрій16 уровень, Київ
17 сентября 2019, 20:23
..... и я надеюсь
artemoon1249 уровень, Казань
17 сентября 2019, 12:06
вот же я пень тормознутый. чтобы тему понять, приходить перечитать статью, читать параллельно книгу Шилдта, смотрел кучу видосов по каждой теме.
artemoon1249 уровень, Казань
17 сентября 2019, 12:06
и то в итоге многое не понимаю
Геннадий13 уровень, Москва
30 октября 2019, 14:33
не переживай, не ты один такой. Не всем дается сходу, остальным нужно ''въезжать''. Мне тоже не легко =)
mirraim19 уровень, Пермь
16 ноября 2019, 12:38
Все люди разные.Я вот только в процессе решения задач начинаю понимать, как это работает. А теория очень тяжело в голове откладывается, если задачи не решаю.
Chingiz12 уровень
3 февраля, 14:22
У меня другая проблема, если я въезжаю сразу, без параллельных телодвижений, то через пару лекций вынужден возвращаться чтоб зазубрить.
Alexey Prilessky18 уровень, Минск
16 сентября 2019, 17:32
Каким образом класс Cat получил доступ к приватной переменной класса StaticClassExample?
Дмитрий13 уровень, Москва
17 сентября 2019, 16:26
поскольку private поля доступны в любом месте внутри класса так как класс Cat находится внутри класса StaticClassExample, он имеет доступ ко всем полям этого класса, но не наоборот, то есть private поля класса Cat недоступны из класса StaticClassExample
Alexey Prilessky18 уровень, Минск
17 сентября 2019, 16:43
Аааа, я не сразу заметил, что класс Cat находится внутри первого класса. Спасибо !
Людмила10 уровень, Харьков
27 декабря 2019, 12:53
Хм, а исходя из этого пояснения: "Основной смысл модификатора static перед объявлением класса — это регулирование отношения класса Cat к классу StaticClassExample. Смысл примерно такой: класс Cat не привязан к объектам класса StaticClassExample, и не может обращаться к обычным (нестатическим) переменным класса StaticClassExample." класс Cat получил доступ к приватной переменной catCount класса StaticClassExample потому, что эта переменная СТАТИЧЕСКАЯ, а вот ко всем остальным полям (как писал Дмитрий) класс Cat как рах доступа не имеет. Поясните кто-то, плиз, я права или нет?
Eugene Kim7 уровень
10 сентября 2019, 10:40
Блин пример что не принимают вроде все точь в точь ввел : - (
Виталий14 уровень, Санкт-Петербург
21 августа 2019, 21:21
Слава богу, освоил слепую печать на английской раскладке перед обучением JAVA.
Юля Лобас26 уровень, Костанай
26 августа 2019, 10:18
Тоже надо.... Освоить...
Yuliya Payevska14 уровень, Харьков
21 сентября 2019, 13:49
Набираю текст в слепую, это удобно. Набрала код, все работает)