Отражение это процесс изучения или изменения поведения класса во время выполнения . API отражения Java используется для управления классом и его членами, которые включают поля, методы, конструктор и т. д. во время выполнения. В этой статье мы подробно разберемся в Java Reflection API.
магистр, аспирантура
В этой статье основное внимание будет уделено следующим указателям:
- Где используется Java Reflection API?
- Класс в пакете java.lang.reflect
- Методы, используемые в java.lang.Class
- Как получить объект класса Class?
- Преимущества и недостатки использования Java Reflection API
Итак, давайте начнем с этих указателей в этой статье о Java Reflection API.
Где используется Java Reflection API?
Reflection API в основном используется в:
- IDE (интегрированная среда разработки), например Eclipse, MyEclipse, NetBeans и т. Д.
- Отладчик
- Инструменты тестирования и т. Д.
Так что же такое класс в Java lang.
Класс в пакете java.lang.reflect?
Ниже приведен список различных классов Java в java.lang.package для реализации отражения.
- Поле : Этот класс используется для сбора декларативной информации, такой как тип данных, модификатор доступа, имя и значение переменной.
- Метод : Этот класс используется для сбора декларативной информации, такой как модификатор доступа, тип возвращаемого значения, имя, типы параметров и тип исключения метода.
- Строитель : Этот класс используется для сбора декларативной информации, такой как модификатор доступа, имя и типы параметров конструктора.
- редактировать : Этот класс используется для сбора информации о конкретном модификаторе доступа.
Нет, давайте взглянем на методы Java Reflection API,
Методы, используемые в java.lang.Class
Метод | Описание |
общедоступная строка getName () | возвращает имя класса |
публичный статический класс forName (String className) выбрасывает ClassNotFoundException | загружает класс и возвращает ссылку на класс Class. |
public Object newInstance () выбрасывает InstantiationException, IllegalAccessException | создает новый экземпляр. |
публичное логическое значение isInterface () | проверяет, является ли это интерфейсом. |
публичное логическое значение isArray () | проверяет, является ли это массивом. |
публичное логическое значение isPrimitive () | проверяет, примитивен ли он. |
публичный класс getSuperclass () | возвращает ссылку на класс суперкласса. |
public Field [] getDeclaredFields () выбрасывает SecurityException как использовать пространство имен в c ++ | возвращает общее количество полей этого класса. |
общедоступный метод [] getDeclaredMethods () выбрасывает SecurityException | возвращает общее количество методов этого класса. |
public Constructor [] getDeclaredConstructors () выбрасывает SecurityException | возвращает общее количество конструкторов этого класса. |
общедоступный метод getDeclaredMethod (String name, Class [] parameterTypes) выбрасывает NoSuchMethodException, SecurityException | возвращает экземпляр класса метода. |
Как получить объект класса Class?
Есть 3 способа получить экземпляр класса Class. Вот они:
- forName () метод класса Class
- getClass () класса Object
- синтаксис .class
forName () метод класса Class
- используется для динамической загрузки класса.
- возвращает экземпляр класса Class.
- Его следует использовать, если вы знаете полное имя класса. Его нельзя использовать для примитивных типов.
Давайте посмотрим на простой пример метода forName ().
class Simple {} class Test {public static void main (String args []) {Class c = Class.forName ('Simple') System.out.println (c.getName ())}}
Вывод:
просто
Отражение Java: метод API getClass () класса Object
Он возвращает экземпляр класса Class. Его следует использовать, если вы знаете тип. Более того, его можно использовать с примитивами.
class Simple {} class Test {void printName (Object obj) {Class c = obj.getClass () System.out.println (c.getName ())} public static void main (String args []) {Simple s = new Simple () Test t = new Test () t.printName (s)}}
Вывод:
просто
Синтаксис .class
Если тип доступен, но нет экземпляра, то можно получить класс, добавив «.class» к имени типа. Его также можно использовать для примитивного типа данных.
class Test {public static void main (String args []) {Class c = boolean.class System.out.println (c.getName ()) Class c2 = Test.class System.out.println (c2.getName ()) }}
Вывод:
логический
Тестовое задание
А теперь давайте продолжим эту статью об API отражения Java.
Преимущества и недостатки использования Java Reflection API
Преимущества использования Java Reflection API
- Возможности расширяемости: Приложение может использовать внешние, определяемые пользователем классы, создавая экземпляры объектов расширяемости, используя их полностью определенные имена.
- Инструменты отладки и тестирования : Отладчики используют свойство отражения для проверки частных членов в классах.
Недостатки использования Java Reflection API
- Накладные расходы на производительность: Отражающие операции имеют более низкую производительность, чем их неотражающие аналоги, и их следует избегать в разделах кода, которые часто вызываются в приложениях, чувствительных к производительности.
- Открытие внутренних органов: Отражающий код нарушает абстракции и, следовательно, может изменить поведение при обновлении платформы.
На этом мы подошли к концу статьи о Java Reflection API. Если вы хотите узнать больше,проверить от Edureka, надежной компании онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы научить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.
Есть вопрос к нам? Пожалуйста, укажите это в комментариях к этой статье, и мы свяжемся с вами в ближайшее время.