装载一个类并且对其进行实例化的操作。装载过程中使用到的类加载器是当前类。为了详细描述,Class.forName()
方法,这里使用 classLoader.loadClass()
进行对比描述
Class.forName(String className)
使用装载当前类的类装载器来装载制定的类,因为 class.forName(String name)
方法内部调用了 Class.forName(className,true,this.getClass().getClassLoader())
方法
classLoader.loadClass(StringclassName,boolean resolve);
需要手动制定装载器的实例。
Class.forName(className)
装载的class已经被实例化,classLoader.loadClass()
则只是将信息装载给 JVM。在 JDBC 中 Class.forName("com.mysql.jdbc.Driver")
,如果换成 getClass().getClassLoader().loadClass("com.mysql.jdbc.Driver")
,就不可以,因为它只是想 JVM 装载了 Driver 的类信息,但是没有实例化,也就不能执行相应的操作,因为 Driver 是需要被初始化才能被使用的。
原文链接:Class.forName()的作用