public class Test {
public Test() {
System.out.println(" 构造函数");
}
@1:静态初始化块
static
{
System.out.println("static{}");
}
@2:初始化块
{
System.out.println("{}");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
运行结果为:
static{}
main()
程序执行顺序为:静态初始化块static{}-->初始化块{}-->构造函数constructor;
注意:即使没有生成new此实例或此类是否有static main()函数,静态初始化块static{}也照样会运行。
在继承的情况下:
class Test{
Test(){
System.out.println("父类构造函数");
}
static{
System.out.println("父类静态初始化块");
}
{
System.out.println("父类初始化块");
}
}
public class TestChild extends Test{
public TestChild() {
System.out.println("子类构造函数");
}
static
{
System.out.println("子类静态初始化块");
}
{
System.out.println("子类初始化块");
}
public static void main(String[] args) {
new TestChild();
}
}
运行结果:
父类静态初始化块
子类静态初始化块
父类初始化块
父类构造函数
子类初始化块
子类构造函数
程序运行顺序为:父静态-->子静态-->父初始化及构造-->子初始化及构造;
注意:初始化块和构造是接连运行的,不会父类子类交替.