Reflectie is een proces voor het onderzoeken of wijzigen van het runtime-gedrag van een klas tijdens runtime . Java Reflection API wordt gebruikt om klassen en zijn leden te manipuleren, waaronder velden, methoden, constructor, enz. tijdens runtime. In dit artikel zullen we Java Reflection API in detail begrijpen.
Dit artikel gaat in op de volgende punten:
- Waar wordt de Java Reflection API gebruikt?
- Klasse in het pakket java.lang.reflect
- Methoden die worden gebruikt in java.lang.Class
- Hoe krijg ik het object van Class class?
- Voordelen en nadelen van het gebruik van Java Reflection API
Dus laten we aan de slag gaan met deze tips in dit artikel over Java Reflection API
Waar wordt Java Reflection API gebruikt?
De Reflection API wordt voornamelijk gebruikt in:
- IDE (Integrated Development Environment) b.v. Eclipse, MyEclipse, NetBeans enz.
- Debugger
- Testgereedschap etc.
Dus wat is Class in Java lang reflect-pakket?
Klasse in java.lang.reflect-pakket?
Hieronder volgt een lijst met verschillende Java-klassen in java.lang.package om reflectie-
- Veld : Deze klasse wordt gebruikt om declaratieve informatie te verzamelen, zoals datatype, toegangsmodificator, naam en waarde van een variabele.
- Methode : Deze klasse wordt gebruikt om declaratieve informatie te verzamelen, zoals toegangsmodificator, retourneringstype, naam, parametertypes en uitzonderingstype van een methode.
- Bouwer : Deze klasse wordt gebruikt om declaratieve informatie te verzamelen, zoals toegangsmodificator, naam en parametertypes van een constructor.
- Bewerken : Deze klasse wordt gebruikt om informatie te verzamelen over een bepaalde toegangsmodificator.
Nee, laten we eens kijken naar de Java Reflection API-methoden,
Methoden die worden gebruikt in java.lang.Class
Methode | Omschrijving |
openbare String getName () | geeft de klassenaam terug |
openbare statische Class forName (String className) genereert ClassNotFoundException | laadt de klasse en retourneert de referentie van klasse klasse. java hoe je double converteren naar int |
public Object newInstance () gooit InstantiationException, IllegalAccessException | maakt een nieuwe instantie aan. |
openbare boolean isInterface () | controleert of het een interface is. |
openbare boolean isArray () | controleert of het een array is. |
openbare boolean isPrimitive () | controleert of het primitief is. |
openbare klasse getSuperclass () | geeft de verwijzing naar de superklasse terug. |
public Field [] getDeclaredFields () genereert SecurityException | geeft het totale aantal velden van deze klasse terug. |
openbare methode [] getDeclaredMethods () gooit SecurityException | geeft het totale aantal methoden van deze klasse terug. |
public Constructor [] getDeclaredConstructors () gooit SecurityException | geeft het totale aantal constructors van deze klasse terug. |
openbare methode getDeclaredMethod (Stringnaam, Class [] parameterTypes) genereert NoSuchMethodException, SecurityException | geeft de instantie van de methode-klasse terug. ondiepe kopie versus diepe kopie java |
Laten we verder gaan met artikel,
Hoe krijg ik het object van Class class?
Er zijn 3 manieren om de instantie van Class class te krijgen. Ze zijn als volgt:
- forName () methode van Class class
- getClass () methode van Object klasse
- de .class-syntaxis
forName () methode van Class class
- wordt gebruikt om de klasse dynamisch te laden.
- geeft de instantie van Class class terug.
- Het moet worden gebruikt als u de volledig gekwalificeerde naam van de klasse kent. Dit kan niet worden gebruikt voor primitieve typen.
Laten we eens kijken naar het eenvoudige voorbeeld van de methode forName ().
class Simple {} class Test {public static void main (String args []) {Class c = Class.forName ('Simple') System.out.println (c.getName ())}}
Uitgang:
Gemakkelijk
Java-reflectie: API getClass () - methode van de objectklasse
Het retourneert de instantie van Class class. Het moet worden gebruikt als u het type kent. Bovendien kan het worden gebruikt met primitieven.
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)}}
Uitgang:
Gemakkelijk
De .class-syntaxis
Als een type beschikbaar is, maar er is geen instantie, dan is het mogelijk om een klasse te verkrijgen door '.class' toe te voegen aan de naam van het type. Het kan ook worden gebruikt voor primitief gegevenstype.
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 ()) }}
Uitgang:
boolean
Test
Laten we nu verder gaan met dit artikel over de Java Reflection API
Voordelen en nadelen van het gebruik van Java Reflection API
Voordelen van het gebruik van Java Reflection API
- Uitbreidingsfuncties: Een toepassing kan gebruik maken van externe, door de gebruiker gedefinieerde klassen door instanties van uitbreidingsobjecten te maken met hun volledig gekwalificeerde namen.
- Hulpmiddelen voor foutopsporing en testen : Debuggers gebruiken de eigenschap reflectie om privéleden in klassen te onderzoeken.
Nadelen van het gebruik van Java Reflection API
- Prestaties overhead: Reflecterende bewerkingen presteren langzamer dan hun niet-reflecterende tegenhangers en moeten worden vermeden in secties van code die vaak worden aangeroepen in prestatiegevoelige toepassingen.
- Blootstelling van interne onderdelen: Reflecterende code doorbreekt abstracties en kan daarom het gedrag veranderen bij upgrades van het platform.
Hiermee zijn we aan het einde gekomen van dit artikel over ‘Java Reflection API’. Als u meer wilt weten,bekijk de door Edureka, een vertrouwd online leerbedrijf. Edureka's Java J2EE- en SOA-trainings- en certificeringscursus is ontworpen om u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.
Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van dit artikel en we nemen zo snel mogelijk contact met u op.