Java细节拓展之——初始化块
Q:静态初始化块与非静态初始化块有什么区别?
解析:
A:所谓“块”,就是用{}所包含的代码段,它们在逻辑上常常是一个整体。
初始化块
主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他类等功能。初始化块的执行顺序在构造方法之前,如果构造方法多次重载,此时可以考虑将构造方法中共通的代码提到初始化块中定义。
非静态初始化块
主要用于对象的初始化操作,在每次创建对象时都要调用一次,其执行顺序在构造方法之前。由于非静态成员不能在静态方法中使用,同样也不能在静态初始化块中。
因此,静态初始化块主要用于初始化静态变量和静态方法。静态初始化块只调用一次,是在类被第一次加载到内存时,并非要创建对象才执行。
Example:
.编写静态初始化块 打印This is static initialization block
故下面的输出代码中只有第一行出现了静态初始化块的代码
This is static initialization block(这一行调用了静态初始化块的代码)
This is initialization block, id is 0
This is initialization block, id is 1
This is initialization block, id is 2
Person [name=c, age=10, gender=false, id=2]
Person [name=b, age=12, gender=true, id=1]
Person [name=a, age=11, gender=false, id=0]
This is initialization block, id is 3
This is constructor
null,0,false,3
Person [name=null, age=0, gender=false, id=3]