对于java类加载的理解

java加载累有三个阶段:

1.加载阶段:在遇到new 访问类中 静态成员包括方法,都会促使jvm类加载器把该类加载进内存(二进制字节码文件)。其他什么都不做。例子:Object.class 只是单纯的把类加载进内存。并没有执行其他操作。

2.链接阶段:非用Object.class方式(暂时只知道到这一点)来访问类的信息,将会进入链接阶段,在该阶段将会把类中的域进行分配内存,分配的都是类中域(成员)默认值(只有类域才有默认值),在必要时,将对域进行解析,如在某个字段上加入了符号“=”,那么将会解析右值并创建该对象是引用类型就拿到对象的引用。

3.初始化阶段:如果在加载类时遇到该类具有超类(基类,父类),则对优先对其父类进行这三个步骤。然后执行静态初始化块(只执行一次)和静态初始化方法(如果有必要)。

4.类初始化完成

注意:

对于 静态 编译时期常量(static final)(非静态的必须new出来才能访问,等你new 出来已经初始完成了)进行访问时就已经存在哪里了,所以不需要对类进行初始化。

什么是编译时期常量呢?

编译时期常量就是该量在进行编译时就已经有一个确定下来的的值,在java中静态常量必须对其进行初始化,在静态初始化块里、静态构造方法里如果有多个构造方法,必须在每一个构造方法中对其进行显示的初始化。

 

如果有谁看到,有什么不对地方,麻烦留言指教。

posted @ 2016-06-10 15:58  巡音  阅读(135)  评论(0编辑  收藏  举报