静态代码块、构造代码块、构造函数

静态代码块

主要目的就是对静态属性进行初始化

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

构造代码块

在类中直接定义没有任何修饰符、前缀、后缀的代码块

1
2
3
{
System.out.println("构造代码块");
}
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
/**
* @Author Gude
* @Date 2016/3/12.
*/

public class Person {

Person() {
System.out.println("无参构造方法");
}

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

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


public Person(int a) {
System.out.println("带参构造方法");
}

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

}
}
运行结果

静态代码块
构造代码块
无参构造方法
---------
构造代码块
带参构造方法

解析

  1. 静态代码块随着类的加载被执行,并且只执行一次 ,并优先于主函数,此时对象还没有建立,并且只能调用静态成员变量
  2. 构造代码块在建立对象时执行,但它的执行是优先于构造函数的(ps:每次建立新的对象都会执行一次)
  3. 构造函数每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同

执行顺序

静态代码块 > 构造代码块 > 构造函数。

参考