1.变量初始化顺序:静态变量(静态初始化块)----->变量(变量初始化块)----->构造器
public class InitializationTest {
// 静态变量
public static String staticField = "静态变量";
// 变量
public String field = "变量";
// 静态初始化块
static {
System.out.print(staticField);
System.out.println("静态初始化块");
}
// 初始化块
{
System.out.print(field);
System.out.println("初始化块");
}
// 构造器
public InitializationTest() {
System.out.println("构造器初始化");
}
public static void main(String[] args) {
new InitializationTest();
}
}
打印结果:静态变量静态初始化块
变量初始化块
构造器初始化
2. 如果有继承关系又是怎么样的呢?
class Parent {
// 静态变量
public static String p_StaticField = "父类--静态变量";
// 变量
public String p_Field = "父类--变量";
// 静态初始化块
static {
System.out.print(p_StaticField);
System.out.println(" 父类--静态初始化块");
}
// 初始化块
{
System.out.print(p_Field);
System.out.println(" 父类--初始化块");
}
// 构造器
public Parent() {
System.out.println("父类--构造器");
}
}
public class SubClass extends Parent {
// 静态变量
public static String s_StaticField = "子类--静态变量";
// 变量
public String s_Field = "子类--变量";
// 静态初始化块
static {
System.out.print(s_StaticField);
System.out.println(" 子类--静态初始化块");
}
// 初始化块
{
System.out.print(s_Field);
System.out.println(" 子类--初始化块");
}
// 构造器
public SubClass() {
System.out.println("子类--构造器");
}
// 程序入口
public static void main(String[] args) {
new SubClass();
}
/**
* 打印结果
* 父类--静态变量 父类--静态初始化块
子类--静态变量 子类--静态初始化块
父类--变量 父类--初始化块
父类--构造器
子类--变量 子类--初始化块
子类--构造器
*/
}
首先是父类静态变量---->子类静态变量----->父类变量---->父类构造器----->子类变量------>子类构造器
3.如果是静态变量和静态变量之间初始化顺序则是按照变量声明出现的顺序初始化