Heim > Java > javaLernprogramm > Hauptteil

Welche Bedeutung und Rolle hat Reflexion in Java?

WBOY
Freigeben: 2023-04-21 15:16:08
nach vorne
1450 Leute haben es durchsucht

1. Reflexion im Überblick

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.

2. Häufig verwendete APIs

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 +
            '}';
    }
}
Nach dem Login kopieren
🎜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());
        }
    }
}
Nach dem Login kopieren
🎜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");
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage