代码块

在 Java 中,使用{}括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程)

构造代码块

1
2
3
4
格式:
{

}

注意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1、用于给对象初始化,多个构造方法中相同的代码存放到一起,每次调用构造方法都会执行,并且在构造方法前执行
2、只有创建对象时调用,类不能调用
3、构造代码块可以有多个,建议只写一个
class Person {
{
System.out.println("Person构造代码块执行");
}

public Person() {
System.out.println("Person构造方法执行");
}
}

public class TestPerson {
public static void main(String[] args) {
System.out.println("main方法");
new Person();
new Person();
}
}

静态代码块

1
2
3
4
格式:
static {

}

注意

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
1、用于给类进行初始化,在加载的时候就执行,并且只执行一次
2、优先级高于主函数
3、静态代码块可以有多个,顺序执行,建议只写一个
class Person {
static {
System.out.println("Person静态代码块执行");
}

public Person() {
System.out.println("Person构造方法执行");
}
}

public class TestPerson {
static {
System.out.println("静态代码块1执行");
}

public static void main(String[] args) {
System.out.println("main方法");
new Person();
new Person();
}

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

结果

1
2
3
4
5
6
静态代码块1执行
静态代码块2执行
main方法
Person静态代码块执行
Person构造方法执行
Person构造方法执行

代码块相关执行顺序

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
public class Father {
public Father() {
System.out.println("父类构造方法执行~~~");
}

{
System.out.println("父类构造代码块执行~~~");
}

static {
System.out.println("父类静态代码块执行~~~");
}

public static void function() {
System.out.println("父类静态成员方法执行~~~");
}
}

public class Son extends Father{
public Son() {
System.out.println("子类构造方法执行~~~");
}

{
System.out.println("子类构造代码块执行~~~");
}

static {
System.out.println("子类静态代码块执行~~~");
}

public static void function() {
System.out.println("子类静态成员方法执行~~~");
}

public static void main(String[] args) {
System.out.println("main方法执行~~~");
new Son();
}
}

结果

1
2
3
4
5
6
7
父类静态代码块执行~~~
子类静态代码块执行~~~
main方法执行~~~
父类构造代码块执行~~~
父类构造方法执行~~~
子类构造代码块执行~~~
子类构造方法执行~~~

面试题

执行顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Test {
static Test test1 = new Test();
static Test test2 = new Test();

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

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

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

public static void main(String[] args) {
System.out.println("main方法");
new Test();
}
}

结果

1
2
3
4
5
6
7
8
构造代码块
构造方法
构造代码块
构造方法
静态代码块
main方法
构造代码块
构造方法

总结

1、构造代码块用于给对象初始化,每次创建对象都会调用构造代码块,并且执行顺序在构造方法之前

2、静态代码块用于给类初始化,当类被加载的时候就会调用静态代码块(只执行一次),执行顺序在main方法之前

文章作者: 闲花手札
文章链接: https://www.islu.cn/posts/18904.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 闲花手札 | Lu's Blog
  • wechat
  • alipay

评论