2015-06-12 7 views
-2

Если я ссылаюсь на статическую переменную с именем класса, когда есть один объект, почему это ошибка времени компиляции?Ссылка на нестационарную переменную

Я создал один объект, поэтому один набор нестатической переменной есть в области кучи. Поэтому, если я отношусь к этой нестатической переменной с именем класса, существует только одна нестатическая переменная, поэтому она может ее использовать.

+0

Если вы пишете на языке Java, как бы вы иметь дело с этим? Я имею в виду, что единственное, что у вас есть, это ссылка на статический класс, как бы вы искали экземпляр объекта в куче без ссылки? – deathangel908

+0

Это действительно помогло бы, если бы вы показали короткий, но полный пример, демонстрирующий проблему. –

ответ

1

Событие, если имеет смысл, как компилятор знает, что вы создали только один экземпляр? static variables относится к объектам Class (кстати, это экземпляры класса Class).

1

Во-первых, потому что так оно и есть.

Во-вторых, поскольку во время компиляции никто не знает, будет ли 0, 1 или миллион экземпляров. Кроме того, это приведет к чрезвычайно запутанному коду, когда вы не можете определить, относится ли что-то к статической переменной или «переменной одного экземпляра».

1

Допустим, вы могли бы это сделать, и не было ошибки времени компиляции. Как мог компилятор узнать, какая ссылка на переменные при наличии более одного экземпляра? Приведение вашей теории на практике только для одного экземпляра приведет к бессмысленному поиску сложного кода.

Если вам нужна дополнительная информация и вам нужна перспектива программиста, прочитайте спецификацию Java Language и спецификацию JVM, чтобы узнать, как указано управление памятью.

https://docs.oracle.com/javase/specs/

+0

Я пытаюсь спросить, если я ссылаюсь на нестационарную переменную, я должен ссылаться только на ссылочную переменную. Но если я ссылаюсь на имя класса (например, ClassName.nonStaicVariable = 100;), почему он показывает ошибку? – iAbhilashM

+0

Если я создал 2 или более экземпляра, то компилятор может смутить, какую нестатистическую переменную, к которой я пытаюсь обратиться. Но для одного экземпляра он мог бы использовать этот. – iAbhilashM

+0

Предположим, что это возможно, но зачем менять всю модель доступа только для 1 экземпляра. Полученный код и правила будут сложными. Программирование - это решение проблем, изящно не демпинг плохого решения. –

Смежные вопросы