对象创建过程,初始化顺序
来源:互联网 发布:网络对大学生利大于弊 编辑:程序博客网 时间:2024/04/28 00:16
Java虚拟机创建一个对象都包含以下步骤。
(1)给对象分配内存。
(2)将对象的实例变量自动初始化为其变量类型的默认值。
(3)初始化对象,给实例变量赋予正确的初始值。
对于以上第三个步骤,Java虚拟机可采用3种方式来初始化对象,到底采用何种初始化方式取决于创建对象的方式。
(1)如果对象是通过clone()方法创建的,那么Java虚拟机把原来被克隆对象的实例变量的值拷贝到新对象中。
(2)如果对象是通过ObjectInputStream类的readObject()方法创建的,那么Java虚拟机通过从输入流中读入的序列化数据来初始化那些非暂时性(non-transient)的实例变量。
(3)在其他情况下,如果实例变量在声明时被显式初始化,那么就把初始化值赋给实例变量,接着再执行构造方法。这是最常见的初始化对象的方式。
1.初始化的顺序是:先静态对象(如果它们尚未因前面的对象创建过程而被初始化),而后是非静态对象。在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。
总结对象创建的过程:
(1)首次创建对象时,类中的静态方法/静态字段首次被访问时,java解释器必须先查找类路径,以定位.class文件;(2)然后载入.class(这将创建一个class对象),有关静态初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次。(3)当用new XX()创建对象时,首先在堆上为对象分配足够的存储空间。(4)这块存储空间会被清0,这就自动地将对象中的所有基本类型数据都设置成了缺省值(对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null。(5)执行所有出现于字段定义处的初始化动作(非静态对象的初始化)。(6)执行构造器。
1、 对象的初始化
(1) 非静态对象的初始化
在创建对象时,对象所在类的所有数据成员会首先进行初始化。基本类型:int型,初始化为0。如果为对象:这些对象会按顺序初始化。
※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。构造方法的作用就是初始化。
(2) 静态对象的初始化
程序中主类的静态变量会在main方法执行前初始化。不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。
2、 继承时,对象的初始化过程
(1) 主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为private。
(2) 主类静态成员的初始化。
(3) 主类的超类由高到低进行默认构造方法的调用。注意,在调用每一个超类的默认构造方法前,先进行对此超类进行非静态成员的初始化。
(4) 主类非静态成员的初始化。
(5) 调用主类的构造方法。
- 对象创建过程/初始化顺序
- 对象创建过程/初始化顺序
- 对象创建过程/初始化顺序
- 对象创建过程,初始化顺序
- java对象创建过程/初始化顺序
- java对象创建过程及初始化顺序
- 创建对象初始化过程
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- C++类对象创建过程(分配空间、赋值和初始化、对象初始化顺序、虚函数表指针)
- Java类创建过程与初始化顺序
- 派生类对象初始化构造过程顺序
- 派生类对象初始化构造过程顺序
- 派生类对象初始化构造过程顺序
- Java继承,创建对象初始化顺序
- Java 类和对象的初始化过程及初始化顺序
- Java 类和对象的初始化过程及初始化顺序
- Java:对象创建和初始化过程
- webview加载图片 gif pdf ppt txt doc 等
- phpcms 更换域名步骤
- quick-cocos2dx 半成品 UILoadingBar
- php开发之加密
- Oracle实例创建
- 对象创建过程,初始化顺序
- 网络最大流求解 增广路算法
- 蚂蚁感冒
- 鲍鹏山:我们培养了很多高学历的野蛮人 导读: 德国哲学家尼采写过一篇文章叫《我为什么这么聪明》。他的结论就一句话:我之所以这么聪明,是因为我从来不在不必要的事情上浪费精力。生活中有太多这样无用
- 深圳小产权房公明罗群围花园
- Web Service
- Windows下Python的强力助手——Pypi
- OpenGL笔记之矩阵变换(Matrix Transformation)
- extern c , c++ 调用c