对象的创建问题
首先定义两个类,A类和B类,B类继承自A
package com.it.findTest; public class A { int v1 =1; static int v2= 2; static{ System.out.println("A类的静态方法"); } { System.out.println("A构造代码块"); } A(){ System.out.println("A的构造方法"); } }
package com.it.findTest; public class B extends A{ int b1 =1; static int b2= 2; static{ System.out.println("B类的静态方法"); } { System.out.println("B构造代码块"); } B(){ System.out.println("B的构造方法"); } public static void main(String[] args) { B b = new B(); A a = new A(); } }
程序运行结果
结论
l 第一次用到A和B类
1. 加载父类,为父类静态变量分配内存
2. 加载子类,为子类静态变量分配内存
3. 执行父类静态变量的赋值运算,和父类的静态初始化块
4. 执行子类静态变量的赋值运算,和子类的静态初始化块
l 再次用到A和B类
5. 先创建父类对象,为父类非静态变量分配内存
6. 再创建子类对象,为子类非静态变量分配内存
7. 执行父类非静态变量的赋值运算
8. 执行父类的构造方法
9. 执行子类非静态变量的赋值运算
10. 执行子类的构造方法