当用new创建对象时(无继承和有继承两种情况下)虚拟机的执行过程

来源:互联网 发布:chocobank网络剧 编辑:程序博客网 时间:2024/05/17 09:04

一,当不存在继承时,创建对象如Animal a=new Animal( );

虚拟机要做的三件事依次是:

1.申请空间(将值放到该空间中,然后将该空间的首地址值赋给引用变量);

2.初始化实例变量;

3.执行构造方法;

二,当存在继承时创建对象,如Animal a=new Dog( );

此时虚拟机要做的依次是:

1.申请空间(将值放到该空间中,然后将该空间的首地址值赋给引用变量);

2.看构造函数的第一句;

3.默认的创建父类对象(子类实例变量默认初始化-->父类初始化-->子类实例变量显式初始化-->执行子类构造函数对子类进行初始化);

4.初始化该类的实例变量(初始化所有属性);

5.执行该类的构造函数;

当构造函数第一句是super( )表示调用父类构造函数,this( )表示调用本类的构造函数。

同时在创建和访问时对属性和方法的访问顺序是不同的,在创建时会先对执行父类的构造函数对父类进行初始化,

然后再执行子类的构造函数对子类进行初始化;在访问时却相反,访问时会先访问子类的属性和方法再访问父类的属性和方法。

原创粉丝点击