2015-09-26 2 views
1

Не можете понять MyClass.class.getClassLoader(). Что такое .class? Это ссылка class Класс?У каждого определяемого пользователем класса в java есть объект класса Class, связанный с ним? Тогда как это отличается от Reflection?

Тогда в чем разница в получении ClassLoader информации с использованием отражения?

+0

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

+0

@JoseAntonioDuraOlmos Спасибо за разъяснение ... но я все еще сомневаюсь, как это связано Как я могу его увидеть ... как мы можем видеть все методы класса объектов в наших классах? – Satyendra

+0

Не понимаю, что вы имеете ввиду, видя это. Для каждого загружаемого класса JVM создает уникальный объект класса 'Class'. И при компиляции '.class' компилятор генерирует байт-код для получения ссылки на такой объект, который будет создан JVM. –

ответ

2

Имеет ли каждый пользовательский класс в 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.

+0

Спасибо за разъяснение ... .. Я пытаюсь понять, что как объект класса Class ассоциируется и когда он связан, я подразумеваю, какая фаза .Below - это мое понимание: 1) один раз загружается файл .class. JVM создает экземпляр класса Class, который содержит сведения о MyClass.class. До сих пор я понятен. Сейчас если . Теперь не в состоянии понять этот MyClass.class.getClassLoader() – Satyendra

+0

Что вы не можете понять об этом? Вы читали javadoc для метода 'Class.getClassLoader()'? –

+0

Я спросил класс Class Object не о классе объектов. У каждого пользователя, определенного в классе, в java есть связанный с ним объект класса Class, а не класс объекта. – Satyendra

1

Когда вы пишете класс после имени класса, он ссылается на объект класса, который представляет данный класс.

Например, если ваш класс Foo, то Foo.class - это объект, который представляет класс Foo во время выполнения. Это тот же объект, который возвращается методом getClass() любого (прямого) экземпляра Foo.

Foo bar = new Foo(); 
System.out.println(Foo.class.getName()); 
System.out.println(bar.getClass().getName()); 

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

+0

bar.class недоступен, он должен быть Foo.class –

+0

Да, извините (я его изменил). – Kassisdion

+0

Спасибо, я получил ответ ... Я немного смутился ... MyClass.class возвращает экземпляр класса ... Я думал, что класс является некоторым членом поля, поэтому я искал, в каком классе он будет. – Satyendra

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

  • Нет связанных вопросов^_^