Methoden im Unterricht erhalten:
öffentliche Methode [] getMethods (); // Erhalten Sie alle öffentlichen Methoden, einschließlich sich selbst und Erbschaft (Implementierung) - Methode unterstützt nicht Generika <>, dh kein <> wird verfolgt
Öffentliche Methode [] getDeclaredMethods (); // Alle Methoden erhalten (privat, öffentlich, geschützt, haben nichts mit Zugriffsrechten zu tun). Es enthält keine ererbten Methoden, die nach JDK1.8 direkt private Attribute erhalten können. Es besteht keine Notwendigkeit, Berechtigungen festzulegen, aber nur die Methode zur GetDeclaredMethod -Methode muss noch Berechtigungen für Methodenmethoden festlegen.
öffentliche Methode [] getMethod (String MethodName, Klasse <T> ... ParameterTypes); // Mittel zur Erzielung einer bestimmten öffentlichen Methode, einschließlich ererbter Parameter: MethodeName: bedeutet den Namen der erhaltenen Methode
Parametertypen: Klassentyp, der den Parameter der abgerufenen Methode darstellt
öffentliche Methode [] getDeclaredMethod (String MethodName, Klasse <T> ... Parametertype); // Mittel zur Erzielung einer bestimmten Methode in dieser Klasse (privat, geschützt, öffentlich, irrelevant für den Zugriff auf Berechtigungen) und enthält keine erbten Methoden nicht
Klasse clazz = new Person (). GetClass (); Versuchen Sie {// Aufrufen der angegebenen Methode/*@unterdrückungswarnings ("deaktiviert") Methode me = clazz.getDeclaredMethod ("getName", string.class); me.invoke (clazz.newinstance (), "zhangsan"); */// Alle Methoden Methode erhalten [] methods = clazz.getDeclaredMethods (); für (Methode Methode: Methoden) {System.out.println (method.getName ()); }} catch (Ausnahme e) {e.printstacktrace (); }Für Methodenaufrufe mit mehreren Parametern: Die Parametertypen gefolgt von getDeclaredMethod können als formaler Parameter des Klassentyps verstanden werden. Durch Aufrufen von Invoke erfolgt die Zuordnung mehrerer Parameter am besten in das neue Objekt [] {}.
@SuppressWarnings ("Deaktiviert") Methode = clazz.getDeclaredMethod ("getName", neue Klasse [] {String.class, int.class}); method.invoke (new Person (), neues Objekt [] {"Zhangsan", 10});Aufrufen statischer Methoden
Klasse User {public static void staticMethod () {System.out.println ("static mThod invoke");}} z. Es gibt zwei Möglichkeiten, statische Methoden aufzurufen:
1. Da die statische Methode zu allen Instanzobjekten gehört, können Sie ein willkürliches Objekt der Klasse erstellen und über das Objekt aufrufen.
staticMethod.invoke (clz.newinstance ()); // staticMethod hat keine Parameter, sodass der Parameterlisten -Typ nicht ausgefüllt ist.
2. Wenn die zugrunde liegende Methode statisch ist, können Sie den angegebenen OBJ -Parameter ignorieren und den OBJ -Parameter auf NULL festlegen
staticMethod.invoke (null);
Mehr verwandte Inhalte:
Eins: Reflexionskonzept
Sie können Mitgliedervariablen und -Methoden einer bestimmten Klasse über die Klassenklasse erhalten und sie nennen.
2: Erhalten Sie Methoden, Variablen und Konstruktionsmethoden durch Reflexion
@Test // Klassendefinitionsmethode public void testMethod () löst eine Ausnahme aus {@Suppresswarnings ("rawtypes") class clazz = class.forname ("java.lang.String"); Methode [] m = clazz.getDeclaredMethods (); für (int i = 0; i <M.Length; i ++) {System.out.println (m [i] .getName () + " + m [i] .getDeclaringClass ()); }} @Test // Klassendefinition Variable public void testfield () löst eine Ausnahme aus {@Suppresswarnings ("rawtypes") class clazz = class.forname ("java.lang.String"); Field [] fields = clazz.getfields (); für (Feld f: fields) {System.out.println (f.getName ()); }} @Test // den Konstruktor der Klassendefinition durch Reflection public void testConstructor () ausreihen {@Suppresswarnings ("rawttypes") class clazz = class.forname ("java.lang.String"); @SuppressWarnings ("Rawtypes") Constructor [] con = clazz.getConstructors (); für (@Suppresswarnings ("rawtypes") Konstruktor C: cons) {System.out.println (c + "" + c.GetdeclaringClass ()); }}Drei: Rufen Sie die von der Klasse definierte Methode durch Reflexion auf
@Test // nennen Sie die von der Klasse definierte Methode durch Reflection public void testinvokemethod () Ausnahme aus der Ausnahme {class clazz = class.forname ("java.lang.String"); // Definieren Sie die Parametertypklasse [] params = neue Klasse [1]; params [0] = string.class; Methode M = clazz.getDeclaredMethod ("Indexof", Params); // das Parameterobjekt [] p = neues Objekt [1] festlegen; p [0] = "e"; Ganzzahl s = (Integer) M.Invoke ("HelloWorld!", P); System.out.println (s); }