转自:http://www.cnblogs.com/hdk1993/p/4867303.html
1, 先执行内部静态对象的构造函数,如果有多个按定义的先后顺序执行;而且静态类的构造函数只会被执行一次,只在其第一个对象创建时调用,即便是创建了同一个类的多个对象,例如main()函数里b1,b2创建了同一个类的两个对象,但是grandmaMotherClass的构造函数只被执行了一次
2, 再执行父类的构造函数(c++中如果有多个,可按照左右先后顺序执行)
3, 再执行内部普通对象的构造函数
4, 最后执行该类本身的构造函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
class grandpaClass{
// public grandpaClass(){ System.out.println( "1912年
爷爷 出生了" ); } } class fatherClass
extends grandpaClass{ public fatherClass(){ System.out.println( "1956年
爸爸 出生了" ); } } class grandmaMotherClass{ public grandmaMotherClass(){ System.out.println( "奶奶的妈妈
是 1890年出生的" ); } } class gandmaClass{ static int year
= 0 ; static grandmaMotherClassnnmm
= new grandmaMotherClass(); public gandmaClass(){ year
= 1911 ; System.out.println(year
+ "年
奶奶 出生了" ); } public gandmaClass( int count){ year
+= count; System.out.println(year
+ "年
奶奶的妹妹 出生了" ); } } class motherClass{ public motherClass(){ System.out.println( "1957年
妈妈 出生了" ); } } public class javaclass
extends fatherClass{ /** *
@param args */ motherClass
b = new motherClass();; static gandmaClass
b1 = new gandmaClass(); static gandmaClass
b2 = new gandmaClass( 2 ); public javaclass(){ System.out.println( "1981年
我 出生了" ); } public static void main(String[]
args) { //
TODO Auto-generatedmethod stub System.out.println( "mainfunction
is called" ); javaclass
my = new javaclass(); } } |
1
2
3
4
5
6
7
8
9
10
|
执行结果如下: 奶奶的妈妈
是 1890 年出生的 1911 年
奶奶 出生了 1913 年
奶奶的妹妹 出生了 main
function is called 1912 年
爷爷 出生了 1956 年
爸爸 出生了 1957 年
妈妈 出生了 1981 年
我 出生了 |