- 初次使用之处就是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域来说,都是优先于普通域和构造器的执行**
```java
class 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();
}
}