- 初次使用之处就是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(); } }
**对于基类、扩展类的static域来说,都是优先于普通域和构造器的执行**```javaclass Flag{Flag(String s){System.out.println("Flag("+s+")");}}class Art {static Flag flag = new Flag("art");Flag f = new Flag("withoutFlag-arg");Art(){System.out.println("Art()");}}class Drawing extends Art{static Flag flag = new Flag("drawing");Flag f = new Flag("withoutFlag-drawing");Drawing(){System.out.println("Drawing()");}}public class Cartoon extends Drawing{//在导出类中包含对父类的一个引用/*Cartoon(){System.out.println("Cartoon()");}*/public static void main(String[] args) {new Cartoon();}}
