所谓“块”,就是用{}所包含的代码段,它们在逻辑上常常是一个整体。初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他类等功能。初始化块的执行顺序在构造方法之前,如果构造方法多次重载,此时可以考虑将构造方法中共通的代码提到初始化块中定义。
非静态初始化块主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。由于非静态成员不能在静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法。静态初始化块只调用一次,是在类被第一次加载到内存时,并非要创建对象才执行。
import org.junit.Test;
public class EqualsTest {
@Test
public void test(){
Print test1 = new Print();
Print test2 = new Print();
}
}
class Print{
{
System.out.println("非静态代码块");
}
static{
System.out.println("静态代码块");
}
}
结果:
静态初始化块与非静态初始化块有一定的区别,静态的初始化块比非静态初始化块执行要早,而且静态初始化块只执行一次,非静态的初始化块可执行多次。静态初始化块的执行时机需要注意,它在类加载器第一次加载类时调用,不一定非要创建对象,例如使用类名.静态方法名。