码迷,mamicode.com
首页 > 编程语言 > 详细

对于java类加载的理解

时间:2016-06-10 16:19:11      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

java加载累有三个阶段:

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

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

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

4.类初始化完成

注意:

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

什么是编译时期常量呢?

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

 

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

对于java类加载的理解

标签:

原文地址:http://www.cnblogs.com/tianweijiang/p/5573781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!