Java内功之ClassLoader
众所周知,“书到用时方恨少,事非经过不知难”,在学生时代,被备考和考试所“折磨”过的同学尤其能体会其中的艰难。到了工作的当中尤其能够体会到这种艰难的时刻莫过与准备面试。所以为了减少面对时的痛苦,提前做好准备是很有必要的。胸有成竹,才能够行云流水。不管是正在准备着面试,还是在准备的路上,提前修炼好内功是很有必要地!希望能够这段话能够与读者以及未来的自己共勉!
Java的精髓莫过于其最大的优势——高可维护性。在Java工程师的面试过程中,JVM的基础知识是不可能迈过去的“槛”!这也是Java的内功之一。下面来聊一聊JVM的一个重点——ClassLoader。
偶然看到一道面试题:
题目:下面给出的Java中ClassLoader中的描述,哪些描述是正确的?()
A. ClassLoader没有层次关系
B. 所有类中ClassLoader都是AppClassLoader
C. 通过Class.ForName(String className),能够动态加载一个类
D. 不同的ClassLoader加载同一个Class文件,所得的类是相同的
可能是你已经有了正确的答案:C,没错。但是只是这个答案并不能够将你的Java内功完美地展现出来,得要抓取每个选项中的关键词进行讨论,并对其概念进行正确地论述,才能正确的打开方式!
下面取出其中的关键字:1. 层次关系;2. ClassLoader的存在形式;3. Class.ForName()方法;4. ClassLoader加载的过程;5. Class文件。
层次关系
ClassLoader的存在形式
Class.ForName()方法
ClassLoader加载的过程
Class文件
Class.ForName(),是根据一个类的名字,动态地实例化一个类。这种做法的常见场景:
1. 编写第三方的库;
2. 在实现OCP(开闭原则)的时候,对变化进行隔离,即进行防御性编程;
3. 常见于“Spring家族”中,实现依赖倒置(控制反转的思想)。
使用Class.ForName()可以不需要使用new关键字,而获取一个类的对象。这种做法取消了对类的显示依赖,既可以通过获取到的类的对象使用其方法。
下一篇文章,仔细讨论以上的5个关键词。