Rumah >Java >javaTutorial >Bagaimanakah mekanisme refleksi Java mengubah suai tingkah laku kelas?
Mekanisme refleksi Java membolehkan program mengubah suai gelagat kelas secara dinamik tanpa mengubah suai kod sumber. Dengan mengendalikan kelas melalui objek Kelas, anda boleh membuat contoh melalui newInstance(), mengubah suai nilai medan peribadi, memanggil kaedah peribadi, dsb. Refleksi harus digunakan dengan berhati-hati, walau bagaimanapun, kerana ia boleh menyebabkan tingkah laku dan isu keselamatan yang tidak dijangka serta mempunyai overhed prestasi.
Mekanisme refleksi Java: mengubah suai tingkah laku kelas
Pengenalan
Mekanisme refleksi Java membolehkan program mengakses dan memanipulasi struktur dan tingkah laku kelas. Ini boleh digunakan untuk mengubah suai gelagat kelas secara dinamik tanpa mengubah suai kod sumbernya.
Konsep
Mekanisme refleksi mencipta contoh kelas melalui kaedah Class
对象来操作类。Class
对象提供了对类的方法、字段和注释的访问权限。我们可以使用 newInstance()
.
Kes praktikal: ubah suai nilai medan secara dinamik
Berikut ialah contoh penggunaan refleksi untuk mengubah suai nilai medan:
public class Person { private String name; private int age; } public class Main { public static void main(String[] args) throws Exception { // 创建 Person 类的实例 Class<?> personClass = Class.forName("Person"); Object person = personClass.newInstance(); // 使用反射获取 name 字段 Field nameField = personClass.getDeclaredField("name"); nameField.setAccessible(true); // 设置为可访问,因为该字段是私有的 // 设置 name 字段的值 nameField.set(person, "John Doe"); // 打印修改后的值 System.out.println(nameField.get(person)); // 输出:John Doe } }
Kes praktikal: memanggil kaedah persendirian
Kita juga boleh menggunakan refleksi untuk memanggil :
public class Person { private void doSomething() { ... } } public class Main { public static void main(String[] args) throws Exception { // 创建 Person 类的实例 Class<?> personClass = Class.forName("Person"); Object person = personClass.newInstance(); // 使用反射获取 doSomething() 方法 Method doSomethingMethod = personClass.getDeclaredMethod("doSomething"); doSomethingMethod.setAccessible(true); // 设置为可访问,因为该方法是私有的 // 调用 doSomething() 方法 doSomethingMethod.invoke(person); } }
Nota
Atas ialah kandungan terperinci Bagaimanakah mekanisme refleksi Java mengubah suai tingkah laku kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!