Я знаю, что в java статические методы могут использовать только статические переменные и статические методы, но нестатические методы могут использовать нестатические переменные и методы. есть ли какое-либо объяснение, почему статические методы могут обращаться к статическим переменным/методам? и не может получить доступ к нестационарным методам и переменным?Статические методы и переменные
ответ
для доступа к нестационарным методам/полям требуется экземпляр класса.
... по определению. –
Но ОП хочет знать * почему *. Это какое-то произвольное правило, или есть причина? Нам надлежит объяснять «да, есть очень важная причина». ИМХО... – paulsm4
Если понимать, что означает 'static' (а не просто изучать правила), то причина должна быть очевидной. –
Подумайте об этом:
а) Предположим, что вы статический метод.
b) Вы существуете независимо от любого экземпляра объекта. Вы существуете, даже если нет экземпляра класса NO.
c) Вы хотите получить доступ к нестатической переменной. Переменная, которая существует в ОДНОМ и ТОЛЬКО одном экземпляре объекта - переменная, которая ОПРЕДЕЛЕНА к ЭТОМУ ОПРЕДЕЛЕННОМУ экземпляру объекта.
d) Какую быстатическую переменную экземпляра объекта вы собираетесь использовать ???
Статические методы МОЖЕТ получить доступ к нестационарным членам классов ... при условии, что они делают это через ссылку на класс.
В противном случае - нет ссылки на класс - нет доступа.
Имеют смысл? ;)
Когда вы создаете экземпляр класса, он будет загружен в кучу или стек. В этом случае ваше приложение имеет ссылки на те части экземпляров памяти. Однако статические методы - это просто функции, загруженные в память. Вот почему, если ваш статический метод хочет получить доступ к переменной класса или методу, он не может просто вызвать его, потому что может быть несколько ссылок на этот класс в куче вопреки одному и только одному статическому методу.
Если вы хотите вызвать какой-либо нестатический метод из статического метода, вы должны использовать экземпляр (или создать его) для этого класса, чтобы вы могли определить, какую ссылку на класс вы действительно имеете в виду.
В статическом контексте ключевое слово «это» недоступно. мы не можем использовать это ключевое слово в статическом контексте. Переменные экземпляра инициализируются при вызове конструктора. Но статические переменные инициализируются при загрузке класса. во время загрузки класса переменные экземпляра все еще не идентифицируются в течение этого времени, если мы используем переменные экземпляра в статическом контексте, это приводит к ошибке времени компиляции, потому что в это время они не идентифицированы.
- 1. Статические переменные и методы
- 2. Статические переменные и методы python
- 3. CoffeeScript Наследование: Статические переменные/методы
- 4. Статические конечные переменные элемента и методы get
- 5. Статические методы и переменные в экземплярированных классах
- 6. Программирование на интерфейс - Статические методы и переменные?
- 7. Неизменяемость и статические переменные
- 8. Могут ли нестатические методы изменять статические переменные
- 9. Статические методы или нет? Глобальные переменные?
- 10. статические члены Повсеместно статические методы
- 11. PowerMockito и статические методы
- 12. Статические и нестатические методы
- 13. Статические методы и массивы
- 14. Репозиторий и статические методы
- 15. Нитки и статические методы
- 16. Статические методы и полиморфизм
- 17. Когда использовать статические переменные/методы и когда использовать переменные/методы экземпляра в Java?
- 18. Статические переменные и многопоточность
- 19. наследование и статические переменные
- 20. $ _POST и статические переменные
- 21. статические и внешние переменные
- 22. Публичные и статические переменные
- 23. Резьба и статические переменные
- 24. Статические переменные и функции
- 25. glfwGetTime() и статические переменные
- 26. PowerMock, где статические методы вызывают статические методы
- 27. Статические инициализаторы и статические методы в Java
- 28. Переопределение статические переменные/методы и их использование в базовом классе
- 29. Вопрос удаления() экземпляра класса и его статические методы/переменные
- 30. Статические или нестатические переменные и методы Android Studio
Возможный дубликат [Нельзя ссылаться на статическая функция?] (http://stackoverflow.com/questions/8029845/cannot-be-referenced-from-a-static-function) –
Это не дубликат, содержание моего вопроса совершенно другое. – KyelJmD
Ответы на этот вопрос одинаково хорошо подходят к этому вопросу. –