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
替换为你要实例化的类的实际全限定名。