package chapter16;
public class Static1 {
public Static1() {
System.out.println("Static1的类的构造器");
}
static {
System.out.println("Static1的执行静态代码块");
}
}
class C2{
static {
System.out.println("C2的执行静态代码块");
}
public static void main(String[] args) {
System.out.println("C2的入口方法");
new Static1();
new Static1();
}
}
输出结果:
C2的执行静态代码块
C2的入口方法
Static1的执行静态代码块
Static1的类的构造器
Static1的类的构造器
从上例中可以看到,静态代码块的优先级高于静态方法,而且静态代码块只执行一次,所以静态代码块常用于对类属性进行初始化。
package chapter16;
public class Static2 {
static int i;
static String str;
int j;
static {
i=10;
str="sasa";
//j=20;//报错,非静态属性无法在静态块内初始化
}
public static void main(String[] args) {
System.out.println(Static2.i);
System.out.println(Static2.str);
}
}
输出结果:
10
sasa