public class InitialOrderTest {
public static String staticField = "静态变量";//(1)静态的全局变量
public String field = "变量";//(2)非静态成员变量
static {//(3)静态代码块
System.out.println(staticField);
System.out.println("静态初始化块");
}
{//(4)构造代码块
System.out.println(field);
System.out.println("初始化块");
}
public InitialOrderTest() {//(5)构造函数
System.out.println("构造器");
}
public static void main(String[] args) {
new InitialOrderTest();
}
}
(1)静态的变量:随着类的加载而加载,优先于对象存在。只执行一次,并先于主函数。在静态代码块中,上面的程序是“ System.out.println(staticField);System.out.println("静态初始化块");”
所以首先输出的是:"静态变量","静态初始化块"
(2)构造代码块:作用给对象进行初始化,运行时间:对象一建立就运行,而且优先于构造函数,在构造代码块中,程序是“ System.out.println(field); System.out.println("初始化块");”
所以输出的顺序是:"变量","初始化块"
构造函数和构造代码块的区别:构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,构造代码块中定义的是不同对象共性的初始化内容。
(3)构造函数:输出:“构造器”
上面的运行结果如下:
静态变量
静态初始化块
变量
初始化块
构造器
|