Давайте предположим, что вы говорите о том, есть один «экземпляр» из data
и соответствующий статический метод.
Какова область применения статического метода в Java?
1) (уровень Eclipse) Project
No. Исходный код/времени создания "проект" структура имеет непосредственное отношение к поведению во время выполнения программы Java. (Построить проект создает один или несколько .class файлов, как правило, закутанные в JAR или WAR или EAR или любой архивные файлы. Поведение во время выполнения зависит от того, как эти файлов загружаются в JVM.)
2) Применение уровень 3) Уровень JVM
Да, нет, может быть.
Фактическая «область существования» (как кто-то ее описал) зависит от идентичности типа класса. При нормальных обстоятельствах класс загружается в JVM один раз. Это дает вам один тип класса, и есть один экземпляр статических переменных для этого типа.
Однако, если ваши загрузчики классов организованы правильно, вы можете снова загрузить класс. Это дает вам новый тип класса (с тем же именем, что и предыдущий ... но другой загрузчик классов), и этот тип класса имеет свой собственный набор статических переменных.
Приложение, которое запускается с использованием команды java
через свой метод main
, обычно будет загружать только один класс. (Обычно вам нужно создать новый загрузчик классов во время выполнения, чтобы изменить это.)
Однако приложения (например, webapps), которые запускаются в рамках фреймворка, подчиняются тем, что делает инфраструктура. И типичная платформа приложений использует отдельный загрузчик классов для каждого webapp. Поэтому, если вы включаете JAR-файл в несколько веб-приложений и запускаете их на одном сервере приложений, вы, вероятно, получите несколько типов классов с тем же именем и разными загрузчиками классов ... и разными статическими наборами переменных.
Но это не заканчивается там, потому что когда вы вызываете MyClass.getData()
в другом классе (например,OtherClass
), переменная, к которой осуществляется доступ, зависит от того, к которому привязан код MyClass
код OtherClass
. И это зависит от того, что классный загрузчик типа OtherClass
привязал его к ... когда он загрузил класс OtherClass
.
Все это может быть довольно сложным, но, как правило, вам не нужно беспокоиться об этом. Сложность возникает только тогда, когда что-то делает «умный материал загрузчика классов», и даже тогда умный материал обычно реализует разделение «приложений», которое вам нужно , чтобы произошло.
Это не должно компилироваться. Поскольку 'setData' является' static', он не связан с каким-либо конкретным экземпляром 'MyClass'. Но 'data' - это переменная экземпляра, поэтому' setData' ее не увидит. –
Вы имеете в виду доступ к методу setData или доступ к статическим данным, установленным в классе? –
Ни одна из областей, которые вы указали, не является реальным областью. Java не имеет понятия о проекте, поэтому нет понятия «уровень проекта». Самое близкое к областям уровня «уровень приложения» или «уровень JVM» - это общий охват. Я не уверен, что вы подразумеваете под областью «уровня пользователя», но способность пользователя запускать методы определяется логикой программы, а не «public» или «static» модификаторами. – user2357112