与一般静态方法的比较
一般情况下, 如果有些代码必须在项目启动的时候就执行的时候, 需要使用静态代码块, 这种代码是主动执行的; 需要在项目启动的时候就初始化。
两者的区别就是: 静态代码块是自动执行的; 静态方法是被调用的时候才执行的 (静态方法可以用类名. 方法名的方式调用,也可以以一个类的对象来调用)。
我的说法只是便于理解,实际上静态代码是和 class 绑定的,class 装载成功就表示执行了你的静态代码了,也就是说 class.forName(包名. 类名)表示一个类的装载,生成一个对象时 A a = new A() 实际上是 A a = (A)class.forName(包名. A).newInstance(),既包含这个装载过程,所以会执行静态代码块。
运行的优先级
静态代码块 > 构造代码块 > 构造方法 > 一般方法
静态代码块的格式大概如下
static {
int a ;
int b ;
......
}
构造代码块的格式如下 (作用一般是初始参数)
{
System.out.println("这是一个构造代码块");
}
如何使用静态代码块,且看以下代码
public class dog {
static {
System.out.println("哈哈");
run();
}
public dog() {
System.out.println("小狗的构造方法");
}
public static void run() {
System.out.println("小狗跑");
}
public void song() {
System.out.println("小狗:汪汪汪");
}
}
测试
public class Test {
public static void main(String[] args) {
dog d = new dog();
dog.run();
d.song();
}
}
测试结果如下:
哈哈
小狗跑//即先调用静态代码块里的内容和方法
小狗的构造方法//然后再调用构造方法
小狗跑
小狗:汪汪汪