Учебное пособие по Java Reflection API с примером
Что такое отражение в Java?
Java Reflection — это процесс анализа и изменения всех возможностей класса во время выполнения. API Reflection в Java используется для управления классом и его членами, включая поля, методы, конструктор и т. д., во время выполнения.
Одним из преимуществ API отражения в Java является то, что он также может манипулировать частными членами класса.
Пакет java.lang.reflect предоставляет множество классов для реализации отражения java.Методы класса java.lang.Class используются для сбора полных метаданных определенного класса.
В этом уроке вы узнаете-
- Что такое отражение
- Класс в пакете java.lang.reflect
- Методы, используемые в java.lang.Class
- Как получить полную информацию о курсе
- Пример 1. Как получить метаданные класса
- Пример 2. Как получить метаданные переменной
- Пример 3. Как получить метаданные метода
- Пример 4. Как получить метаданные конструкторов
Класс в пакете java.lang.reflect
Ниже приведен список различных классов Java в java.lang.package для реализации отражения-
- Поле :этот класс используется для сбора декларативной информации, такой как тип данных, модификатор доступа, имя и значение переменной.
- Метод :этот класс используется для сбора декларативной информации, такой как модификатор доступа, тип возвращаемого значения, имя, типы параметров и тип исключения метода.
- Конструктор :этот класс используется для сбора декларативной информации, такой как модификатор доступа, имя и типы параметров конструктора.
- Модификатор :этот класс используется для сбора информации о конкретном модификаторе доступа.
Методы, используемые в java.lang.Class
- Открытая строка getName() :возвращает имя класса.
- открытый класс getSuperclass() :возвращает ссылку на суперкласс.
- Открытый класс[] getInterfaces() :возвращает массив интерфейсов, реализованных указанным классом.
- Общедоступный в getModifiers(): Возвращает целочисленное значение, представляющее модификаторы указанного класса, которое необходимо передать в качестве параметра в «public static String toString (int i )» метод, который возвращает спецификатор доступа для данного класса.
Как получить полную информацию о классе
Чтобы получить информацию о переменных, методах и конструкторах класса, нам нужно создать объект класса.
04
Пример 1. Как получить метаданные класса
В следующем примере показано, как получить такие метаданные, как:имя класса, имя суперкласса, реализованные интерфейсы и модификаторы доступа класса.
Мы получим метаданные нижеприведенного класса с именем Guru99Base.class:
13
- Имя класса:Guru99Base
- Его модификаторы доступа:public и abstract
- В нем реализованы интерфейсы:Serializable и Cloneable
- Поскольку он не имеет явного расширения какого-либо класса, его суперклассом является:java.lang.Object
Нижеприведенный класс получит метаданные Guru99Base.class и распечатает их:
21
- напечатать имя класса с помощью метода getName
- Выведите имя суперкласса, используя метод getSuperClass().getName()
- Вывести название реализованных интерфейсов
- Вывести модификаторы доступа, используемые классом
Пример 2. Как получить метаданные переменной
В следующих примерах показано, как получить метаданные переменной:
Здесь мы создаем класс с именем Guru99VariableMetaData .class с некоторыми переменными:
35Действия для получения метаданных о переменных в указанном выше классе:
- Создайте объект класса указанного выше класса, например Guru99VariableMetaData.class, как показано ниже:
43
- Получите метаданные в виде массива полей с помощью getFields(). или getDeclaredFields() методы, как показано ниже:
51
получить поля() метод возвращает метаданные общедоступной переменной из указанного класса, а также из его суперкласса.
получитьобъявленные поля() метод возвращает метаданные всех переменных только из указанного класса.
<старт ="3">Здесь xxx может быть байтом или меньше значения любого типа, которое мы хотим получить.
Здесь мы пишем класс для получения метаданных переменных, присутствующих в классе Guru99VariableMetaData .class:
64
- Создан объект класса для Guru99VariableMetaData.class
- Получить все метаданные переменных в массиве полей
- Выведены все имена переменных в классе Guru99VariableMetaData.class
- Выведены все типы данных переменных в классе Guru99VariableMetaData.class
- Выведены все модификаторы доступа переменных в классе Guru99VariableMetaData.class
- Выведены значения всех переменных в Выведены все типы данных переменных в классе Guru99VariableMetaData.class
Пример 3. Как получить метаданные метода
В следующих примерах показано, как получить метаданные метода:
Здесь мы создаем класс с именем Guru99MethodMetaData .class с некоторыми методами
76
Действия для получения метаданных о методах в указанном выше классе:
- Создайте объект класса указанного выше класса, например Guru99MethodMetaData.class, как показано ниже:
82
- Получить информацию о методе в массиве Method с помощью методов getMethods() и getDeclaredMethods(), как показано ниже:
92
получить методы() метод возвращает метаданные общедоступных методов из указанного класса, а также из его суперкласса.
getDeclaredMethods() метод возвращает метаданные всех методов только из указанного класса.
- Получите имя метода, используя getName() метод.
- Получить тип возвращаемого значения метода с помощью getReturnType() метод.
- Получение модификаторов доступа к методам с помощью getModifiers() и Modifiers.toString(int i) методы.
- Получить типы параметров метода с помощью getParameterTypes() метод, который возвращает массив классов.
- Получить исключение с помощью getExceptionTypes() метод, который возвращает массив классов.
Здесь мы пишем класс для получения метаданных методов, присутствующих в классе Guru99MethodMetaData.class:
100пре>
- Создан объект класса для Guru99MethodMetaData.class
- Получить все метаданные всех методов в массиве методов
- Выведены все имена методов, присутствующие в классе Guru99MethodMetaData.class
- Вывод типов возвращаемых значений методов класса Guru99MethodMetaData.class
- Выведены все модификаторы доступа методов класса Guru99MethodMetaData.class
- Типы печатных параметров методов в Guru99MethodMetaData.class
- Печатные исключения создаются методами в Guru99MethodMetaData.class
![]()
![]()
Пример 4. Как получить метаданные конструкторов
В следующих примерах показано, как получить метаданные конструкторов:
Здесь мы создаем класс с именем Guru99Constructor.class с разными конструкторами:
117Здесь мы пишем класс для получения метаданных конструкторов, присутствующих в классе Guru99Constructor.class:
123
- Создан объект класса для Guru99Constructor.class
- Получить все метаданные всех конструкторов в массиве Constructor
- Выведены имена всех конструкторов, присутствующих в классе Guru99Constructor.class
- Выведены все модификаторы доступа конструкторов в классе Guru99Constructor.class
- Печатные типы параметров конструкторов в Guru99Constructor.class
- Печатные исключения генерируются конструкторами в Guru99Constructor.class
![]()
![]()
Обзор:
- Программирование рефлексии в Java помогает извлекать и изменять информацию о классах и членах классов, таких как переменные, методы, конструкторы.
- Reflection API в Java можно реализовать с помощью классов в пакете java.lang.reflect и методов класса java.lang.Class.
- Некоторые часто используемые методы класса java.lang.Class:getName(), getSuperclass(), getInterfaces(), getModifiers() и т. д.
- В пакете java.lang.reflect часто используются классы Field, Method, Constructor, Modifier и т. д.
- Reflection API может получать доступ к закрытым методам и переменным класса, что может представлять угрозу безопасности.
- Reflection API — это мощная функция, предоставляемая Java, но она сопряжена с некоторыми накладными расходами, такими как снижение производительности, уязвимость системы безопасности и проблемы с разрешениями. Следовательно, API отражения следует рассматривать как последнее средство для выполнения операции.
java
- Анонимный класс Java
- Java-отражение
- Класс Java ObjectInputStream
- Класс Java ObjectOutputStream
- Класс C++ и объект с примером
- Учебное пособие по абстрактному классу C # с примером:что такое абстракция?
- Метод Java String charAt() с примером
- Метод Java String endWith() с примером
- Java BufferedReader:как читать файл в Java с примером
- Алгоритм сортировки вставками в Java с примером программы