初始化块和静态初始化块的区别

初始化块和静态初始化块的内容总是傻傻分不清,今天特意整理了下。
大家可以不看文章前面内容,先试试最后的那道测试题。

图片1-初始化快
图片2-静态初始化快

图片3-执行顺序

测试代码

1、static初始化块

static初始化块是在构造函数之前执行的,而且只执行一次,即类首次加载时。

测试代码:
图片4

2、初始化块<( ̄︶ ̄)>

测试代码:
图片5

原代码:

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
package dem;

public class A extends B {
public A() {
System.out.println("A构造方法");
}

static {
System.out.println("A静态初始化块");
}

{
System.out.println("A初始化块");
}

public static void main(String[] args) {
new A();
System.out.println("--------");
new A();
}
}

class B {
public B() {
System.out.println("B构造方法");
}

static {
System.out.println("B静态初始化块");
}

{
System.out.println("B初始化块");
}
}