关于Class.forName()的问题
Class.forName("com.mysql.cj.jdbc.Driver")与new Driver(),两者有什么本质区别,底层运行机制和功能有何具体不同,Class类的本质是什么,与其他类的区别在哪里?
正在回答 回答被采纳积分+1
1、Class.forName("com.mysql.cj.jdbc.Driver") 是通过反射的方式加载这个Driver,使其被加载到虚拟机中,在加载这个类的同时,Driver中的静态代码块儿被执行
而这个DriverManager.registerDriver(new Driver()) 则是DriverManager中的一个方法,它需要传入一下Driver对象,而恰巧Driver 的静态代码块儿中也已经调用了这个方法。所以会被注册两次,一般我们不使用这个方法。
2、
Class实例是JVM内部创建的,如果我们查看JDK源码,可以发现Class类的构造方法是private,只有JVM能创建Class实例,我们自己的Java程序是无法创建Class实例的。
JVM为每个加载的类创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段等,因此,如果获取了某个Class实例,我们就可以通过这个Class实例获取到该实例对应的class的所有信息。如果知道一个类的完整类名,可以通过静态方法Class.forName()获取该类的实例。这种获取实例的方法被称为反射。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星