加载驱动程序不需要创建一个Driver类的实例,调用Class.forName将自动加载Driver类,如果自己创建实例,将创建一个不必要的副本。
大家认为呢?

解决方案 »

  1.   

    你Class.forName本身返回的就是一个Class对象,还是对象啊
      

  2.   

    事实上它已经创建了一个Driver的实例。在进行注册驱动器的时候它已经创建了一个具体的Driver子类实例,把传入.
      

  3.   

    API文档说:
    static Class<?> forName(String className) 
              Returns the Class object associated with the class or interface with the given string name. 看来果真返回了一个对象啊
      

  4.   

    Class.forName会创建一个代表Driver类的Class对象。
      

  5.   

    Class c = Class.forName(String className);
    c难道不是对象的引用吗?
      

  6.   

    楼主被欺骗了,其实人家在 Class 里面写了一个 static initialization ,它已经创建了一个 Driver 实例并向 DriverManager 注册过了。不要以为你省了一个对象的内存。比如:MyDriver implements Driver {
       
       static {
          DriverManager.registerDriver(new MyDriver());
       }}
      

  7.   

    7 楼正解在 JDBC 中使用 Class.forName 主要是为了加载那个驱动类,JDBC 规范规定 java.sql.Driver 的实现类必须把自己给实例化,然后把自己注册到 DriverManager 中去。根据类加载的规范,在类加载时会先初始化所有的静态成员、块和方法,因此在使用 Class.forName 时能自动执行 static 块中的代码段,因此 JDBC 规范就用这个目的来达到加载驱动的作用。不过从 JDBC 4.0 规范开始,不再需要 Class.forName 来加载驱动了,其会自动搜索类路径自行加载。