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

Java常见问题之初始化过程

时间:2014-05-01 17:14:54      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:java   初始化   

假设有个名为Dog的类

对于静态字段:
1. 当首次创建类型为Dog的对象时,或者Dog类的静态字段/静态方法首次被访问时,Java解释器会查找类路径,以定位Dog.class文件。
2. 载入Dog.class,此时初始化所有静态字段,如果没有对静态字段进行显示初始化,则默认将所有基本类型字段都设置成标准初值,而引用字段被设置成null。

对于非静态字段:
1. 当创建类型为Dog的对象时,首先将在堆上为该对象分配存储空间,且存储空间会被清零,这就将所有基本类型字段都设置成了标准初值,而引用字段被设置成了null。
2. 执行所有出现于字段定义处的初始化动作。
3. 执行构造器。



假设类Dog有一个父类Animal

对于静态字段:
1. 当首次创建类型为Dog的对象时,或者Dog类的静态字段/静态方法首次被访问时,Java解释器会查找类路径,以定位Dog.class文件。
2. 当载入Dog.class时,编译器注意到它有一个父类Animal,于是继续加载Animal.class,此时首先初始化类Animal的所有静态字段,然后初始化类Dog的所有静态字段。如果没有对静态字段进行显示初始化,则默认将所有基本类型字段都设置成标准初值,而引用字段被设置成null。

对于非静态字段:
1. 当创建类型为Dog的对象时,首先将在堆上为该对象分配存储空间,且存储空间会被清零,这就将所有基本类型字段都设置成了标准初值,而引用字段被设置成了null。
2. 执行父类Animal中所有出现于字段定义处的初始化动作。
3. 执行父类Animal的构造器。
4. 执行子类Dog中所有出现于字段定义处的初始化动作。
5. 执行子类Dog的构造器。



注意:
静态字段只会进行一次初始化操作。
每次创建类型为Dog的对象时,都会对非静态字段进行初始化操作。
静态字段由Dog类的所有对象共享,只占用一份存储区域。
非静态字段是与Dog类的对象相关联的,每个对象都有自己独立的存储区域。
当首次创建类型为Dog的对象时,会先初始化静态字段,再初始化非静态字段。
Dog类的静态字段/静态方法首次被访问时,只会初始化静态字段,不会初始化非静态字段。

Java常见问题之初始化过程,码迷,mamicode.com

Java常见问题之初始化过程

标签:java   初始化   

原文地址:http://blog.csdn.net/warren912/article/details/24800287

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