Heim >Java >javaLernprogramm >Welche Bedeutung und Rolle hat Reflexion in Java?
Reflexion (Reflexion) ist der Schlüssel zur Betrachtung als dynamische Sprache. Der Reflexionsmechanismus ermöglicht es dem Programm, die internen Informationen jeder Klasse während der Ausführung abzurufen Betreiben Sie die internen Eigenschaften und Methoden eines beliebigen Objekts. Nach dem Laden der Klasse wird im Methodenbereich des Heapspeichers ein Objekt vom Typ Klasse generiert (eine Klasse hat nur ein Klassenobjekt. Dieses Objekt enthält die vollständigen Strukturinformationen der Klasse). Wir können die Struktur der Klasse durch dieses Objekt sehen. Dieses Objekt ist wie ein Spiegel. Wir können die Struktur der Klasse durch diesen Spiegel sehen, also nennen wir es anschaulich.
java.lang.Class
: stellt eine Klasse darjava.lang.Class
:代表一个类
java.lang.reflect.Method
:代表类的方法
java.lang.reflect.Field
:代表类的成员变量
java.lang.reflect.Constructor
:代表类的构造器
static Class forName(String name)
返回指定类名 name 的 Class 对象
Object newInstance()
调用无参构造函数,返回该Class对象 的一个实例
getName()
返回此Class对象所表示的实体(类、 接口、数组类、基本类型或void)名称
Class getSuperClass()
返回当前Class对象的父类的Class对象
Class [] getInterfaces()
获取当前Class对象的接口
ClassLoader getClassLoader()
返回该类的类加载器
Class getSuperclass()
返回表示此Class所表示的实体的超类的Class
Constructor[] getConstructors()
返回一个包含某些Constructor对象的数组
Field[] getDeclaredFields()
返回Field对象的一个数组 Method
getMethod(String name,Class … paramTypes)
java.lang.reflect.Method
: stellt die Methode der Klasse dar java.lang.reflect.Field
: Stellt die Mitgliedsvariablen der Klasse dar
java.lang.reflect.Constructor
: Stellt den Konstruktor der Klasse dar
static Class forName(String name )
Gibt das Class-Objekt mit dem angegebenen Klassennamen zurück 🎜🎜Object newInstance()
Ruft den Konstruktor ohne Argumente auf und gibt eine Instanz des Class-Objekts zurück 🎜🎜getName() Gibt den Namen der Entität (Klasse, Schnittstelle, Array-Klasse, Basistyp oder void) zurück, die durch dieses Klassenobjekt dargestellt wird🎜🎜Class getSuperClass()
Gibt das Klassenobjekt zurück der übergeordneten Klasse des aktuellen Klassenobjekts🎜🎜Class [] getInterfaces()
Ruft die Schnittstelle des aktuellen Klassenobjekts ab🎜🎜ClassLoader getClassLoader()
Gibt den Klassenlader von zurück die Klasse🎜🎜Class getSuperclass()
Gibt die Klasse zurück, die die Oberklasse der durch diese Klasse repräsentierten Entität darstellt🎜🎜Constructor[] getConstructors()
Gibt ein Array zurück, das einige Constructor-Objekte enthält 🎜🎜Field[] getDeclaredFields()
code> Gibt ein Array von Feldobjekten zurück. Method🎜🎜getMethod(String name,Class ... paramTypes)
Gibt ein Methodenobjekt zurück, das Der formale Parametertyp dieses Objekts ist paramType🎜🎜Beispiel: 🎜public class Person { private String name; private int age; public Person() { System.out.println("Person类被初始化了。。。。。^_^"); } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }🎜Reflection🎜
public class ClassDemo { public static void main(String[] args) throws Exception { // 1. 创建Class对象 //Class<Person> clazz = (Class<Person>) Class.forName("Person"); Class<?> clazz =Class.forName("Person"); // 2. 通过Class对象调用其方法 // 2.1. 通过反射来实例化对象 //Person person = clazz.newInstance(); Object o = clazz.newInstance(); // 此名就相当于 Person p = new Person() // 2.2. 获取类的完整类名称(包名+类名) String name = clazz.getName(); System.out.println(name); // 2.3. 获取类的简单名称,就是类的名称,不含包名 System.out.println(clazz.getSimpleName()); // 2.4. 获取构造器 Constructor<?>[] constructors = clazz.getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor.getName()); } // 2.5. 获取字段 Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field.getName()); } // 2.6. 获取方法 Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method.getName()); } } }🎜3. Vier Möglichkeiten, Klassenobjekte zu erstellen🎜
public class Demo { public static void main(String[] args) throws Exception { // 第一种方式:调用Class.forName() Class clazz =Class.forName("java.lang.String"); // 第二种方式:通过类的字节码文件来创建 Class clazz1 = String.class; // 第三种方式:通过调用对象的getClass()方法来创建 String str = new String(); Class clazz2 = str.getClass(); // 第四种:通过类装载器来创建 ClassLoader loader =String.class.getClassLoader(); Class<?> clazz3 =loader.loadClass("java.lang.String"); } }
Das obige ist der detaillierte Inhalt vonWelche Bedeutung und Rolle hat Reflexion in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!