- 简述Class.forName的作用
类加载:
加载:Class.forName() 方法会促使Java虚拟机(JVM)通过类加载器(ClassLoader)查找并加载指定名称的类。类加载过程包括将类的字节码文件(.class 文件)从磁盘或其他来源读取到内存中,并转化为对应的 Class 对象。
类初始化:
初始化:加载类的同时,如果该类尚未初始化(即类的<clinit> 方法尚未执行),Class.forName() 会触发类的初始化过程。初始化包括执行类的静态初始化块、静态字段的初始化以及父类的初始化(如果尚未初始化)。因此,调用 Class.forName() 不仅加载了类,还会确保类的静态初始化工作已经完成。
获取Class对象:
返回Class对象:成功加载并初始化类后,Class.forName() 方法返回代表该类的 Class 对象。Class 对象是Java反射机制的基础,通过它,可以获取类的元信息(如包名、父类、接口、字段、方法等),创建类的实例,调用方法,访问和修改字段等。
典型应用场景:
JDBC驱动加载:在数据库连接建立过程中,常使用 Class.forName() 来加载特定的JDBC驱动类,如 Class.forName("com.mysql.jdbc.Driver")。这会触发驱动类的静态初始化,注册该驱动到 DriverManager 中,使得后续的数据库连接请求能够找到并使用该驱动。
动态类加载与实例化:在需要动态加载、实例化未知类或者实现插件化、热部署等功能的场景下,通过 Class.forName() 加载类,并进一步调用 newInstance() 方法创建类的实例。
反射操作的前置步骤:在进行反射操作前,通常需要先通过 Class.forName() 获取目标类的 Class 对象,然后基于该对象进行反射API调用。
如果大家需要视频版本的讲解,欢迎关注我的B站: