Refleksi (refleksi) adalah kunci untuk dianggap sebagai bahasa dinamik Mekanisme refleksi membolehkan program mendapatkan maklumat dalaman mana-mana kelas dengan bantuan API Refleksi semasa pelaksanaan, dan boleh mengendalikan sebarang objek dan kaedah dalaman secara langsung. Selepas kelas dimuatkan, objek jenis Kelas dijana dalam kawasan kaedah memori timbunan (kelas hanya mempunyai satu objek Kelas Objek ini mengandungi maklumat struktur kelas yang lengkap). Kita boleh melihat struktur kelas melalui objek ini. Objek ini adalah seperti cermin.
java.lang.Class
: mewakili kelas
java.lang.reflect.Method
: mewakili kaedah kelas
java.lang.reflect.Field
: mewakili pembolehubah Ahli kelas
java.lang.reflect.Constructor
: Mewakili pembina kelas
static Class forName(String name)
Mengembalikan objek Kelas bagi nama kelas yang ditentukan
Object newInstance()
Memanggil pembina tanpa parameter dan mengembalikan Contoh objek Kelas
getName()
Mengembalikan nama entiti (kelas, antara muka, kelas tatasusunan, jenis asas atau tidak sah) yang diwakili oleh objek Kelas ini
Class getSuperClass()
Mengembalikan objek Kelas semasa Objek Kelas kelas induk
Class [] getInterfaces()
Mendapat antara muka objek Kelas semasa
ClassLoader getClassLoader()
Mengembalikan pemuat kelas kelas
Class getSuperclass()
Mengembalikan perwakilan Kelas Kelas ini
Constructor[] getConstructors()
kelas super entiti yang diwakili Mengembalikan tatasusunan yang mengandungi beberapa objek Pembina
Field[] getDeclaredFields()
Mengembalikan tatasusunan Kaedah objek medan
getMethod(String name,Class … paramTypes)
Mengembalikan objek Kaedah Jenis parameter formal objek ini ialah paramType
Contoh:
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 + '}'; } }
Refleksi
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()); } } }
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"); } }
Atas ialah kandungan terperinci Apakah maksud dan peranan refleksi di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!