一:初始化块——非静态初始化块
变量的赋值,有两种常用的方式。
1:变量声明中赋值。
2:构造函数中赋值。
事实上,java提供了第三种机制——初始化块。
例如:
class InitBlock {
//构造函数赋值
public InitBlock() {
//对另一构造函数的调用,且必须为第一行
this("fff",300);
bi = 200;
str1 = "abc";
System.out.println("constructor method A");
}
//构造函数赋值
public InitBlock(String str,int b) {
this.bi = b;
this.str1 = str;
System.out.println("constructor method B");
}
//初始化块
//初始化块赋值
{
bi = 100;
str1 = "string";
b = 180;
System.out.println("init block~~~~");
}
//初始化块
{
System.out.println("second");
}
private int bi;
private String str1;
private int ab = 10;//声明中赋值
private static int b;
public static void main(String[] args) {
InitBlock ib = new InitBlock();
System.out.println("bi = "+ib.bi);
System.out.println(InitBlock.b);
}
}
关于初始化块:
a.一个类可以有多个非静态初始化块初始化块,按照初始化块的顺序执行。
b.非静态初始化块是在构造类对象时执行,先执行初始化块,再执行构造主体部分。
c:非静态初始化块能对静态变量,实例变量进行初始化
构造器的具体处理步骤:
1)所有数据域被初始化为默认值(0、false或null)。
2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。
3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。
4)执行这个构造器的主体。