java代码块的理解

package 代码块;
class mmm{
	//构造块
	{
		System.out.println("mmm 1 普通块");//每次实例化都执行一次,且在构造方法之前。
	}
	//静态代码块
	static {
		System.out.println("mmm 2 static");//优先于构造方法和普通块,且只执行一次
	}
	//构造方法
	public mmm() {
		System.out.println("mmm 3 构造方法");
	}
}
public class 代码块 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		{
			int x = 1;
			System.out.println("主类	1 普通块	"+x);//在主类中 普通块
		}
		int x = 2;
		System.out.println("主类	3 mian方法	"+x);
		new mmm();
		new mmm();
		new mmm();
	}
	{
		System.out.println("主类	4 普通块");//在主类中main之外 普通块不会调用
	}
	//主类静态代码块
	static {
		System.out.println("主类	2 static");//在主类中main之外 普通块会调用,且在main方法之前
	}
	

}

  输出结果:

 1 主类 2 static
 2 主类    1 普通块    1
 3 主类    3 mian方法    2
 4 mmm 2 static
 5 mmm 1 普通块
 6 mmm 3 构造方法
 7 mmm 1 普通块
 8 mmm 3 构造方法
 9 mmm 1 普通块
10 mmm 3 构造方法

总结:

在一个类中,构造块每次实例化都会执行,且优先于构造方法,static构造块又称为静态代码块,更优先于构造块调用,且只调用一次,一般用来初始化静态属性。

原文地址:https://www.cnblogs.com/MYDoraemon/p/8948810.html