日期:2014-05-20  浏览次数:20713 次

JDBC class.forName 生成的实例与DriverManger注册的实例是不是同一个?
Class.forName("com.mysql.jdbc.Driver");   
是加载并生成一个com.mysql.jdbc.Driver实例。
与 DriverManager中注册的
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()   
 }   
}  

是否为同一个实例?

代码看来是new的一个新的。请大神解释下原因?
是否我对Class.forName("com.mysql.jdbc.Driver");   理解有误

即初始化与实例化的区别?
jdbc

------解决方案--------------------
Class.forName("com.mysql.jdbc.Driver");   只加载类
Class.forName("com.mysql.jdbc.Driver").newInstance();   实例化对象

Class.forName("")是为了加载类,从而调用里面的静态代码块,然后注册驱动


------解决方案--------------------
Class.forName
其实也是调用了loadClass的方法。
然后又做了一些数据加载的操作,但是构造方法是未执行的,