1.创建和初始化对象的过程
非子类对象的创建和初始化
1.为该对象分配内存空间,同时将成员变量进行默认初始化。
2.执行显示初始化。
3.执行构造方法的赋值初始化。
子类对象的创建和初始化
分为上溯和向下执行两个流程
上溯:首先为子类进行内存空间的分配,同时进行默认值初始化,然后上溯到其父类,父类也进行内存空间的分配,同时进行默认值初始化,继续上溯到object类。
向下执行:对object类依次进行显式初始化,和构造方法初始化,然后继续向下执行此过程,知道最下方的子类依次完成显示初始化和构造方法初始化。整个流程结束。
2.类加载的流程
无父类的普通类的加载过程(其实也是有object父类,这里不做考虑)
1、加载:查找和导入Class文件2.链接:其中解析步骤是可以选择的 (a)检查:检查载入的class文件数据的正确性 (b)准备:给类的静态变量分配存储空间 ,并且执行默认初始化(c)解析:将符号引用转成直接引用3、类的初始化:对静态变量,静态代码块执行显示初始化工作。
有父类的类加载过程
1.加载(同上),2.链接,此过程就有了上溯的一个过程,从子类开始向上,依次给类的静态变量分配空间,并且进行默认初始化。3.类的显示初始化,从object类向下依次对静态变量和代码块进行显示初始化。
注:同一个类的加载只进行一次。
并且类并不会一下被全部加载到系统中,用到哪个类就加载哪个类。