执行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()
将堆中内存地址赋给栈中引用变量