在java连接数据库的时候,必不可少的一个操作,Class.forName();
这样就是用到了java的反射机制,加载了数据库驱动的类,
但是问题就是,我只是加载了,但是没有具体的调用啊,下面紧接着就是DriverManage的使用了,
没有把相应的Class.forName()赋值给一个Class的实例对象,那么在内存里面他是具体怎么实现的呢?

解决方案 »

  1.   

    意思是把那个类的类型加载到类加载器去,然后通过DriverManage去实例化一个实例
      

  2.   

    Class.forName(); 会导致JVM装载该目标类的类定义。这又会触发什么呢?会触发目标类static操作,那么目标类的static操作会到DriverManage去注册自己,然后DriverManage就能知道它能处理什么类型的 数据库URL 了。
      

  3.   

    你也可以不用Class.forName,直接在DriverManager注册,原理是一样的,不过不建议你使用DriverManager了,现在还是用DataSource比较好
      

  4.   

    给你一个例子:package com;public class Test { static int a;

    public static void main(String[] args)throws Exception{
    Class.forName("com.A");
    System.out.println(a);
    }
    }class A{

    static{
    Test.a = 10;
    }

    }在加载drivers的时候可以告诉DriverManager处理的是什么数据库,需要什么样的URL等等信息。
      

  5.   

    现在不需要什么Class.forName().当然是Java 6或JDBC 4.0之后. Java为了简化代码和美观,采用了自加载.对于Class.forName()本身的功能而言,实际上是是实例化了一个有String name代表的类:Returns the Class object associated with the class or interface with the given string name. Invoking this method is equivalent to:
    Class.forName(className, true, currentLoader)
    A call to forName("X") causes the class named X to be initialized.