📜  Java中的 Class forName(String, boolean, ClassLoader) 方法及示例(1)

📅  最后修改于: 2023-12-03 14:42:45.844000             🧑  作者: Mango

Java中的 Class.forName() 方法介绍

简介

在Java中,Class.forName() 方法用于动态加载类。它接受一个类的全限定名作为参数,返回指定类的Class对象。

该方法提供了一种在运行时动态地加载类的机制,可以根据传入的类名字符串来加载对应的类。它允许在编译时未指定类名的情况下,根据需要来加载和使用类。

方法签名
public static Class<?> forName(String className, boolean initialize, ClassLoader loader) throws ClassNotFoundException
  • className:需要加载的类的全限定名
  • initialize:表示是否进行类的初始化。如果为 true,则执行类的静态初始化块,如果为 false,则不执行静态初始化块。通常情况下,可以将该参数设置为 false。
  • loader:指定用于加载类的ClassLoader。如果未指定,则使用当前线程的上下文ClassLoader。
返回值

返回一个表示指定类的Class对象,如果指定的类找不到,则抛出ClassNotFoundException异常。

示例代码
public class Main {

    public static void main(String[] args) {
        try {
            // 使用 Class.forName() 方法加载类
            Class<?> cls = Class.forName("com.example.MyClass");

            // 输出类的全限定名
            System.out.println("类名:" + cls.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

上面的示例代码中,使用 Class.forName() 方法加载了名为 com.example.MyClass 的类,并获取了该类的Class对象。然后通过 getName() 方法输出了类的全限定名。

注意:在运行示例代码前,确保类路径下存在 com.example.MyClass 类。可以根据实际情况进行修改。

注意事项
  • Class.forName() 方法只能加载已经存在于类路径下的类。如果类路径下不存在指定的类,则会抛出 ClassNotFoundException 异常。
  • 默认情况下,Class.forName() 方法会初始化加载的类。即会执行类的静态初始化块。可以通过设置 initialize 参数为 false 来禁止初始化操作。
  • 需要注意的是,使用 Class.forName() 方法加载类时,如果指定了 initialize 参数为 false,则可能导致无法调用类的静态成员。在这种情况下,可以使用 ClassLoader.loadClass() 方法来代替。
参考链接