Java中构造函数执行顺序的问题

本文通过一个家族成员出生年份的示例程序,演示了Java中构造函数的执行顺序,包括静态成员、父类构造函数及类本身构造函数的调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自: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年 我 出生了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值