面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?来源 http t cn Ai7dwi 在 java 中 Class forName 和 ClassLoader 都可以对类进行加载

大家好,欢迎来到IT知识分享网。

来源:http://t.cn/Ai7dwi

Class.forName(String className);这个方法的源码是:

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

最后调用的方法是 forName0 这个方法,在这个 forName0 方法中的第二个参数被默认设置为了 true,这个参数代表是否对加载的类进行初始化,设置为 true 时会类进行初始化,代表会执行类中的静态代码块,以及对静态变量的赋值等操作。

也可以调用 Class.forName(String name, boolean initialize,ClassLoader loader) 方法来手动选择在加载类的时候是否要对类进行初始化。Class.forName(String name, boolean initialize,ClassLoader loader) 的源码如下:

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

举例

下面还是举例来说明结果吧:一个含有静态代码块、静态变量、赋值给静态变量的静态方法的类。

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

测试方法:

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

运行结果:

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

根据运行结果得出 Class.forName 加载类是将类进了初始化,而 ClassLoader 的 loadClass 并没有对类进行初始化,只是把类加载到了虚拟机中。

应用场景

在我们熟悉的 Spring 框架中的 IOC 的实现就是使用的 ClassLoader。

而在我们使用 JDBC 时通常是使用 Class.forName() 方法来加载数据库连接驱动。这是因为在 JDBC 规范中明确要求 Driver(数据库驱动)类必须向 DriverManager 注册自己。

以 MySQL 的驱动为例解释:

面试官问:Class.forName和ClassLoader有什么区别?怎么问这个?

我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,从最基础的JavaSE到Spring各种框架都有整理,送给每一位Java小伙伴,想要获取的可以关注我的头条号并在后台私信我:Java,即可免费获取。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/175094.html

(0)
上一篇 2025-04-01 09:33
下一篇 2025-04-01 10:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信