优秀的编程知识分享平台

网站首页 > 技术文章 正文

Loadclass和forName的区别(loadclass和findclass的区别)

nanyue 2024-09-06 20:25:37 技术文章 6 ℃

反射是一个很神奇的东西,在了解loadclass和forname的时候,我们需要提前预习一下反射,这里我们不再赘述。

首先他们都能对运行时任意一个类,都能知道该类的所有属性和方法,对于任意一个对象都能调用他的任意一个属性和方法。

Class.forName得到的class是已经初始化完成的。

ClassLoader.loadClass,得到的class是还没有连接的,只完成了第一步,第二步和第三步都没用去做。

例如:连接mysql。加载一个Driver进来,Driver时,不能用loadclass要用forName,因为com.mysql.jdbc.Driver类中由static代码块,需要调用forName去执行,进而形成一个Driver对象创建我们的数据库驱动。

SpringIOC中,资源加载器获取要读入的资源时,即读取一些bean的配置文件时,如果以classpath方式来加载,就需要使用classLoader.loadClass来加载,之所以这样做是和SpringIOC的loay Loading 有关,我们延迟加载,SpringIOC为了加快初始化速度,因此大量使用了延迟加载技术,而使用loadClass不需要执行类中的初始化代码块这个步骤,还有连接的步骤,这样子做可以加快类加载的速度,把类初始化工作留到实际使用这个类的时候去做,因此,存在即为合理,loadclass和forName同样有很大的作用。

全文完,感谢您的耐心阅读。

最近发表
标签列表