Class.forName()
是 Java 反射機制中的一個方法,用于動態加載類并返回與給定字符串名稱對應的 Class
對象。這允許你在運行時加載和實例化類,而不需要在編譯時知道類的名稱。
以下是使用 Class.forName()
進行類實例化的步驟:
Class.forName()
方法加載類。Class
對象的 newInstance()
方法創建類的實例。示例代碼:
public class Main {
public static void main(String[] args) {
try {
// 獲取類的全限定名
String className = "com.example.MyClass";
// 使用 Class.forName() 方法加載類
Class<?> clazz = Class.forName(className);
// 使用 newInstance() 方法創建類的實例
Object instance = clazz.newInstance();
// 調用實例的方法(如果有的話)
// Method method = clazz.getMethod("myMethod");
// method.invoke(instance);
System.out.println("類實例化成功: " + instance);
} catch (ClassNotFoundException e) {
System.err.println("找不到指定的類: " + e.getMessage());
} catch (InstantiationException | IllegalAccessException e) {
System.err.println("無法實例化類: " + e.getMessage());
}
}
}
注意:從 Java 9 開始,Class.newInstance()
方法已被棄用,建議使用 Class.getDeclaredConstructor().newInstance()
替代。以下是更新后的示例代碼:
public class Main {
public static void main(String[] args) {
try {
// 獲取類的全限定名
String className = "com.example.MyClass";
// 使用 Class.forName() 方法加載類
Class<?> clazz = Class.forName(className);
// 使用 getDeclaredConstructor().newInstance() 方法創建類的實例
Object instance = clazz.getDeclaredConstructor().newInstance();
// 調用實例的方法(如果有的話)
// Method method = clazz.getMethod("myMethod");
// method.invoke(instance);
System.out.println("類實例化成功: " + instance);
} catch (ClassNotFoundException e) {
System.err.println("找不到指定的類: " + e.getMessage());
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
System.err.println("無法實例化類: " + e.getMessage());
}
}
}
請確保將 com.example.MyClass
替換為你要實例化的類的實際全限定名。