• 初次使用之处就是static域初始化发生的地方;
    • 所有的static对象和static代码段都会在类加载的时候,依照定义的顺序进行依次初始化。
    • 且static修饰的只执行一次。 ```java

    class Insect { private int i = 9; protected int j;

    Insect() { System.out.println(“i = “ + i + “, j = “ + j); j = 39; }

    private static int x1 = printInit(“static Insect.x1 initialized”);

    static int printInit(String s) { System.out.println(s); return 47; } }

    public class Beetle extends Insect { private int k = printInit(“Beetle.k initialized”);

    public Beetle() { System.out.println(“k = “ + k); System.out.println(“j = “ + j); }

    private static int x2 = printInit(“static Beetle.x2 initialized”);

    public static void main(String[] args) { System.out.println(“Beetle constructor”); Beetle b = new Beetle(); } }

    1. **对于基类、扩展类的static域来说,都是优先于普通域和构造器的执行**
    2. ```java
    3. class Flag{
    4. Flag(String s){
    5. System.out.println("Flag("+s+")");
    6. }
    7. }
    8. class Art {
    9. static Flag flag = new Flag("art");
    10. Flag f = new Flag("withoutFlag-arg");
    11. Art(){
    12. System.out.println("Art()");
    13. }
    14. }
    15. class Drawing extends Art{
    16. static Flag flag = new Flag("drawing");
    17. Flag f = new Flag("withoutFlag-drawing");
    18. Drawing(){
    19. System.out.println("Drawing()");
    20. }
    21. }
    22. public class Cartoon extends Drawing{
    23. //在导出类中包含对父类的一个引用
    24. /*Cartoon(){
    25. System.out.println("Cartoon()");
    26. }*/
    27. public static void main(String[] args) {
    28. new Cartoon();
    29. }
    30. }