static块的执行顺序:
public class Dog {
public static int i = 10;
static {
i = 20;
}
public Dog() {
i = 30;
}
}
//public class Test {
// public static void main(String[] args) {
// System.out.println(Dog.i);// i=20
// }
//}
//public class Test {
// public static void main(String[] args) {
// Dog d = new Dog();
// System.out.println(Dog.i);// i=30
// System.out.println(d.i);// i=30
// }
//}
加载类的时候,先完成静态变量(static i=10)的内存分配,再执行静态块(i=20),在创建对象之前就已经执行完成。
static块可访问的范围:
public class Dog {
public int i = 10;
static {
i = 20;// 报错
show();// 报错
}
public Dog() {
i = 30;
}
public void show(){
}
}
static块只能访问静态变量和静态方法,因此,static内不能使用this、super关键字。