Java的反射機制是指在程序運行時能夠獲取和操作目標類的所有信息的方式,包括類的屬性、方法、構造器等。使用反射機制可以在運行時動態地獲取或修改對象的信息,從而實現動態組裝、動態調用以及代碼動態生成等功能。
//反射動態調用方法示例 Class clazz = MyObject.class; Method method = clazz.getMethod("doSomething", String.class, Integer.class); Object result = method.invoke(new MyObject(), "hello", 123); System.out.println(result);
在Java程序中,類的加載是通過類加載器完成的。類加載器是負責將二進制的.class文件加載到內存中,并構造出對應的Class對象的組件。Java應用程序使用的類加載器分為三個等級:啟動類加載器、擴展類加載器和應用程序類加載器。啟動類加載器是虛擬機自身的一部分,負責加載Java API類庫。擴展類加載器負責加載Java平臺擴展類庫,如jre/lib/ext目錄下的jar文件。應用程序類加載器負責加載應用程序自身的類文件,如classpath下的.class文件。
//自定義類加載器示例 public class MyClassLoader extends ClassLoader { private String classPath; public MyClassLoader(String classPath) { super(); this.classPath = classPath; } @Override protected Class>loadClass(String name, boolean resolve) throws ClassNotFoundException { Class>clazz = null; if (name.startsWith("com.example")) { // 自定義類文件的包名 byte[] classData = loadClassData(name); clazz = defineClass(name, classData, 0, classData.length); } else { clazz = super.loadClass(name, resolve); } if (resolve) { resolveClass(clazz); } return clazz; } private byte[] loadClassData(String name) { // 從指定路徑中加載類文件并返回byte數組 } }