#java
Учусь программировать по учебнику и попытался понять принципы ООП. Написал следующий код в 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 Вопросы: Почему так происходит? И когда я пытался скомпилировать без методов, просто меняя значение age напрямую, то у меня менялись значения обоих объектов muhtar и chakki, то есть они были равны последнему значению. Отсюда и вопрос почему значения переменных двух объектов(muhtar, chakki) были равны последнему измененному значению. Ведь я создал класс Dog и объявил 2 объекта(muhtar, chakki), и думал что значения будут для этих объектов отдельными и разными. Но, видимо, я что-то не так понял. Помогите разобраться и понять)))
Ответы
Ответ 1
Чем отличается static и не-static Когда вы объявляете переменную как static, она принадлежит всему классу целиком, а не каждому объекту. И существует эта переменная в единственном экземпляре, сколько бы ни было экземпляров класса. Вот это — возраст всех собак вообще. У вас на двух собак — один возраст. Не годится, потому что у собак бывают разные возраста. private static int age = 10; А этот метод устанавливает возраст всех собак разом: public static void setAge... А нужен возраст каждой отдельно взятой собаки из класса собак: private int age = 10; Причины ошибки “non-static variable this cannot be referenced from a static context” Далее: this.age означает значение переменной age в данном конкретном (this) экземпляре класса. Но вы выполняете этот код в статическом методе, принадлежащем классу. Поскольку метод относится ко всему классу, конкретные экземпляры ему неизвестны. Поэтому возникает ошибка “non-static variable this cannot be referenced from a static context”. Дословно: вы обращаетесь к нестатической переменной, но делаете это без уважения из статического контекста, и это не имеет смысла.
Комментариев нет:
Отправить комментарий