首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

动态加载类的形式

2013-10-27 
动态加载类的方式背景知识:类的初始化前还需要有两个阶段:load和连接。连接又分为验证(),准备(类型 内存),

动态加载类的方式

背景知识:类的初始化前还需要有两个阶段:load和连接。连接又分为验证(),准备(类型 内存),解析(符号引用解析成直接引用)三个阶段。

?

动态加载类有java.lang.Class.forName() 和 自定义ClassLoader的loadClass()两种方式。区别是loadClass方式并不能保证类被初始化了(有个带resolve参数的接口已经被废弃了)。而forName方式有个参数initialize=true参数可以保证该类被连接,初始化了。

?

接口如下:

public static Class forName(String className, boolean initialize, ClassLoader loader) throws ClassNotFound Exception;

?

protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException;

?

?

例如JDBC连接时用forName的方式,initialize=true,这样保证了jdbc驱动的静态初始化代码得到运行。从而使驱动程序注册到DriverManager。而不仅仅是被加载。

?

一个mysql驱动加载的例子是:

??? Class.forName("com.mysql.jdbc.Driver");??

等价于:

???? Class.forName("com.mysql.jdbc.Driver", true,? this.getClass().getClassLoader());??

热点排行