Какова область действия публичной переменной? - PullRequest
0 голосов
/ 29 октября 2019

В языке, подобном Java, область видимости переменной обычно определяется ближайшими фигурными скобками. (Существуют синтаксические исключения, такие как объявления в инициализаторе цикла for и заголовке метода.) Такие переменные недоступны вне их области действия.

Как насчет открытых переменных экземпляра? Статические правила области видимости говорят, что они локальны для класса или объекта. Но они доступны извне класса. Я преподаю начинающим студентам, и правила области видимости для переменных экземпляров не так однозначны.

Как программист, работающий в течение длительного времени, эта разница очевидна для меня. Какое хорошее объяснение для первокурсника Java?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

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

И, конечно, когда речь идет о статике, существует также ClassLoader, в котором этот классзагружается для рассмотрения, поскольку статическая область видимости не приводит к утечке данных вне контекста ClassLoader, а это означает, что 2 экземпляра класса, каждый из которых содержится в своем собственном ClassLoader, не разделяют свои статические члены.

Этопозволяет каждому из двух загрузчиков ClassLoader иметь экземпляр класса X, один со статическим датамемером y со значением "1", а другой со статическим датамембертом y со значением "2".

Обычно они не будут виднывне их соответствующих ClassLoaders, но может быть возможно получить доступ к ним каким-либо образом (я никогда не пробовал, таким образом, безумие).

Конечно, проблемы ClassLoader, как правило, выходят за рамки вводного программированияКонечно:)

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

И частные, и открытые члены существуют в пределах контекста их содержащего экземпляра класса, если только они не являются статическими, в этом случае они существуют в пределах контекста их содержащегоClass (который существует в контексте определенного ClassLoader, как уже упоминалось).

0 голосов
/ 29 октября 2019

Скажите им, что открытая переменная доступна из любой точки пакета

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...