Имеет ли каждый пользовательский класс в java связанный с ним объект Class
?
Да. И каждая система также определяет класс. (Хотя объект Class
не может быть создан, пока вы не попытаться получить его ссылку.)
не в состоянии понять MyClass.class.getClassLoader()
. Что такое .class
? Является ли это ссылкой класса класса?
Да. Или, точнее, это ссылка типа Class<MyClass>
. Он относится к одному (и только) объекту Class
, который соответствует типу.
Тогда в чем разница в получении ClassLoader информации с помощью отражения?
Есть три различия между
MyClass.class
и
String someClassName = ...
classloader.getClass(someClassName)
или
Class.forName(someClassName)
В первом случае, имя класса неразборное в код, но выражение всегда будет работать , а тип объекта класса, который вы получаете, известен во время компиляции, чтобы быть Class<MyClass>
.
Во втором и третьем (эквивалентных) случаях имя класса может быть переменной времени выполнения, но выражение может не работать (поскольку, например, названный класс не существует), и тип известен только во время компиляции Class<?>
.
Однако, считая, что все работает, информация, которую вы получаете (то есть объект Class
), идентична во всех трех случаях.
1 - Это возможно преувеличение. Однако сценарии, в которых вы можете увидеть исключение, включают JVM в состояниях ошибок. У вас должно быть что-то довольно плохое, чтобы увидеть их, например, ловить восстановление с предыдущего ExceptionInInitializerError
или NoClassDefFoundError
.
Каждый класс имеет ассоциированный уникальный объект класса 'Class', который представляет его. Доступ к этому объекту можно получить с помощью '.class' и других средств. '.class' является частью механизма отражения. –
@JoseAntonioDuraOlmos Спасибо за разъяснение ... но я все еще сомневаюсь, как это связано Как я могу его увидеть ... как мы можем видеть все методы класса объектов в наших классах? – Satyendra
Не понимаю, что вы имеете ввиду, видя это. Для каждого загружаемого класса JVM создает уникальный объект класса 'Class'. И при компиляции '.class' компилятор генерирует байт-код для получения ссылки на такой объект, который будет создан JVM. –