Учусь программировать по учебнику и попытался понять принципы ООП. Написал следующий код в Main.java:
public class Main {
public static void main (String [] args) {
Dog chakki = new Dog();
Dog muhtar = new Dog();
muhtar.bark();
chakki.setAge(12);
System.out.println(muhtar.getAge());
System.out.println(chakki.getAge());
}
}
И в той же директории создал Dog.java и код из неё:
public class Dog {
private static int age = 10;
public static void bark() {
System.out.println("Gaf Gaf");
}
public static int getAge() {
return age;
}
public static void setAge(int age) {
this.age = age;
}
}
И когда пытался скомпилировать в командной строке выдаёт ошибку:
.\Dog.java:19: error: non-static variable this cannot be referenced from a static context
this.age = age;
^
1 error
Вопросы:
Помогите разобраться и понять)))
Когда вы объявляете переменную как static
, она принадлежит всему классу целиком, а не каждому объекту. И существует эта переменная в единственном экземпляре, сколько бы ни было экземпляров класса.
Вот это — возраст всех собак вообще. У вас на двух собак — один возраст. Не годится, потому что у собак бывают разные возраста.
private static int age = 10;
А этот метод устанавливает возраст всех собак разом:
public static void setAge...
А нужен возраст каждой отдельно взятой собаки из класса собак:
private int age = 10;
Далее: this.age
означает значение переменной age
в данном конкретном (this
) экземпляре класса. Но вы выполняете этот код в статическом методе, принадлежащем классу. Поскольку метод относится ко всему классу, конкретные экземпляры ему неизвестны.
Поэтому возникает ошибка “non-static variable this cannot be referenced from a static context”. Дословно: вы обращаетесь к нестатической переменной, но делаете это без уважения из статического контекста, и это не имеет смысла.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть activity с картой, при нажатии на карту происходит асинхронный запрос и возвращаются данные JSONОдно из полей - адрес
Допустим, есть строки А, Б, В, Я, ВПосле добавления в какую коллекцию в ней будет только А, Б, В, Я? Или велосипед писать?
Пытаюсь запустить shell скрипт из java, но ничего не происходитОбычный txt запускается без проблем