这是从JAVA面试题解惑系列中学到的,记录一下。
下面是一个类中的静态变量、变量以及构造函数的初始化顺序。
public class InitialOrderTest
{
public static String staticField = "静态变量";
public String field = "变量";
static
{
System.out.println(staticField);
System.out.println("静态初始化块");
}
{
System.out.println(field);
System.out.println("初始化块");
}
public InitialOrderTest()
{
System.out.println("构造器");
}
public static void main(String[] args)
{
new InitialOrderTest();
}
}
//**********************
//输出结果为;
//**********************
//静态变量
//静态初始化块
//变量
//初始化块
//构造器
下面是子类和父类中静态变量、变量以及构造函数的初始化顺序。
public class InitialOrder extends Parent
{
public static String s_StaticField = "子类--静态变量";
public String s_Field = "子类--变量";
static
{
System.out.println(s_StaticField);
System.out.println("子类--静态初始化块");
}
{
System.out.println(s_Field);
System.out.println("子类--初始化块");
}
public InitialOrder()
{
System.out.println("子类--构造器");
}
public static void main(String[] args)
{
new InitialOrder();
}
}
class Parent
{
public static String p_StaticField = "父类--静态变量";
public String p_Field = "父类--变量";
static
{
System.out.println(p_StaticField);
System.out.println("父类--静态初始化块");
}
{
System.out.println(p_Field);
System.out.println("父类--初始化块");
}
public Parent()
{
System.out.println("父类--构造器");
}
}
//**********************
//输出结果为;
//**********************
//父类--静态变量
//父类--静态初始化块
//子类--静态变量
//子类--静态初始化块
//父类--变量
//父类--初始化块
//父类--构造器
//子类--变量
//子类--初始化块
//子类--构造器