java 对象实例化过程
2013-05-24 13:48
246 查看
知识回顾:
编译: Java源码经编译器编译后成为二进制字节码文件(*.class文件)。
加载:当要使用时将磁盘上的.class文件移入进内存。
运行:由JVM翻译成操作系统可识别的二进制机器码,再在JRE下运行。
对象实例化过程:
1.首先,按需加载需要的 *.class文件,如果已经加载,便不再重复加载;如果没有加载,则加载进内存。(有一个检查的过程)
2.根据属性在内存堆中分配对象空间,期间会递归分配所有父类空间,并对属性完成默认初始化。如: int型初始化为0,Object型初始化为null;
3.进行属性的赋值;
4.递归调用父类构造器;
5.调用本类构造器。
下面举例加以说明,请大家仔细看代码:
输出结果:
编译: Java源码经编译器编译后成为二进制字节码文件(*.class文件)。
加载:当要使用时将磁盘上的.class文件移入进内存。
运行:由JVM翻译成操作系统可识别的二进制机器码,再在JRE下运行。
对象实例化过程:
1.首先,按需加载需要的 *.class文件,如果已经加载,便不再重复加载;如果没有加载,则加载进内存。(有一个检查的过程)
2.根据属性在内存堆中分配对象空间,期间会递归分配所有父类空间,并对属性完成默认初始化。如: int型初始化为0,Object型初始化为null;
3.进行属性的赋值;
4.递归调用父类构造器;
5.调用本类构造器。
下面举例加以说明,请大家仔细看代码:
/** * About:对象实例化顺序 * */ public class ObjectInstantiationOrder { public static void main(String[] args) { new Son(5); } } class Parent{ public Parent(){ System.out.println("进入父类构造器"); method(); // 因为子类重写了父类method方法,所以这里调用的是子类的方法。 } public void method(){ System.out.println("调用父类method()方法"); } } class Son extends Parent{ private int num = 2; // 对属性进行赋值 public Son(int num){ // 通过构造器对属性进行初始化 System.out.println("进入子类构造器"); System.out.println("num初始化以前的值:" + this.num); this.num = num; System.out.println("num初始化以后的值: " + this.num); } public void method(){ System.out.println("调用子类method()方法:" + this.num); } }
输出结果:
进入父类构造器调用子类method()方法:0 进入子类构造器 num初始化以前的值:2 num初始化以后的值: 5
说明:首先,调用了父类构造器,输出"进入父类构造器",在构造器内部调用了子类method()方法,此时num=0,因为此时还没有子类对象,输出的是分配对象空间时属性默认初始化的值;
然后,调用子类构造器。第一个num=2,此时对象正在创建中,通过步骤3中属性的赋值使num的值成为2;
最后,通过this.num = num 完成 初始化,此时输出 num的值为5;num值的变化过程演示了对象实例化的过程。
归纳一下:先加载,然后分配对象空间并默认初始化,再进行属性的赋值,再递归调用构造器。
相关文章推荐
- Java中一个对象的实例化过程
- Java 对象实例化过程以及子类…
- java对象实例化过程中的代码执行顺序
- 深入理解Java对象的创建过程:类的初始化与实例化
- java学习之路 之 高级类特性-四种权限修饰符、关键字super、子类对象的实例化过程
- JAVA中一个对象实例化的过程
- 《对象创建过程中 实例化的顺序》摘自《Thinking in JAVA》
- java对象实例化过程
- Java对象实例化的过程。
- java(20130731)反射、单例模式、内存里分四个区域、实例化过程、对象的销毁、命名规范、异常
- java对象的实例化过程
- JAVA基础-子类继承父类实例化对象过程
- java对象的实例化过程
- java实例化对象的过程(转自:http://wotahouse.blogbus.com/)
- Java对象实例化过程分析
- Java中对象的实例化过程
- java实例化对象的过程
- 【java基础】一个Java对象的实例化过程!
- java对象的实例化过程
- 张孝祥老师java课程_子类对象的实例化过程