与一般静态方法的比较

一般情况下, 如果有些代码必须在项目启动的时候就执行的时候, 需要使用静态代码块, 这种代码是主动执行的; 需要在项目启动的时候就初始化。

两者的区别就是: 静态代码块是自动执行的; 静态方法是被调用的时候才执行的 (静态方法可以用类名. 方法名的方式调用,也可以以一个类的对象来调用)。

我的说法只是便于理解,实际上静态代码是和 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();
	}
}
 
 
测试结果如下:
哈哈
小狗跑//即先调用静态代码块里的内容和方法
小狗的构造方法//然后再调用构造方法
小狗跑
小狗:汪汪汪