Вопрос об отражении пакета - PullRequest
2 голосов
/ 15 марта 2011

Я прочитал с сайта Sun, что для каждой ссылки jvm создает один неизменный объект класса так что он может анализировать информацию о времени выполнения каждого класса. И Sun упомянул об использовании синтаксиса .class. Я хочу знать внутренний механизм этого синтаксиса и как он работает.

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Если скомпилировано с -target 1.4 или ранее, Class.forName(String) вызывается один раз, а затем ссылка Class сохраняется в синтетическом статическом поле в вызывающем классе. Для -target 1.5 и более поздних версий новая версия операции байт-кода ldc («постоянная загрузки») ссылается на класс.

Используйте javap -c, чтобы увидеть байт-код, который генерирует javac.

1 голос
/ 15 марта 2011

Вы можете начать с учебник по отражению

Синтаксис .class объяснен на этой странице (нет, он не объясняетработа)

0 голосов
/ 15 марта 2011

Для каждого неуниверсального (или необработанного) типа (Класс, интерфейс, тип массива, тип примитива) существует объект Class, созданный при загрузке этого класса.Этот объект не является полностью неизменным, так как он содержит статические переменные класса, например.

Если у вас есть объект, вы можете получить объект класса его реализующего класса, вызвав o.getClass().Если у вас есть какой-то тип, вы можете получить его объект класса с помощью T.class в Java.

Из объекта класса вы можете проверить свой класс, получить конструкторы, методы, поля, суперкласс, реализованные интерфейсы и т.on - это называется отражением.

(подробности см. по ссылкам в других ответах.)

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