Class.forName("com.mysql.jdbc.Driver")的问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 07:46:10
为什么Class.forName("com.mysql.jdbc.Driver")和Class.forName("com.mysql.jdbc.Driver").newInstance()都能成功啊,有什么区别吗?
我说的是:
为什么Class.forName("com.mysql.jdbc.Driver")和Class.forName("com.mysql.jdbc.Driver").newInstance()都能成功啊,有什么区别吗?
为什么没有人懂我的意思,是我的表达有问题?

newInstance就只是返回一个该类实例化的对象。
public Driver{
public Dirver(){}
public Driver newInstance(){
return new Dirver();
}
}大致就是这样,你可以选择是直接new一个对象,还是用函数调用的方式产生一个对象。
像newInstance()这种符合工厂模式的函数是为了降低系统耦合度而设计的。具体来说,就是通过函数的方法来注入依赖值,而不是手动的new出来。

补充:看来楼主没仔细看,我那上面的代码不说明一切了么,用Class.forname就是加载它的对象而已,用newInstance也是返回他的对象,还需要说什么?

个人认为二者都能生成一个实例
比如你定义一个类
里边有构造方法
同时可以再定义一个方法newInstance()--单例模式,让这个方法返回这个类的一个实例
这样构造方法和返回实例的方法不就都能生成实例了。

new一个实例出来实际上是两步完成,加载类到jvm,执行静态方法,最后才能得到实例。
Class.forName("com.mysql.jdbc.Driver");就是只完成加载和静态方法的执行,Class.forName("com.mysql.jdbc.Driver").newInstance()则包含第一种方法的过程,并返回一个实例,但是其实没必要,因为你并没有去直接使用这个实例。连接mysql你需要做的只是保证driver加载到内存中了。

只要能成功就够了!!!