#java #class #oop
#java #класс #ооп
Вопрос:
Какие различия между obj1 и obj2 продемонстрированы ниже:
Class<ClassName> obj1 = ClassName.class;
ClassName obj2 = new ClassName();
Комментарии:
1. Во-первых, это разные типы.
2. Да, я новичок, может быть, оба они равны; Мне любопытно, равен ли их тип, какой из них лучше с точки зрения производительности, вызывает ли obj1 конструктор или нет
3. Нет, они не равны. Разница в том, что они означают очень разные вещи. Это вообще не проблема с производительностью. Прочитайте ответ Мурейника.
4.
Class<ClassName>
по сути, это просто метаданные класса, с которыми вы бы не работали (в не продвинутых вариантах использования). Вторая строка вызывает конструктор и возвращает объект, с которым вы можете работать5. @Denisa Но
obj
тогда это был бы экземплярClass
, а не экземплярAnnotationExample
.Class
Объект используется для описания класса во время выполнения и является частью API отражения Java. Если вы не понимаете разницы, то есть разницы между данными и метаданными, то выполнение логики отражения выходит далеко за рамки вашего текущего уровня, и вам следует вернуться, чтобы узнать об отражении позже. Отражение — это сложная тема.
Ответ №1:
obj2
является экземпляром ClassName
класса. obj1
является экземпляром java.lang.Class
, представляющим ClassName
класс.
Комментарии:
1. Возможно, указание на то, что это
obj2.getClass()
также возвращаетobj1
, может сделать это более понятным.2. Класс похож на трафарет или шаблон. С помощью этого шаблона вы можете создавать отдельные объекты, используя
new
ключевое слово. Все, что помеченоstatic
ключевым словом, привязывается к трафарету, в то время как все остальное привязывается к созданным объектам. Вызовobj.getClass()
просто возвращает шаблон, который использовался для создания объекта.3. Спасибо всем друзьям, становится понятнее