对于java类加载的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于java类加载的理解相关的知识,希望对你有一定的参考价值。
java加载累有三个阶段:
1.加载阶段:在遇到new 访问类中 静态成员包括方法,都会促使jvm类加载器把该类加载进内存(二进制字节码文件)。其他什么都不做。例子:Object.class 只是单纯的把类加载进内存。并没有执行其他操作。
2.链接阶段:非用Object.class方式(暂时只知道到这一点)来访问类的信息,将会进入链接阶段,在该阶段将会把类中的域进行分配内存,分配的都是类中域(成员)默认值(只有类域才有默认值),在必要时,将对域进行解析,如在某个字段上加入了符号“=”,那么将会解析右值并创建该对象是引用类型就拿到对象的引用。
3.初始化阶段:如果在加载类时遇到该类具有超类(基类,父类),则对优先对其父类进行这三个步骤。然后执行静态初始化块(只执行一次)和静态初始化方法(如果有必要)。
4.类初始化完成
注意:
对于 静态 编译时期常量(static final)(非静态的必须new出来才能访问,等你new 出来已经初始完成了)进行访问时就已经存在哪里了,所以不需要对类进行初始化。
什么是编译时期常量呢?
编译时期常量就是该量在进行编译时就已经有一个确定下来的的值,在java中静态常量必须对其进行初始化,在静态初始化块里、静态构造方法里如果有多个构造方法,必须在每一个构造方法中对其进行显示的初始化。
如果有谁看到,有什么不对地方,麻烦留言指教。
以上是关于对于java类加载的理解的主要内容,如果未能解决你的问题,请参考以下文章