Заметки по Java — Механизм отражения (1)

Java задняя часть Безопасность API

Механизм отражения Java (1)

В сочетании с официальным руководством по отражению Oracle, написанным с помощью JDK8, просмотрите знания об отражении. В конце добавьте небольшой пример.

основное содержание

Основное содержание этого блога состоит в том, чтобы кратко представить концепцию отражения и соответствующий API отражения для получения информации о классе.

концепция отражения

Отражение — это инструмент для получения и изменения поведения приложения во время выполнения. Мое личное понимание состоит в том, что новое — это опережающая операция, зная, что произойдет в существующей системе. Рефлексия обратная, я не знаю, какие классы могут понадобиться в системе, полностью уточнив имя класса, он отражается, когда это необходимо, и внутреннюю информацию о классе можно получить через рефлексию. При разработке фреймворка Java относительно распространено использование технологии отражения.

Преимущества и недостатки отражения

преимущество

  1. Мощная расширяемость, пользователи могут использовать классы, определенные извне, с помощью полных имен классов.
  2. Помогает инструментам разработки IDE получать информацию о коде, разрабатываемом пользователем, и предлагает написать более правильный код.
  3. Инструментам отладки полезно получать информацию о времени выполнения и использовать тестовые среды, такие как Junit.

недостаток

  1. влияют на производительность. Поскольку отражение должно динамически разрешать информацию о классе, оно работает медленнее, чем методы без отражения.
  2. Есть требования к безопасной среде. Для отражения требуются определенные разрешения во время выполнения, которых может не быть в конкретной среде безопасности.
  3. Открытие внутренней упаковки может вызвать некоторые негативные последствия. Например, частные методы, которые не должны вызываться извне, вызываются через отражение.

Получить информацию о классе через отражение

В Java помимо примитивных типов есть ссылочные типы. boolean, int, long, float и т. д. являются основными типами java.lang.String, Java.io.Serializable — это ссылочный тип

получить java.lang.Class

Для каждого типа Java предоставляет класс java.lang.Class для получения информации об атрибутах и ​​методах класса среды выполнения. В то же время java.lang.Class также можно использовать для создания классов и объектов. Если это объектный тип, вы можете получить класс Class с помощью метода getClass(), предоставляемого родительским классом верхнего уровня Object.

"apple".getClass();

Если это базовый тип или общий класс, вы можете использовать метод .class для получения класса Class следующим образом.

int.class;
java.io.PrintStream.class;

После получения полного имени класса вы можете создать класс с помощью Class.forName следующим образом.

Class c = Class.forName("com.coderising.kailuncen.Main");

Получить связанную информацию о классе для класса

Следующие API можно использовать для получения связанной информации о классе класса. Получите информацию о родительском классе класса:

Class.getSuperclass()

Получить информацию о классе-члене класса, за исключением частных:

Class.getClasses()

Получить всю информацию о классе-члене класса, включая частные:

Class.getDeclaredClasses()

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

Class.getDeclaringClass()
java.lang.reflect.Field.getDeclaringClass()
java.lang.reflect.Method.getDeclaringClass()
java.lang.reflect.Constructor.getDeclaringClass()

Если этот класс является анонимным классом, информацию о классе, содержащем его, можно получить с помощью следующего API.

Class.getEnclosingClass()

получить модификатор класса

Классы могут быть украшены различными модификаторами во время выполнения следующим образом. Квалификаторы доступа: общедоступный, защищенный и частный. Модификаторы, требующие переопределения: абстрактные. Затем статические, окончательные, аннотации и т. д. API отражения может использовать следующие методы для доступа к ним.

 Class.getModifiers()
 Class.getAnnotations();

Получить информацию о членах класса

В учебнике Oracle организованы три таблицы, чтобы показать, как получить информацию о членах класса.