java类加载机制

来源:互联网 发布:乔约翰逊生涯数据 编辑:程序博客网 时间:2024/06/07 23:54

java是面向对象语言,所有的事物在java语言中都可以抽象成为对象,对象在java中以类的形式存在,那么类是如何加载的呢?

.class文件通过类加载器加载,将类中的二进制数据读入到jvm虚拟机运行时数据区的方法区内,并且对数据进行校验、解析、初始化。最终形成可以被虚拟机直接使用的java类型。

类加载器加载类文件:

1.通过类的全限定名来获取类的二进制流。

2.将获取的二进制流转化成方法区的运行时数据结构

3.在堆内存中创建一个这个类的class对象,最为对方法区中这个数据的访问入口

校验:确保加载类的正确性

1.校验文件格式是否符合规范

2.校验语义、语法是否正确

3.校验符号引用是否正确

准备:为静态变量分配内存、并为其初始默认值

1.静态变量内存分配在方法区内,实例变量会跟随对象一起在堆中分配内存空间。

2.为静态变量赋默认零值,例如public static int a = 10; 在准备阶段,a的值是0,在初始化阶段,a才被赋予10.

解析:把类中的符号引用转换为直接引用

初始化:为静态变量赋指定的值

类初始化时机:只有当对类的主动使用的时候才会导致类的初始化,类的主动使用包括以下六种:

1.new创建类的实例

2.调用某个类的静态变量

3.调用某个类的静态方法

4.发射(calss.forName())

5.初始化某个类的子类

6.虚拟机启动的时候被标明要初始化的类


0 0
原创粉丝点击