1 public class Day052 2 { 3 4 public static void main(String[] args) 5 { 6 Zi z = new Zi(); 7 z.print(); 8 } 9 10 } 11 12 class Fu 13 { 14 private int f1 = setF1("Fu 给成员变量赋值 ", 1); 15 private static int f2 = setF2("Fu 给静态变量赋值 ", 2); 16 17 int setF1(String s, int i) 18 { 19 System.out.println("Fu " + s + " " + i); 20 return i; 21 } 22 23 static int setF2(String s, int j) 24 { 25 System.out.println("Fu " + s + " " + j); 26 return j; 27 } 28 29 { 30 System.out.println("Fu 代码块"); 31 } 32 static 33 { 34 System.out.println("Fu static代码块"); 35 } 36 37 Fu() 38 { 39 System.out.println("Fu 构造方法"); 40 } 41 42 void print() 43 { 44 System.out.println("Fu 成员方法" + " " + f1 + " " + f2); 45 } 46 } 47 48 class Zi extends Fu 49 { 50 private int z1 = setZ1("Zi 给成员变量赋值 ", 3); 51 private static int z2 = setZ2("Zi 给静态变量赋值 ", 4); 52 53 int setZ1(String s, int i) 54 { 55 System.out.println("Zi " + s + " " + i); 56 return i; 57 } 58 59 static int setZ2(String s, int j) 60 { 61 System.out.println("Zi " + s + " " + j); 62 return j; 63 } 64 65 { 66 System.out.println("Zi 代码块"); 67 } 68 static 69 { 70 System.out.println("Zi static代码块"); 71 } 72 73 Zi() 74 { 75 System.out.println("Zi 构造方法"); 76 } 77 78 void print() 79 { 80 System.out.println("Zi 成员方法" + " " + z1 + " " + z2); 81 } 82 }
Fu Fu 给静态变量赋值 2
Fu static代码块
Zi Zi 给静态变量赋值
4
Zi static代码块
Fu Fu 给成员变量赋值 1
Fu 代码块
Fu 构造方法
Zi Zi
给成员变量赋值 3
Zi 代码块
Zi 构造方法
Zi 成员方法 3 4
从上面的输出可以看出,使用直接父类不是Object的类创建对象过程是:
a、加载类
1、为父类静态属性分配内存并赋值
2、执行父类静态代码块
3、为子类静态属性分配内存并赋值
4、执行子类静态代码块
b、创建对象
1、为父类实例属性分配内存并赋值
2、执行父类非静态代码块
3、执行父类构造器
4、为子类实例属性分配内存并赋值
5、执行子类非静态代码块
6、执行子类构造器
在这个过程里面,我们会注意到两段工作都是先处理父类,然后再处理子类的。也就是子类重复了一遍父类的工作。