JDBC 连接数据库 中Class.forName的作用

JAVA课上交过jdbc连接数据库。可是老师也没说当中 这样的代码是什么意思:

Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL);

 

很久前 看到一个面试题 大概也是问这几行代码的意思。没去研究。

今天看了java反射机制后 了解了下。大概是这样的。

 

java中一个类被实例化前他首先需要被加载。

加载时 会运行这个类中的static代码。

加载这个环节有什么作用?举个例子:比如说java loader在load一个远程服务器上类A的时候,它会执行类A中的static部分

如:

Class A{

static{

....

date time ;

}

}

此时可以加上时间戳,表示加载时间。

 

回到JDBC的问题:

JDBC规范中要求这个Driver类必须向DriverManager注册自己。

所以在执行

Class.forName("com.mysql.jdbc.Driver");

这行代码时。JVM会加载 名字为 com.mysql.jdbc.Driver的这个Driver类。

而com.mysql.jdbc.Driver 这个类的代码应该是这样的:

Class com.mysql.jdbc.Driver {

static{

// regist self  to DriverManager

}

}

此时,这个Driver类就被加载了,由于静态部分被执行,同时这个Driver也被注册进入了DriverManager中。

PS:此时这个Driver没有被实例化。被实例化的只是描述他结构的类(Class)

在就是第二句代码:
conn = DriverManager.getConnection(URL);

从DriverManager取得连接。

 

这也是reflection的一个作用 实例。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值