对象创建过程/初始化顺序

转载 2013年12月05日 15:07:14
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虚拟机创建一个对象都包含以下步骤。 (1)给对象分配内存。 (2)将对象的实例变量自动初始化为其变量类型的默认值。 (3)初始化对象,给实例变量赋予正确的初始值。   对于以上第三个步...
  • u013127724
  • u013127724
  • 2015年04月08日 17:19
  • 2069

java对象创建过程/初始化顺序

转自:http://blog.csdn.net/yakihappy/article/details/3979357 Java虚拟机创建一个对象都包含以下步骤。 (1)给对象分配内存。 (2)...
  • shanliangliuxing
  • shanliangliuxing
  • 2013年10月15日 17:36
  • 2468

java对象创建过程及初始化顺序

转自:http://blog.csdn.net/yakihappy/article/details/3979357Java虚拟机创建一个对象都包含以下步骤:(1)给对象分配内存。(2)将对象的实例变量...
  • u012522829
  • u012522829
  • 2016年10月14日 14:00
  • 140

【深入理解JVM】:Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释。非继承关系中的初始化顺序对于非继承关系,主类Initi...
  • u011080472
  • u011080472
  • 2016年05月06日 11:19
  • 4997

Java类的变量初始化顺序

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台...
  • meegomeego
  • meegomeego
  • 2015年08月05日 12:14
  • 1663

jvm对象的创建过程

1检查这个指令的参数是否在changlchi
  • fkyyly
  • fkyyly
  • 2014年04月30日 10:04
  • 794

HotSpot虚拟机对象揭秘之对象的创建过程探究

对象是如何创建的?   (1)检查      虚拟机遇到new指令,上常量池中找有没有要new的这个类的符号引用,并且检查,类符号引用的类是否是否已经完成了加载,解析和初始化工作,如果没有,先...
  • GFJ0814
  • GFJ0814
  • 2016年04月18日 20:42
  • 333

Java对象创建过程和内存结构分析

JAVA内存分配和管理是JAVA的核心技术之一,在看了尚硅谷宋红康老师讲解的JAVA内存知识之后,结合《深入理解JVM这本书》对自己所学的知识进行简单的总结,写了这篇日志。 1.JAVA内存分区 ...
  • u010001192
  • u010001192
  • 2015年05月03日 16:02
  • 2687

Java基础总结之类与对象的初始化顺序

Java
  • crazyf2015
  • crazyf2015
  • 2015年06月27日 21:51
  • 2298

JAVA对象创建的过程

JVM对象创建的过程     对于java程序员来说,我们无时无刻不在创建和使用对象。使用new关键字即可快速创建一个对象,其实在new的背后,JVM为我们完成了很多事情。     JVM的字节码...
  • u011208987
  • u011208987
  • 2018年01月21日 18:19
  • 42
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象创建过程/初始化顺序
举报原因:
原因补充:

(最多只允许输入30个字)