通常在Java中使用{ }包装起来的叫做代码块,用于实现数据的初始化或者实现特定的算法,java中的代码块是不能单独执行的,必须通过特定的方式才可以运行。大体上有四类:

【1】普通代码块

【2】静态代码块

【3】同步代码块

【4】构造代码块

【5】各个代码块执行顺序比较


普通代码块

普通代码块也就是跟在方法( )之后的代码块,这也是最为常见的,就不过多解释了。


静态代码块

通过static{ }的方式来初始化代码,他的主要目的是对静态变量进行初始化,这种也见过


同步代码块

想到同步肯定想到synchronized,没错就是使用synchronized{ }来初始化的代码块,是一种线程的同步机制。


构造代码块

构造代码块是依托于构造函数来执行的,没执行构造函数之前就先执行构造代码块,不管是有参构造函数还是无参构造函数。那么构造代码块有什么作用呢?第一就是初始化的作用,这个应该都可以想到,第二就是初始化环境,因为代码块是在构造函数之前就执行了,所以可以用来初始化构造函数需要的复杂环境。


package TwoWeek;
/*构造代码块*/
public class StruBlock {
	{
		System.out.println("我是构造代码块");
	}
	
	public StruBlock(){
		System.out.println("我是无参构造函数");
	}
	
	public StruBlock(int a){
		System.out.println("我是有参构造函数");
	}
	
	public static void main(String args[]){
		new StruBlock();
		System.out.println();
		new StruBlock(4);
	}
}

输出结果为


我是构造代码块
我是无参构造函数

我是构造代码块
我是有参构造函数



各个代码块执行顺序比较

是各个代码块执行顺序的比较,可以看出静态代码块的是最先执行的,static代码块是随着类的加载而执行的,只执行一次,用于初始化类。

构造代码块每创建一个对象就会执行一次,且执行顺序优先于构造函数


package TwoWeek;
/*构造代码块*/
public class StruBlock {
	//普通代码块
	public void fun(){
		System.out.println("我是普通代码块");
	}
	
	//静态代码块
	static{
		System.out.println("我是静态代码块");
	}
	
	{
		System.out.println("我是构造代码块");
	}
	
	public StruBlock(){
		System.out.println("我是无参构造函数");
	}
	public static void main(String args[]){
		new StruBlock();
	}
}

执行结果


我是静态代码块
我是构造代码块
我是无参构造函数