JAVA代码块的顺序问题2

JAVA代码块的顺序问题2
 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 }
JAVA代码块的顺序问题2

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、执行子类构造器

在这个过程里面,我们会注意到两段工作都是先处理父类,然后再处理子类的。也就是子类重复了一遍父类的工作。

JAVA代码块的顺序问题2

上一篇:解决导出中文文件名乱码的方法


下一篇:软件打包工具