ClassReflectionDemo
Kopieren Sie den Codecode wie folgt:
Paket Reflexion;
@Veraltet
öffentliche Klasse ReflectionDemo {
privater String pri_field;
öffentlicher String pub_field;
public ReflectionDemo(){}
public ReflectionDemo(String name){}
private ReflectionDemo(String name,int int1){}
public void ReflectMethod(){}
public void ReflectMethod(String str){}
private void ReflectMethod(int int1){}
Klasse innerclss_Refection{}
}
TestklasseReflectionDemoTest
Kopieren Sie den Codecode wie folgt:
Paket Reflexion;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
öffentliche Klasse ReflectionDemoTest {
public static void main(String[] args) {
//Erstellen Sie ein Klassenobjekt und verwenden Sie generische Änderungen, um eine erzwungene Übertragung zu vermeiden
Klasse cla=ReflectionDemo.class;
//Methode zum Abrufen aller öffentlichen Felder
Field[] field=cla.getFields();
for(Feld f:Feld){
System.out.println("Methode zum Abrufen aller öffentlichen Felder:"+f.toString());
}
//Methode zum Erhalten einer angegebenen öffentlichen Domäne
versuchen {
Feld field1=cla.getField("pub_field");
System.out.println("Methode zum Abrufen des angegebenen öffentlichen Felds:"+field1.toString());
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
} Catch (NoSuchFieldException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Methode zum Abrufen aller Domänen (einschließlich privater Domänen), deklarieren
Field[] field2=cla.getDeclaredFields();
for(Feld f:field2){
System.out.println("Methode zum Abrufen aller Felder (einschließlich privater Felder):"+f.toString());
}
//Methode zum Abrufen der angegebenen Domäne (einschließlich privater Domäne)
versuchen {
Feld field3=cla.getDeclaredField("pri_field");
System.out.println("Methode zum Abrufen des angegebenen Felds (einschließlich privatem Feld):"+field3.toString());
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
} Catch (NoSuchFieldException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Alle öffentlichen Methoden abrufen (einschließlich übergeordneter Klassen)
Methode[] method=cla.getMethods();
for(Methode m:Methode){
System.out.println("Alle öffentlichen Methoden abrufen:"+m.toString());
}
versuchen {
//Die angegebene Methode ohne Parameter abrufen
// Der zweite Parameter gibt den Parametertyp an und der Parameter NUll gibt die Parameterlose Methode an.
Methode method1=cla.getMethod("ReflectMethod", null);
System.out.println("Holen Sie sich die Methode der öffentlichen Methode ohne Parameter:"+method1.toString());
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
} Catch (NoSuchMethodException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Methode zum Abrufen aller Methoden dieser Klasse (außer der übergeordneten Klasse)
Methode[] method2=cla.getDeclaredMethods();
for(Methode m:method2){
System.out.println("Alle Methoden abrufen (einschließlich übergeordneter Klassen):"+m.toString());
}
//Erhalte die Methode der angegebenen Methode dieser Klasse (ohne übergeordnete Klasse)
//Der erste Parameter ist der Methodenname, der zweite Parameter ist der Rückgabetyp der Methode und NULL ist die Methode ohne Parameter.
versuchen {
Methode method3=cla.getDeclaredMethod("ReflectMethod",int.class);
System.out.println("Holen Sie sich die Methode der angegebenen Methode dieser Klasse (mit Ausnahme der übergeordneten Klasse):"+method3);
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
} Catch (NoSuchMethodException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Den öffentlichen Konstruktor abrufen
//Den öffentlichen Konstruktor ohne Parameter abrufen
versuchen {
Konstruktor cs=cla.getConstructor(null);
System.out.println("Den parameterlosen Konstruktor abrufen:"+cs);
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
} Catch (NoSuchMethodException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Den öffentlichen Konstruktor mit Parametern abrufen
//Wenn es einen Konstruktor mit mehreren Parametern gibt, gibt es mehrere Konstruktoren. Achten Sie auf die Reihenfolge.
versuchen {
Konstruktor cs=cla.getConstructor(String.class);
System.out.println("Den parametrisierten Konstruktor abrufen:"+cs);
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
} Catch (NoSuchMethodException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Alle Konstruktionsmethoden abrufen
versuchen {
Constructor[] cs=cla.getDeclaredConstructors();
for(Konstruktor c:cs){
System.out.println("Alle Konstruktionsmethoden abrufen:"+c);
}
} Catch (SecurityException e) {
// TODO Automatisch generierter Catch-Block
e.printStackTrace();
}
//Den Paketnamen abrufen
Paket pack=cla.getPackage();
System.out.println("Den Namen des aktuellen Pakets abrufen:"+pack);
//Kommentare erhalten
Annotation[] ann=cla.getAnnotations();
for(Annotation an:ann){
System.out.println(an.toString());
}
//Erhalte die übergeordnete Klasse
Klasse supercla=cla.getSuperclass();
System.out.println(supercla);
//Innere Klasse abrufen
Class[] innercla=cla.getDeclaredClasses();
for(Klasse cl:innercla){
System.out.println(cl);
}
}
}
Zusammenfassung: Schritte zum Abrufen von Informationen zu Klassenobjekten:
1. Erstellen Sie ein Klassenobjekt. Methode 1 Klasse cla=Class.forName(“PATH”) Methode 2 CLass cla=Instance.getclass();
2. Verwenden Sie Feld, Methode, Konstruktor, Paket und Anmerkung, um relevante Informationen zu erhalten, indem Sie die Methode cla.getXXXX aufrufen.
3. Die Methoden zum Erhalten von übergeordneten Klassen und inneren Klassen unterscheiden sich geringfügig.
4. Bei Verwendung von cla.getMethods werden alle öffentlichen Methoden der Klasse und der übergeordneten Klasse aufgerufen.
5. Bei Verwendung von Declared werden alle Methoden der Klasse aufgerufen, auch private Methoden. Dasselbe gilt für Domänen und Konstruktoren.
6. Wenn die Reflexionsklasse keinen öffentlichen Konstruktor hat und die newInstance-Methode nicht direkt verwenden kann, verwenden Sie
Methode cs=cla.getMethod("getInstance",null);//Methode abrufen
Kalender Calendar=(Calendar) cs.invoke(cla, null);// Führen Sie die erhaltene Methode aus, Parameter 1 ist das Objekt der Ausführungsmethode, Parameter 2 repräsentiert die Parameter der Methode
Datum df=calendar.getTime();
System.out.println(df.toString());
zu bekommen.