构造代码块、静态代码块与构造方法是三种不同的代码块,那么他们到底有什么区别呢?
一、简单认识一下构造代码块、静态代码块与构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
classA
{
//构造代码块
{
System.out.println("构造代码块A");
}
//静态代码块
static
{
System.out.println("静态代码块A");
}
//构造方法
publicA()
{
System.out.println("构造方法A");
}
} |
二、弄清三者的执行顺序
1
2
3
4
5
6
7 |
classDemo
{
publicstaticvoidmain(String[] args)
{
newA();
}
} |
三、在构造多个对象时顺序又会是怎样呢
1
2
3
4
5
6
7
8
9 |
classDemo
{
publicstaticvoidmain(String[] args)
{
newA();
newA();
newA();
}
} |
四、看看在继承体系中又会是怎样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
classBextendsA
{
//构造代码块
{
System.out.println("构造代码块B");
}
//静态代码块
static
{
System.out.println("静态代码块B");
}
//构造方法
publicB()
{
System.out.println("构造方法B");
}
} |
1
2
3
4
5
6
7 |
classDemo
{
publicstaticvoidmain(String[] args)
{
newB();
}
} |
五、总结一下
1、在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;
2、每创建一个对象,构造代码块和构造方法就会执行一次;而不管创建多少个对象,静态代码块仅仅执行一次;
3、创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;
4、创建子类对象时,子类的构造代码块在父类的构造方法后执行。


