执行顺序与储存结构

执行main函数的顺序

public static void main(String[ ]  args){}是程序执行的入口,只有有p s v m的类才能被执行

每个类中该格式main函数只能有一个,如果换格式会被当做普通函数处理 

运行有main函数的类时:

先将需要的文件(.class)文件加载到内存中

再将内存的方法区进行分配,此时,static静态变量也加载到到了方法区

静态变量与静态方法块按书写顺序加载,静态变量加载时同时进行初始化

最后执行main函数


实例化类的执行顺序

以 Order order=new Order();为例

先将变量定义于栈中

将所需文件(Order.class)加载到内存(若已经加载则不需要)

再将内存的方法方法区进行分配,并将static加载到方法区

之后通过new在堆中分配区域,建立新属性并给属性赋值或默认值

执行构造代码块以后再执行构造函数

将堆中内存地址赋给栈中引用变量


实例化子类执行顺序

以Car car=new Car(1,"12",3,4);为例

先将变量定义于栈中

再将文件(.class)加载到内存中(若已存在则不需要)

将方法区分配给类,并将静态static加载到方法区

注意,是先分配给父类再分配子类的

祖父类通过super在堆中分配空间,建立属性,执行构造函数

之后父类通过super在堆中分配空间,建立属性,执行构造函数

再之后子类通过new在堆中分配空间,建立属性,执行构造函数

注意:子类的空间是分片的,父类、子类、祖父类等各占一片。如果没有显式调用super,那么用的就是隐式super()

将堆中内存地址赋给栈中引用变量





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值