(1)静态代码块: 定义在成员位置,使用static修饰的代码块
特点:当以任意形式第一次使用到该类时执行。该类不管创建多少对象,静态代码块只执行一次。可以用于给静态变量赋值,给类进行初始化。
(2)构造代码块: 定义在类中成员位置的代码块
特点:优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作,没创建一个对象就会执行一次构造代码块。
(3)局部代码块: 定义在方法或语句中
特点:以"{}"划定的代码区域,此时只需关注作用域的不同即可。

class Person{
	//构造代码块(2)
	{
		System.out.println("2构造代码块QAQ");
	}
	
	//静态代码块(1首先执行)
	static{
		System.out.println("1静态代码块QWQ");
	}
	
	//构造函数(3)
	Person(){
		System.out.println("3构造方法AQA");	
	}
	
	void show(){
		int x=9;
		//局部代码块(4)
		{
		System.out.println("4局部代码块QVQ");			
		}
	}
}

class BlockDemo{
	public static void main(String[] args){
		Person p = new Person();
		p.show();
		Person p1 = new Person();
		p1.show();
		Person p2 = new Person();
		p2.show();		
	}
}

测试结果:
可以看到,不管new多少次,静态代码块始终最先执行并且只执行一次。