Grundlegende Verwendung der Reflexion
Der Reflexionsmechanismus von Java ist zur Laufzeit verfügbar. Für jede Klasse können Sie alle Eigenschaften und Methoden der Neuklassifizierung kennen. Für jedes Objekt können Sie alle Methoden und Eigenschaften aufrufen. Sie können ihn über den Zeichenfolgennamen einer Klasse abrufen Die Informationen dieser Klasse werden gemäß dem Namen der Methode aufgerufen. Diese Funktion zum dynamischen Abrufen von Informationen und zum dynamischen Aufrufen von Objektmethoden wird als Reflexionsmechanismus der Java-Sprache bezeichnet.
Die Reflexion von Java umfasst hauptsächlich die folgenden Kategorien:
Klassenname | Wirkung |
---|---|
Klasse | Eine Klasse, die Java entspricht |
Methode | Eine Methode, die der Java-Klasse entspricht |
Feld | Entspricht einem Feld der Java-Klasse |
Konstrukteur | Entspricht einer Konstruktionsmethode der Java-Klasse |
Hier betrachten wir die Erfassungsmethode dieser vier Objekte:
//Class对象的获取
Class aClass1 = String.class;
Class aClass2 = "".getClass();
try {
Class aClass3 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Nachdem wir das Class-Objekt erhalten haben, können wir drei weitere Objekte über die Methode des Class-Objekts abrufen:
Method[] methods = aClass1.getMethods();
Method[] methods2 = aClass1.getDeclaredMethods();
Field[] fields = aClass1.getFields();
Field[] fields2 = aClass1.getDeclaredFields();
Constructor[] constructors = aClass1.getConstructors();
Constructor[] constructors2 = aClass1.getDeclaredConstructors();
Deklariert bedeutet, alle Methoden der aktuellen Klasse abzurufen, einschließlich privater Methoden, jedoch nicht der übergeordneten Klasse. Ohne diesen Parameter werden alle öffentlichen Methoden der Klasse abgerufen, einschließlich der öffentlichen Methoden der übergeordneten Klasse.
Dann können wir einige Methoden für diese vier Objekte verwenden, um den Zweck des Erstellens von Objekten, Aufrufen von Methoden, Abrufen von Eigenschaften usw. zu erreichen.
Im Folgenden stellen wir einige Anwendungsszenarien der Reflexion vor.
Rufen Sie systemprivate Methoden auf
try {
Field field = Person.class.getDeclaredField("name");
field.setAccessible(true);
String name = (String) field.get(new Person("Tony",24));
System.out.println(name);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
Nachdem wir das Reflexionsobjekt erhalten haben, das der privaten Eigenschaft oder dem privaten Feld entspricht, können wir die Systemberechtigungsprüfung umgehen, indem wir die setAccessible-Methode aufrufen, um den Zweck des Aufrufs des privaten Felds oder der privaten Methode zu erreichen.
Der Reflection-Aufruf ist in der aktuellen Kompilierungsumgebung nicht vorhanden, es gibt jedoch Klassen in der spezifischen Betriebsumgebung
Beim Programmieren in Java gibt es einige Klassen, die wir in der aktuellen Kompilierungsumgebung nicht haben, aber es gibt diese Klasse in der spezifischen Betriebsumgebung. Dann können wir sie natürlich nicht mit der herkömmlichen Methode aufrufen, aber wir können diese Klasse durch Reflektion und Aufruf erstellen Die darin enthaltenen Methoden und Felder können in der Android-Entwicklung verwendet werden, wenn Sie Middleware-Technologie verwenden (Verwendung von selbst entwickelter Middleware für die Kommunikation zwischen System und App, und schließlich wird Middleware in das System gepackt). Am häufigsten wird jedoch die vom Client in der Middleware verwendete Schnittstelle verfügbar gemacht und zum Aufrufen auf den Client gestellt.