Bahasa Java ialah bahasa pengaturcaraan berorientasikan objek, yang mempunyai kelebihan platform merentas yang baik dan penyelenggaraan yang mudah. Mekanisme refleksi bahasa Java ialah ciri penting bahasa Java Ia membolehkan program memperoleh maklumat secara dinamik tentang kelas tertentu pada masa jalan dan menggunakan kaedah dan atribut yang disediakan oleh kelas, dengan itu meningkatkan kebolehskalaan dan fleksibiliti program. Artikel ini akan memperkenalkan penggunaan refleksi bahasa Java.
Mekanisme pantulan ialah mekanisme dinamik dalam bahasa Java, yang membolehkan pengaturcara mendapatkan maklumat kelas secara dinamik semasa menulis kod, termasuk pembina kelas, kaedah dan sifat, dsb. Mekanisme refleksi bahasa Java terutamanya terdiri daripada tiga kelas: Kelas, Pembina dan Kaedah. Antaranya, Kelas mewakili jenis kelas, Pembina mewakili pembina kelas, dan Kaedah mewakili kaedah kelas.
Melalui objek kelas Kelas, kita boleh mendapatkan maklumat lengkap kelas, termasuk nama kelas, kelas induk, antara muka, kaedah pembina, kaedah ahli, atribut ahli, anotasi, dsb. Contohnya, kod berikut menunjukkan mendapatkan nama kelas dan nama kelas induk bagi sesebuah kelas:
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } public class Main { public static void main(String[] args) { Class<Person> pClass = Person.class; System.out.println("类名:" + pClass.getName()); System.out.println("父类名:" + pClass.getSuperclass().getName()); } }
Dalam kod di atas, kami memperoleh jenis Person.class
kelas Orang melalui Class
, dan kemudian gunakan mendapat nama kelas, dan kaedah getName()
mendapat kelas induk kelas, akhirnya mengeluarkan nama kelas dan nama kelas induk. getSuperClass()
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void sayHello() { System.out.println("Hello, my name is " + name); } } public class Main { public static void main(String[] args) throws Exception { Class<Person> pClass = Person.class; // 获取所有构造器 Constructor<?>[] constructors = pClass.getDeclaredConstructors(); // 获取指定的构造器 Constructor<?> constructor = pClass.getDeclaredConstructor(String.class, int.class); // 新建对象 Person person = (Person) constructor.newInstance("Tom", 20); // 获取所有成员变量 Field[] fields = pClass.getDeclaredFields(); // 获取指定的成员变量 Field field = pClass.getDeclaredField("name"); // 修改成员变量的值 field.setAccessible(true); field.set(person, "Jerry"); // 获取所有成员方法 Method[] methods = pClass.getDeclaredMethods(); // 获取指定的成员方法 Method method = pClass.getDeclaredMethod("sayHello"); // 调用成员方法 method.invoke(person); } }Dalam kod di atas, kami menggunakan kaedah
untuk mendapatkan semua pembina kelas Orang, dan kemudian gunakan getDeclaredConstructors()
untuk mendapatkan Pergi ke pembina yang ditetapkan dan gunakan kaedah getDeclaredConstructor(String.class, int.class)
untuk mencipta objek baharu. Seterusnya, kami menggunakan kaedah newInstance()
untuk mendapatkan semua pembolehubah ahli kelas Orang, gunakan kaedah getDeclaredFields()
untuk mendapatkan pembolehubah ahli yang ditentukan dan gunakan kaedah getDeclaredField("name")
untuk memanggil pembolehubah ahli persendirian. Akhir sekali, kami menggunakan kaedah setAccessible(true)
untuk mendapatkan semua kaedah ahli kelas Orang, gunakan kaedah getDeclaredMethods()
untuk mendapatkan kaedah ahli yang ditentukan, dan gunakan kaedah getDeclaredMethod("sayHello")
untuk memanggil kaedah ahli. invoke()
Atas ialah kandungan terperinci Cara menggunakan refleksi bahasa Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!