forName
和 ClassLoader
都與 Java 類加載器相關,但它們之間有一些關鍵區別。
forName
是 java.lang.Class
類的一個靜態方法,用于動態加載并返回與給定字符串名稱對應的類。這個方法會導致類加載器(ClassLoader)加載指定的類。forName
不僅加載類,還會初始化類,這意味著靜態塊和靜態變量會被執行和初始化。示例:
Class<?> clazz = Class.forName("com.example.MyClass");
ClassLoader
是 Java 中的一個抽象類,用于加載類文件到 Java 虛擬機(JVM)中。它提供了將類文件從文件系統、網絡或其他來源加載到 JVM 的方法。ClassLoader
只負責加載類,不會初始化類。要初始化類,需要調用 Class
類的 newInstance()
方法或使用反射調用構造函數。示例:
ClassLoader classLoader = getClass().getClassLoader();
Class<?> clazz = classLoader.loadClass("com.example.MyClass");
總結:
forName
是一個方法,用于動態加載并初始化類。ClassLoader
是一個抽象類,用于加載類文件。forName
不僅加載類,還會初始化類;而 ClassLoader
只負責加載類,不會初始化類。