В чем разница между созданием объекта с использованием «ClassName.class ;» и «новое имя класса ();» в java?

#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. Спасибо всем друзьям, становится понятнее