class aclass = class.forname(xxx.xx.xx);
object aninstance = aclass.newinstance();
class.forname("").newinstance()返回的是object
but there is some limit for this method to create instance
that is your class constructor should no contain parameters,
and you should cast the instance manually.
class driver{
protected static driver current;
public static driver getdriver(){
return current;
}
}
class mydriver extends driver{
static{
driver.current=new mydriver();
}
mydriver(){}
} |
用时:
class.forname("mydriver");
driver d=driver.getdriver();c |
有的jdbc连接数据库的写法里是class.forname(xxx.xx.xx);而有一些:class.forname(xxx.xx.xx)。newinstance(),为什么会有这两种写法呢?
class.forname(xxx.xx.xx) 返回的是一个类,
。newinstance() 后才创建一个对象
class.forname(xxx.xx.xx);的作用是要求jvm查找并加载指定的类,也就是说jvm会执行该类的静态代码段
在jdbc规范中明确要求这个driver类必须向drivermanager注册自己,即任何一个jdbc driver的driver类的代码都必须类似如下:
public class myjdbcdriver implements driver {
static {
drivermanager.registerdriver(new myjdbcdriver());
}
} |
所以我们在使用jdbc时只需要class.forname(xxx.xxx);就可以了
在jdbc驱动中,有一块静态代码,也叫静态初始化块,它执行的时间是当class调入到内存中就执行(你可以想像成,当类调用到内存后就执行一个方法)。所以很多人把jdbc driver调入到内存中,再实例化对象是没有意义的。
闽公网安备 35060202000074号