必威体育Betway必威体育官网
当前位置:首页 > IT技术

Class.forName()、Class.forName().newInstance() 、New 三者区别!

时间:2019-08-24 01:10:00来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

class.forname

java开发特别是数据库开发中,经常会用到class.forname( )这个方法。

通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。

在加载完成后,一般还要调用Class下的newinstance( )静态方法来实例化对象以便操作。

因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。 

这里有必要提一下就是Class下的newInstance()和new有什么区别?

首先,newInstance( )是一个方法,而new是一个关键字

其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数

而使用 new关键字生成对象没有这个限制。 

我们总结如下: 

  Class.forName("")返回的是类 

  Class.forName("").newInstance()返回的是object 

数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用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());
        }
    }
}

相关阅读

你清楚品牌策略,营销策略和传播策略之间的区别吗?

即使是经验最丰富的品牌营销人员有时也会出现错误的品牌术语。一方面,一些术语被错误地交替使用(例如,品牌战略和沟通策略),另一方面

Java Exception 异常机制 (1)--throws 和 throw 区别

throws e 运用在方法标签后面:如下 public class Math { public int method01(int i,int j)throws Exception{ int c

独立IP、特产浏览量(PV)、访问次数(VV)、独立访客(UV)有什么

转自 http://blog.sina.com.cn/s/blog_a5fc76bb0101073a.html 访问次数(VV):记录所有访客1天内访问了多少次您的特产,相同的访客有可

淘宝心选和天猫有什么区别吗?如何设置淘宝心选?

对于很多刚入淘宝的人来说,常常会比较疑惑为什么别人的详情页中都有掌柜推荐,为何我的却没有呢?这里就要提到一个功能“心选”,心选

和 区别

首先,<a> 标签 + οnclick='{jscode}' 是很常用的一种 js 运用方式,而不使用 href='javascript:{jscode}' 是为了兼容多种浏览器对

分享到:

栏目导航

推荐阅读

热门阅读