初始化块
下面代中{}的内容就是初始化块
public class User {
public String name;
private int age;
private String email;
public static int publicStaticField = 1;
private static int privateStaticField = 10;
{
// 初始化块
age = 12
System.out.println("UserClass is initialized");
}
// ...
}
初始化块会在类创建实例时自动执行,如果有多个初始化块则按顺序执行
静态初始化块
静态初始化块就是static修饰的初始化块
public class User {
public String name;
private static int age;
private String email;
public static int publicStaticField = 1;
private static int privateStaticField = 10;
static {
// 静态初始化块
age = 12
System.out.println("UserClass is initialized");
}
// ...
}
静态初始化块只会在类加载的时候执行,且只能给静态变量赋值
区别
可以看出初始化块与静态初始化块的区别在于:
- 执行阶段不同:初始化块在类创建实例时执行,创建多个实例则执行多次;静态初始化块在类加载时(JVM类加载器将.class字节码加载为class对象)执行,即使创建多个实例也只执行一次;
- 操作对象不同:初始化块能够给普通成员变量赋值;静态初始化块只能给静态变量赋值,不能给普通成员变量赋值;