Class.forName(“包名+类名”) ,得到的class(类对象)是经过初始化的,即经过:
- 加载:ClassLoader对象将class字节文件生成class对象
- 链接:校验class对象的安全性和正确性;为类的静态变量初始化内存空间;将常量池中的间接引用转换成直接引用。
- 初始化:激活静态变量和静态代码块,并初始化值。
用途:连接数据库时,Class.forName(“com.mysql.jdbc.Driver”)。
ClassLoader.loadClass(‘类名’), 得到的class(类对象)只是由class字节码文件生成的class对象,没有经过第二,三步。
用途:Spring IOC的资源加载器,获取一些bean的配置文件时,为了加快Spring的初始化,使用的延迟加载技术,即只是将class字节码文件变成class对象,而不去初始化类对象,等到执行代码真正要去生成对象的时候再去链接和初始化类对象,加快Spring的初始化。