4.3.2 类加载过程
java中类的加载为动态加载,第一次使用时类才会被加载。
加载一个类时,若父类未被加载,则加载父类。
类的信息包括:类变量,类初始化代码,类方法,实例变量,实例初始化代码,实例方法,父类信息引用。
类初始化代码包括:静态初始化代码块,定义静态变量时的初始化语句。先执行父类的,再执行子类的,父类执行时,子类静态变量为默认值。
实例初始化代码包括:定义实例变量时的初始化语句,实例初始化代码块。
类初始化过程包括:分配内存保存类的信息,给类变量赋默认值,加载父类,设置父子关系,执行类初始化代码。
内存分为栈,堆,方法区。
栈存放函数局部变量,堆存放动态分配的对象,方法区存放类的信息。
4.3.3 对象创建的过程
创建对象过程包括:分配内存,对所有实例变量赋默认值,执行实例初始化代码。
分配的内存包括本类和所有父类的实例变量,但不包括任何静态变量。
实例初始化代码先执行父类的,后执行子类的。
寻找要执行的实例方法的时候,是从对象的实际类型信息开始查找的,找不到再查找父类类型信息。
动态绑定:根据对象的实际类型查找要执行的方法,子类型中找不到的时候再查找父类。
如果继承的层次比较深,则采用虚方法表记录动态绑定的方法地址。
4.3.4 变量访问的过程
对变量访问的过程是静态绑定的。