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

《Java中对象创建过程》

时间:2015-07-14 21:59:01      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

http://jzinfo.iteye.com/blog/620045
具体问题:java中使用new创建一个对象的时候,详细的过程是怎么样的。

Java中每个Java代码要能执行首先会编译成一个class的字节码文件。然后利用类装载器装载进入JVM然后才能被执行。


1. 所有的类都是在对其第一次使用时,动态加载到JVM中。当首次创建类型为Dog的对象时,或者Dog类的静态方法,静态属性域首次被访问时,java解释器查找classPath,定位到Dog.class文件

2. 载入Dog.class文件,生成一个Class类型对象。
所有有关的静态初始化动作都会执行,静态代码块,静态成员属性。 并且这种初始化动作只在Class对象首次加载时候进行一次。

3. 当用new Dog()创建对象时,首先JVM在堆heap上为Dog对象分配足够的存储空间

4. 存储空间清空,自动将Dog对象中的所有基本类型数据都设置成了默认值,对象引用被设置为null

5. 执行所有在字段定义处的一些初始化操作

6. 调用构造器方法。(没有继承)


以上是不存在继承的情况下的执行过程,如果是存在多重继承的情况下呢?

java解释器在类路径中查找DogExamp.class文件后,会根据继承规则,定位JiingbaDog.class 和Dog.class. 分别载入后生成相应的Class对象,此时按照上述的流程,依次执行静态初始化的动作.
首先在Dog类中执行静态初始化,在初始化静态属性profile时,导致实例化Dogprofile对象,输出第一行。然后执行静态代码块,导致输出第二行。
接下来,子类JingbaDog中执行静态初始化动作,同样初始化了profile静态属性,导致实例化DogProfile对象,输出第三行,同理,DogExamp中的静态成员初始化,输出第4行。

静态初始化结束后,按照类的继承关系的构造方法的调用,首先执行基类Dog的构造方法,输出第5行
然后执行JingbaDog的构造方法,输出第6行。

最后执行自身的构造方法 输出第7行.

根据以上分析,我们得出的结论是:
1. 当首次创建一个类的对象时(此时即是调用构造方法,构造方法也是隐式的静态),或者类的静态方法被调用,静态成员属性被引用时,java解释器都将查找类对象的class文件

2. 载入class文件后生成Class对象时,会执行静态初始化所有动作。(包括父类的静态成员和静态代码块)

3. 执行类定义在字段处的初始化动作

4. 递归调用构造器执行构造方法

....

《Java中对象创建过程》

标签:

原文地址:http://www.cnblogs.com/lsx1993/p/4646452.html

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