在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。

    Class.forName("")返回的是类(一个带有给定字符的类或接口相关联的Class对象、加载这个类、同时执行该类的静态代码块。 )
    Class.forName("").newInstance()返回的是object

(注意)

  使用new同样可以达到加载数据库驱动的目的,而使用类加载机制是为了提高代码的可重用性。
  软件开发的业务类通常面向接口BusinessInterface编程。各项目根据业务不同实现不同的接口实现类,接口实现类被配置在XML文件中。这样开发了新的接口实现类,只需要修改配置文件,而无需更改代码,实现了代码的可重用性。

  刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:

1 public class MyJDBCDriver implements Driver{
2 static {
3 DriverManager.registerDriver(new MyJDBCDriver());
4 }
5 }

  既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。

  原api解释如下:
  We just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the instacne you will never use in usual, so you need not to create it.

  总结:jdbc数据库驱动程序最终的目的,是为了程序员能拿到数据库连接,而进行jdbc规范的数据库操作。拿到连接的过程是不需要你自己来实例化驱动程序的,而是通过 DriverManger.getConnection(string str); 。因此一般情况下,对于程序员来说,除非特别需求,是不会自己去实例化一个数据库驱动使用里面的方法的。

部分参考:https://blog.csdn.net/huscker/article/details/53080489

最新文章

  1. codevs2216 行星序列
  2. Git分布式版本管理工具基本使用方法
  3. UVA 11461 - Square Numbers
  4. MFC下的各种字符串类型和相互转换
  5. php解析json数据
  6. MySQL慢查询(二) - pt-query-digest详解慢查询日志
  7. IO 模型
  8. 原型prototype、原型链__proto__、构造器constructor
  9. JavaScript(第二十三天)【事件入门】
  10. Dubbo中暴露服务的过程解析
  11. c++连续读取未知个数的数字
  12. [C++]数组指针,数组引用,函数指针
  13. [C#]关于DataDirectory的一些思考
  14. 潭州课堂25班:Ph201805201 爬虫基础 第二课 fidder (课堂笔记)
  15. JDBC、JNDI和DBCP的区别
  16. mac电脑读写NTFS格式的移动硬盘命令
  17. SVG:中国地图
  18. PHPutf-8转码。
  19. 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
  20. HDU.5181.numbers(DP)

热门文章

  1. C++面向对象 1(类-封装)
  2. python3.7安装和pycharm安装教程. 以及pycharm的破解教程
  3. (纯js)如何不刷新网页就能链接新的js文件
  4. iOS开发之Lame编译
  5. Set重写hashCode和equals方法实现引用对象去重
  6. NPM使用方法
  7. 2、二进制安装K8s 之 部署ETCD集群
  8. C语言预处理编译链接各个阶段错误,分阶段的说一下
  9. C# wpf中关于binding的converter无效的情况
  10. 【多线程】不懂什么是 Java 中的锁?看看这篇你就明白了!