Class.forName
是Java中的一个静态方法,用于动态加载类并返回该类的Class
对象。以下是Class.forName
方法的主要特点和使用场景:
方法签名
public static Class<?> forName(String className) throws ClassNotFoundException
参数
-
className
:类的全限定名,包括包名和类名。
返回值
- 返回一个
Class
对象,表示加载的类。
行为
-
加载类 :
Class.forName
会使用当前线程的上下文类加载器加载指定的类。 -
初始化类 :默认情况下,加载类时会执行类的静态初始化块和静态变量的赋值。
使用场景
-
动态加载类 :在运行时根据条件加载不同的类。
-
加载数据库驱动程序 :例如在使用JDBC连接数据库时,使用
Class.forName
加载数据库驱动程序。 -
加载配置文件中的类 :在配置文件中指定类名,然后使用
Class.forName
加载类。
注意事项
- 如果在Java 9及以后的版本中,推荐使用
Class.forName(String className, boolean initialize, ClassLoader loader)
方法,以提供更细粒度的控制,包括是否初始化和使用自定义类加载器。
示例代码
try {
Class<?> clazz = Class.forName("java.util.ArrayList");
// 可以使用clazz对象进行进一步操作,如创建实例、访问方法等
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
异常处理
- 如果指定的类不存在或无法访问,
Class.forName
会抛出ClassNotFoundException
异常。
类的搜索顺序
-
调用程序集
-
当前加载到当前应用程序的AppDomain中的所有程序集
-
应用程序配置(.config)文件指定的程序集
-
应用程序的ApplicationBase目录
-
应用程序配置文件指定的目录中找到的所有托管DLL
总结
Class.forName
方法允许在运行时动态加载和初始化Java类,是Java反射机制的重要组成部分,常用于需要动态行为或配置的场景