在Java程序中,类的定义和方法的定义都必须放在一个“块”中,而条件语句,循环语句中的代码通常也放在一个“块”中。
所谓“块”,就是用{和}所包含的代码块,它们在逻辑上常常是一个整体。初始化块,独立于方法体和构造函数之外,可以看成是一个没有参数,没有返回值,没有方法名的特殊方法。
初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值,加载其他类等功能。初始化块和构造函数的功能相同,都可以在创建对象时完成一些初始化操,一般情况下,构造方法初始化和初始化块初始化可以通用。初始化块与构造方法区别:
构造方法在初始化时可以通过参数接收外界传入的值,而初始化块则不能。
初始化块的执行顺序在构造方法之前。如果构造方法多次重载,此时可以考虑将构造方法中通用的代码提到初始化块中定义。
public class
public static void
new
new A("");
}
}
class
{System.out.println("初始化块");}
public A(){System.out.println("无参的构造函数");}
public A(Stringname){System.out.println("带参数的构造函数");}
}
运行结果:
初始化块
无参的构造函数
初始化块
带参数的构造函数
与静态代码块的区别:
(1)静态的初始化块比非静态的初始化块执行的要早。静态初始化块的执行实际需要注意,它是在类加载器第一次加载该类时调用,不一定非要创建对象才触发(见下面代码所示)。
public class
static
System.out.println("加载Test类,执行静态代码块");
}
public static void
System.out.println("加载类Test完毕,执行main函数");
}
}
运行结果:
加载Test类,执行静态代码块
加载类Test完毕,执行main函数
(2)静态初始化块只执行一次,非静态的初始化块可执行多次。