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(); } }
运行结果:
父类静态初始化块 子类静态初始化块 父类初始化块 父类构造函数 子类初始化块 子类构造函数
程序运行顺序为:父静态-->子静态-->父初始化及构造-->子初始化及构造; 注意:初始化块和构造是接连运行的,不会父类子类交替.