Java Reflection API: alles wat u moet weten



Dit artikel laat je kennismaken met Java Reflection API en helpt je ook met demonstratie hoe Reflection werkt in Java en wat het precies is

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:





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.