jdbc

关于jdbc的用法很多教程,但是教程上都没有说过关于开头的驱动的写法的原因,自己去找了一下资料,这里稍作探讨。

1.png

这是很多教材上的驱动的写法,但很少人去说为什么要用Class.forName("com.mysql.jdbc.Driver");这一句,而DriverManager.getConnection()这个接口,是如何实现的。

package com.mysql.jdbc   
  
public class Driver extends NonRegisteringDriver implements java.sql.Driver {   
 // ~ Static fields/initializers   
 // --------------------------------------------- //   
 // Register ourselves with the DriverManager   
 //   
 static {   
    try {   
              java.sql.DriverManager.registerDriver(new Driver());   
          } catch (SQLException E) {   
              throw new RuntimeException("Can't register driver!");   
          }   
  }   
// ~ Constructors   
 // -----------------------------------------------------------   
/**  
  * Construct a new driver and register it with DriverManager  
  *   
  * @throws SQLException  
  *             if a database error occurs.  
  */  
 public Driver() throws SQLException {   
     // Required for Class.forName().newInstance()   
 }   
}  

先看看Driver的源码,源码上可以看到Driver在被调用的时候就被生成了一个实例。Class.forName()返回与给定的字符串名称相关联类或接口的Class对象,Class.forName是一个静态方法,同样可以用来加载类。forName这句话就是装载类用的(new是根据加载到内存中的类创建一个实例,要分清楚)。
Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。
com.mysql.jdbc.Driver在装载完后自动帮我们完成了这一步骤

你可能感兴趣的:(jdbc)