2014-11-18 7 views
0

У меня есть сомнение относительно статических переменных. являются статическими переменными, связанными с объектом класса Class (аналогично тому, как переменные экземпляра привязаны к каждому объекту класса)? Я чувствую себя так, так как объект класса класса класса один раз загружается classLoader. Пожалуйста, поправьте меня, если я ошибаюсь.Загружается статическая переменная вместе с объектом класса Class

Благодаря Джаендра

ответ

1

Концептуально статические переменные являются глобальными переменными, а класс, к которому они принадлежат, просто определяет их пространство имен. Вам не нужно вообще держать какой-либо объект, чтобы иметь возможность получить статическую переменную.

Указанная связь между статическими переменными и объектом Class отсутствует. Они не являются его членами и не достигают цели, не прибегая к API отражения. Тот факт, что объект Class является точкой входа в API отражения для класса, является просто совпадением.

+0

Простыми словами, объект класса класса не имеет ничего общего со статическими членами? –

+0

Да, любое отношение является случайным и косвенным. –

2

Класс может быть загружен без инициализируется. Это статическая фаза инициализации, которая устанавливает статические поля. Однако обычно, когда вы используете экземпляр класса, метод класса или экземпляр класса, он уже инициализируется.

+0

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

+1

@jayendrabhatt Это один триггер для инициализации. Создание экземпляра класса также сделает это. –

+1

Вы можете свободно удалить квалификатор «обычно». Невозможно использовать член класса или экземпляр, пока класс не инициализирован. Или вы знаете о некоторых дегенеративных случаях, например, когда инициализация только начинается? –

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