static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法。
实例一
public class A{
String name;
public A(String name){
this.name = name;
}
//静态块
static{
System.out.println("static语句块执行");
}
public static void main(String args[]){
A a = new A("张三");
A b = new A("李四");
A c = new A("王五");
}
}
程序运行后只输出了一条“static语句块执行”语句,因为在Java虚拟机的生命周期中一个类只被加载一次,又因为静态块是伴随A类加载执行的,所以不管构建多少次A类的实例对象,静态块都会被执行且只执行一次。
实例二
class A{
public A(){
System.out.println("A在构造体内");
}
{System.out.println("A在普通块内");}
static{
System.out.println("A在static静态块内");
}
}
public class B extends A{
public B(){
System.out.println("B在构造体内");
}
{System.out.println("B在普通块内");}
static{
System.out.println("B在static静态块内");
}
public static void main(String args[]){
new B();
}
}
输出结果如下:
A在static静态块内
B在static静态块内
A在普通块内
A在构造体内
B在普通块内
B在构造体内