接下来讲讲static自由块。
前面提到了自由块(游离块),那么作为Java源代码特殊的组成部分,是可以用static来修饰的。修饰后的结果我们来分析下。
自由块可以看成是一种特殊的方法,这个方法没有方法名、没有输入参数、没有返回值,不能进行方法调用。从这个角度来看,在自由块前面也可以加上static关键字来修饰。这样,这个自由块就成了静态自由块。静态自由块通常用于初始化静态变量。
public class Count {
private int serialNumber;
public static int counter;
static {
System.out.println("static自由块被执行");
counter = 1;
}
public static int getTotalCount() {
return counter;
}
public Count() {
counter++;
serialNumber = counter;
}
public static void main(String[] args) {
System.out.println("main() invoked");
System.out.println("counter = " + Count.counter);
}
}
在这个类中,定义了一个静态的int类型变量counter,然后在static自由块中初始化这个变量。编译并运行这个程序,可以得到如下的输出:
static自由块被执行
main() invoked
counter = 1
因为static自由块是类相关而不是实例相关的,所以,即使没有实例化对象,它也会被执行(在main()方法中没有实例化这个类)----它将向控制台输出“static自由块被执行”并将静态变量“counter”初始化成1。