cannot be referenced from a static context

Учусь программировать по учебнику и попытался понять принципы ООП. Написал следующий код в Main.java:

И в той же директории создал Dog.java и код из неё:

И когда пытался скомпилировать в командной строке выдаёт ошибку:

  1. Почему так происходит?
  2. И когда я пытался скомпилировать без методов, просто меняя значение age напрямую, то у меня менялись значения обоих объектов muhtar и chakki, то есть они были равны последнему значению. Отсюда и вопрос почему значения переменных двух объектов(muhtar, chakki) были равны последнему измененному значению. Ведь я создал класс Dog и объявил 2 объекта(muhtar, chakki), и думал что значения будут для этих объектов отдельными и разными. Но, видимо, я что-то не так понял.

Помогите разобраться и понять)))

1 ответ 1

Чем отличается static и не-static

Когда вы объявляете переменную как static , она принадлежит всему классу целиком, а не каждому объекту. И существует эта переменная в единственном экземпляре, сколько бы ни было экземпляров класса.

Вот это — возраст всех собак вообще. У вас на двух собак — один возраст. Не годится, потому что у собак бывают разные возраста.

А этот метод устанавливает возраст всех собак разом:

А нужен возраст каждой отдельно взятой собаки из класса собак:

Причины ошибки “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”. Дословно: вы обращаетесь к нестатической переменной, но делаете это без уважения из статического контекста, и это не имеет смысла.

Why non static variable can not be called from static method

How to access non static variable inside static method or block

11 comments :

This rule not only apply to static variable but also on static methods. if you call any non static method inside any static method like main you will get «non static method cannot be referenced from a static context». Same is true for special variables «this» and «super» which are non static and if you use this inside static method you will get «non static variable this cannot be referenced from a static context» or «non static variable super cannot be referenced from a static context».

February 15, 2012 at 7:52 PM Matt said.

Thank you for this resource. Together with other articles on your blog it saved me hours of my life and i’m happy to learn/understand these things more thoroughly!
Matt

This would not work . Non static variables,objects,or any costructor would always give error when referenced from a static context . Not Possible . Because static are meant to be made for the first priority of innitialization . Means STATICS are always innitialize first. Thats-why main is always static . Becoz main is the entry point and it must be run first so the remaining class can execute . And non statics are low priority . They only executes when they called .In other words we can say STATIC is predefine and non statics are user define ,according to will . To differentiate between static and non static and also to resolve the problem of clashig between STATICS and NON-STATICS every platform gives this utility . Yup this is a utility

June 18, 2013 at 12:11 PM Pushkar said.

Hello Javin, can you please help with how to call a non static method from main method in Java. I am getting the same error «non-static method getDate() cannot be referenced from a static context», I need this method from main, which is static method. Please advise.

код ошибки : Error:(4, 9) java: non-static variable e cannot be referenced from a static context?

не понял почему возникла ошибка (раньше такого не было. ) так как до этого момента я мог спокойно пользоваться переменными из поля класса

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: