构造代码块:
构造代码块的作用:给对象进行统一的初始化。
构造函数的作用: 给对应的对象进行初始化。
构造代码块的格式:
{
构造代码块
}
注意: 构造代码块的大括号必须位于成员位置上。(即类之内、方法之外。)
代码块的类别:
- 1、构造代码块。
- 2、局部代码块:大括号位于方法之内。作用:缩短局部变量的生命周期,节省一点点内存。
- 3、静态代码块: static
构造代码块要注意的事项:
- 1、java编译器编译一个java源文件的时候,会把成员变量的声明语句提前至一个类的最前端。
- 2、成员变量的初始化工作其实都在在构造函数中执行的。
- 3、一旦经过java编译器编译后,那么构造代码块的代码块就会被移动构造函数中执行,是在构造函数之前执行的,构造函数的中代码是最后执行 的。
- 4、成员变量的显示初始化与构造代码块的代码是按照当前代码的顺序执行的。
- 5、构造函数是最后执行的。(自己总结的)
举例1:
class Baby{
int id; //身份证
String name; //名字
//构造代码块...
{
//System.out.println("构造代码块的代码执行了......");
cry();
}
//带参构造函数
public Baby(int i , String n){
id = i;
name = n;
}
//无参构造方法
public Baby(){
}
public void cry(){
System.out.println(name+"哇哇哭...");
}
}
class Demo4{
public static void main(String[] args){
//Baby b1 = new Baby(110,"狗娃");
//System.out.println("编号:"+ b1.id + " 名字:"+b1.name);
//以下大括号内是一个局部代码块
{
new Baby(110,"狗娃");
new Baby(112,"狗剩");
new Baby();
}
/*
new Baby(110,"狗娃");//先调用局部代码块,再调用有参构造函数
new Baby(112,"狗剩");//同上
new Baby();//先调用局部代码块,再调用无参构造函数
*/
}
}
举例2:
class Demo5 {
int i = 100000000; //成员变量的显初始化
//构造代码块 //构造代码块的初始化
{
i = 200000000;
}
//构造函数
public Demo5(){ //构造函数
i = 300000000;
}
public static void main(String[] args)
{
Demo5 d = new Demo5();
System.out.println("i = "+d.i); //i=300000000
}
}