Java 代码块与函数

代码块与函数的执行顺序

父类优先子类,静态优先普通,构造代码块优先构造函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class A {

public A(){
System.out.println("A 构造函数");
}

static {
System.out.println("A 静态代码块");
}

{
System.out.println("A 构造代码块");
}

public void APrint(){
System.out.println("A 普通函数");
}

public static void AStaticPrint(){
System.out.println("A 静态函数");
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class B extends A {

public B(){
System.out.println("B 构造函数");
}

static {
System.out.println("B 静态代码块");
}

{
System.out.println("B 构造代码块");
}

public void BPrint(){
System.out.println("B 普通函数");
}

public static void BStaticPrint(){
System.out.println("B 静态函数");
}

}
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
public class C {

public static void main(String[] args){
// A 是父类
A a = new B();
// A 静态代码块
// B 静态代码块
// A 构造代码块
// A 构造函数
// B 构造代码块
// B 构造函数
B b = new B();
// A 构造代码块
// A 构造函数
// B 构造代码块
// B 构造函数
a.APrint();
// A 普通函数
A.AStaticPrint();
// A 静态函数
b.BPrint();
// B 普通函数
B.BStaticPrint();
// B 静态函数
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
运行结果:

A 静态代码块
B 静态代码块
A 构造代码块
A 构造函数
B 构造代码块
B 构造函数
A 构造代码块
A 构造函数
B 构造代码块
B 构造函数
A 普通函数
A 静态函数
B 普通函数
B 静态函数