Отражение е процес на изследване или модифициране на поведението на времето на изпълнение на клас по време на изпълнение . API за отразяване на Java се използва за манипулиране на класа и неговите членове, които включват полета, методи, конструктор и др. по време на изпълнение. В тази статия ще разберем подробно API за отразяване на Java.
Тази статия ще се фокусира върху следните указатели:
- Къде се използва API за отразяване на Java?
- Клас в java.lang.reflect пакет
- Методи, използвани в java.lang.Class
- Как да получа обекта от клас Class?
- Предимства и недостатъци на използването на Java Reflection API
Така че нека започнем с тези указатели в тази статия за Java Reflection API
Къде се използва API за отразяване на Java?
API за отражение се използва главно в:
- IDE (интегрирана среда за развитие) напр. Eclipse, MyEclipse, NetBeans и др.
- Debugger
- Тестови инструменти и т.н.
И така, какво е Class в Java lang odraža пакета?
Клас в java.lang.reflect пакет?
Следва списък на различни Java класове в java.lang.package за внедряване на отражение-
- Поле : Този клас се използва за събиране на декларативна информация като тип данни, модификатор на достъп, име и стойност на променлива.
- Метод : Този клас се използва за събиране на декларативна информация като модификатор на достъпа, тип на връщане, име, типове параметри и тип изключения на метод.
- Строител : Този клас се използва за събиране на декларативна информация като модификатор на достъпа, име и параметри на конструктор.
- редактиране : Този клас се използва за събиране на информация за определен модификатор на достъп.
Не, нека разгледаме методите на Java Reflection API,
Методи, използвани в java.lang.Class
Метод | Описание |
публичен низ getName () | връща името на класа |
публичен статичен клас за име (String className) изхвърля ClassNotFoundException | зарежда класа и връща референцията на клас Class. |
public Object newInstance () хвърля InstantiationException, IllegalAccessException | създава нов екземпляр. |
публичен булев isInterface () | проверява дали е интерфейс. |
публичен булев isArray () | проверява дали е масив. |
публичен булев isPrimitive () | проверява дали е примитивно. |
публичен клас getSuperclass () | връща препратка към клас суперклас. |
публично поле [] getDeclaredFields () хвърля SecurityException | връща общия брой полета от този клас. |
публичен метод [] getDeclaredMethods () хвърля SecurityException | връща общия брой методи от този клас. |
публичен конструктор [] getDeclaredConstructors () хвърля SecurityException | връща общия брой конструктори от този клас. |
публичен метод getDeclaredMethod (име на низ, клас [] параметърТипове) изхвърля NoSuchMethodException, SecurityException | връща екземпляр на класа на метода. |
Нека продължим напред със статия,
Как да получа обекта от клас Class?
Има 3 начина да получите екземпляра на клас Class. Те са както следва:
- метод forName () от клас Class
- метод getClass () на клас Обект
- синтаксисът на .class
метод forName () от клас Class
- се използва за динамично зареждане на класа.
- връща екземпляра на клас Class.
- Трябва да се използва, ако знаете пълното име на класа. Това не може да се използва за примитивни типове.
Нека да видим простия пример за метода forName ().
class Simple {} Test Test {public static void main (String args []) {Class c = Class.forName ('Simple') System.out.println (c.getName ())}}
Изход:
Просто
Java Reflection: API метод getClass () от клас Обект
Той връща екземпляра на клас 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 Прост () тест t = нов тест () 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
- Натоварване на производителността: Отразяващите операции имат по-ниска производителност от своите неотразяващи колеги и трябва да се избягват в раздели на кода, които често се извикват в приложения, чувствителни към производителността.
- Излагане на вътрешни елементи: Отразяващият код нарушава абстракциите и следователно може да промени поведението с надстройки на платформата.
По този начин стигнахме до края на тази статия за „API за отразяване на Java“. Ако искате да научите повече,вижте от Edureka, доверена компания за онлайн обучение. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен да ви обучи както за основните, така и за разширените Java концепции, заедно с различни Java рамки като Hibernate & Spring.
как да проверите за палиндром в java -
Имате въпрос към нас? Моля, споменете го в раздела за коментари на тази статия и ние ще се свържем с вас възможно най-скоро.