(1)前者仅仅返回Class对象,后者实例化了哪个Class对象所对应的类;注意“Class对象”这一说法,对于源代码而言,“类”是对象的模板,但对于JVM而言,“类”同样是一个需要维护的对象。
因为Java虚拟机需要维护自己已经加载了那些类,这些类都是从那些class文件加载进来的,这些类都有那些方法可供调用,都有那些构造函数可以用来初始化对象,等等等等,——当然也需要面向对象的方法来维护这些类啊。
(2)如果一个类通过使用静态初始化能完成所需要的几乎所有功能,你不需要使用到它的任何实例,因为JVM在加载一个类的时候就会初始化所有静态成员,并执行静态初始化块。所以你只需要使用Class.forName显式的加载这个类,就可以使用那些功能了。

解决方案 »

  1.   

    驱动程序对象实例不是给你用的,而是给 DriverManager 用的。DriverManager 在接到一个 getConnection(url ) 这样的请求后会轮流询问注册过的驱动程序是否接受这个请求,驱动程序实例如果认为这个url是自己能处理的就返回一个非空值,DriverManager 会逐一询问所有的驱动程序实例直到有一个实例返回了一个非空值.现在的驱动程序都会在 装载 时调用 DriverManager  的注册驱动程序的方法,所以你不需要再关心这个问题了 , 你只需要 调用 Class.forName("xxx") 或者 new XXXDriver()  让 JVM 装载类;
    生成的对象实例都可以不用保持引用 。