Помогите понять, пожалуйста. Ранее нам в лекции писали, что нельзя использовать нестатические переменные внутри блока static.
Почему же тогда в этой задаче внутри блока static используется переменная name, которая не static?
public static class Cat{
public String name;
static {
Solution.cat = new Cat();
cat.name = "Tom";
System.out.println(cat.name);
}
}
Dirk Gently
28 уровень
Нельзя использовать нестатические переменные внутри блока static
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
17 мая, 18:53
Тебе нужно разобраться что такое статика в целом. Статика это нечто на уровне класса, оно существует в единственном экземпляре, оно существует всегда если есть сам класс.
Обычные поля и методы (не статические) существуют на уровне экземпляра класса (т.е. объекта). Ты не можешь к ним обратиться вот напрямую, только через экземпляр и у каждого экземпляра поле будет иметь уникальное значение.
Вот тебе пример:
Как видишь, в статическом методе main я оперирую нестатической переменной name, но делаю это через экземпляр класса. Твой блок статик вообще ничем не отличается в данном случае (хотя отличия в жизненном цикле есть, статик блок отрабатывает только один раз при инициализации класса, но и то и другое это статический контекст).
Я не вижу всего кода, но полагаю что Solution.cat это как раз статическая переменная типа Cat на уровне класса Solution, потому ты легко можешь к ней обратиться через имя класса в статическом блоке. Ты инициализируешь ее новым объектом типа Cat. А дальше уже у этого объекта сетишь не статическое поле name - это более чем нормально, ведь ты обращаешься уже к полю экземпляра класса, а не как к статику, у него (экземпляра) оно (поле) существует. +2