Class.forName()、Class.forName().newInstance() 和 New 区别
来源:互联网 发布:java获取qq聊天记录 编辑:程序博客网 时间:2024/05/11 00:19
Class.forName(“”)
表示动态加载某个类,只是完成类的加载工作。
Class.forName(“”).newInstance()
表示动态加载某类后,调用无参构造函数生成实例对象
JDBC的Driver加载
有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
刚才提到,Class.forName(“”);的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码 段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:
public class MyJDBCDriver implements Driver { static { DriverManager.registerDriver(new MyJDBCDriver()); }}
既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
贴出Proxool 连接池的静态初始化方法:
public class ProxoolDriver implements Driver { private static final Log LOG = LogFactory.getLog(ProxoolDriver.class); static { try { DriverManager.registerDriver(new ProxoolDriver()); } catch (SQLException e) { System.out.println(e.toString()); } }}
Class.forName是用Mysql还是Oracle,这个Driver一定会实现接口java.sql.Driver,然后通过DriverManager.registerDriver(new Driver());使DriverManager类持有一个Driver。
是否可以把DriverManager当成桥,当成桥连接中的抽象类?然后持有一个接口Driver,至于是Mysql还是Oracle,不关心,坐等传参。因为DriverManager持有的是一个Driver接口,你传过来什么,我就得到什么的实例化,然后我再通过getConnection用你的实例,去调用你自己的方法connect,去获得Connection的一个实例。
- Class.forName()、Class.forName().newInstance() 和 New 区别
- Class.forName new 和newInstance
- .class、Class.forName()、Class.forName().newInstance() 、New 区别!
- Class.forName()、Class.forName().newInstance() 、New 三者区别
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Class.forName(),newInstance(),New 三者区别
- Class.forName().newInstance()和通过new得到对象的区别
- JDBC的Class.forname()和Class.forname().newInstance的区别
- class.forname().newInstance() 和 class.forname()
- Class.forName().newInstance()与new
- new、Class.forName、class.newInstance性能比较
- Class.forName new 区别
- class.forName() 和new
- 南工程聊天室客户端源码
- 自适应LMS算法的C语言时实实现
- 《谷歌和亚马逊如何做产品》读书笔记之三:赢在用户体验
- 条款34:区分接口继承和实现继承
- 暑期社会实践调查新闻稿
- Class.forName()、Class.forName().newInstance() 和 New 区别
- c语言遍历字符串数组的方法
- 第四周--项目3-单链表的应用2
- PendingIntent详解
- leetcode---Path Sum II---回溯
- 在ubuntu14.04上安装cuda时会遇到的几个问题
- Tablayout的简单使用
- 【android】R cannot be resolved to a variable
- PendingIntent详解