vlambda博客
学习文章列表

Java面试 | 类的加载机制是什么?

(1)问题分析:

Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。

虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

(2)核心答案讲解:

类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:

1)装载:查找和导入Class文件;

2)链接:把类的二进制数据合并到JRE中;

A)校验:检查载入Class文件数据的正确性;

B)准备:给类的静态变量分配存储空间;

C)解析:将符号引用转成直接引用;

3)初始化:对类的静态变量,静态代码块执行初始化操作

Java程序可以动态扩展是由运行期动态加载和动态链接实现的;比如:如果编写一个使用接口的应用程序,可以等到运行时再指定其实际的实现(多态),解析过程有时候还可以在初始化之后执行;比如:动态绑定(多态)。

(3)问题扩展

由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。

类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(Java.lang.ClassLoader的子类)。 

-END-

Java面试 | 类的加载机制是什么?


点击关注黑马程序员
获得更多实用干货
Java面试 | 类的加载机制是什么?Java面试 | 类的加载机制是什么?
黑马程序员
黑马程序员是传智教育旗下高端IT教育品牌,以高品质教学质量赢得好口碑,为企业输送大批优质IT人才,致力于培养高级软件工程师。现开设12个精品学科,19所直营分校遍布全国。
38篇原创内容
Official Account