Class.forName()可以没有返回值吗?

最近在看数据库连接池源码的时候遇到了一个问题:

    /*构造方法,做一些初始化工作*/  
    private ConnectionPool() {  
        pool = new Vector<Connection>(poolSize);  
  
        for (int i = 0; i < poolSize; i++) {  
            try {  
                Class.forName(driverClassName);  
                conn = DriverManager.getConnection(url, username, password);  
                pool.add(conn);  
            } catch (ClassNotFoundException e) {  
                e.printStackTrace();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

这是数据库连接池的一个构造函数,发现了这样一行代码觉得有些疑惑:

Class.forName(driverClassName); 

这个是我们常见的反射机制,通过类名获取一个类,但是这里的Class.forName()没有返回值,但是我在JDK文档里查看方法明明是如下定义的:

public static Class forName(String className) throws ClassNotFoundException

具体看看怎么回事,查阅了一番之后发现,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(driverClassName)将对应的driver向DriverManager进行注册就可以了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值