服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java知识:class.forname的含义

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调入到内存中,再实例化对象是没有意义的。

扫描关注微信公众号