1)Class.forName("");的作用是要求JVM查找并加载指定的类(java里面任何class都要装载在虚拟机上才能运行),如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。构造函数是在当类被实例化的时候才会执行。Class.forName("")返回的是类
为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己, 既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
2017/2/24:今天,又听到一个说法,按理来讲,Driver类的静态初始化块已经注册了一个Deriver了,我们的确使用Class.forName(xxx,xxx,xxx)就可以了。但是公司要求,我们必须要使用正规的写法,也就是自己注册一个Deriver。两个方法各有优点,但是我倾向于Class.forName方法,因为注册两个Driver不是很浪费系统性能吗?