构造代码块,是为了书写便利。
有些方法在对象创建的时候就希望可以拥有。好比每一个孩子出生需要哭,哭就类似于孩子的本能。这就类似于构造代码块,每个对象刚被创建就立刻需要!
为什么说它便利呢?把创建对象想成孩子出生,世界上每天有那么多孩子出生,每一个都需要哭,这是她们自带的能力。代码不是孩子,会自己添加自己的属性,需要我们来写,那么难道每一个对象被创建的时候,就写一次属性?岂不麻烦,构造代码块就起这个作用,让每一个对象刚被创建就具有自己的属性。但是同时需要知道,孩子出生的哭是为了让肺可以进入空气,接下来的日子里,这个孩子就可以不用为了呼吸而哭。构造代码块只在对象创建的时候被调用,进行了一系类看得见也好看不见也好的操作之后就不在进行了。(看见看不见其实可以理解成有没有被打印,好比我设定了孩子刚出生的年龄为1岁,但没有打印,那么这个年龄执行了,只不过不会反应在操作版上。)
构造代码块被定义了就一定会实现,但实现与打印不同,如果定义了变量,但没有打印,仍然是没有结果的。并且在函数创建对象的时候,构造代码快会被调用。输出代码块的内容。但是在没有对象创建的时候,则不会调用构造函数。
构造代码块:
对一个类的所有对象进行一个统一的初始化操作,只要这个对象被创建,就会执行。
Java中的构造代码块 :用一个大括号包起来的内容
{
执行的代码;
}
【位置】
在构造函数之前,在成员变量之后,成员方法之前
代码块分为三大类:
1. 构造代码块
2. 局部代码块 (基本不用了) 缩短局部变量的生存周期
3. 静态代码块 static
package fuhei;
class CuteBaby {
int id;
char sex;
private String name;
//成员变量
{
cry();
id = 5;
System.out.println(id);
sex = 'n';
System.out.println(sex);
//构造代码块
}
//构造函数
public CuteBaby(String n) {
name = n;
}
public CuteBaby(char s) {
sex = s;
System.out.println("fds");
}
public CuteBaby(int i) {
id = i;
}
//私有化变量的set 和 get 方法
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void cry() {
System.out.println("哇哇的哭~~~");
}
}
public class Demo01 {
public static void main(String[] args) {
CuteBaby baby = new CuteBaby("李一");
//c创建了对象,调用了构造代码块,所以输出了哭,年龄,以及性别
//这里也传了参,但在传参的方法中,并没有打印方法,所以无法显示
System.out.println("=====================================");
baby.cry();//调用了哭方法
System.out.println("=====================================");
System.out.println(baby.id);//对象调用方法名,
System.out.println("=====================================");
CuteBaby doubi = new CuteBaby('M');
//这个点用的是char行的构造代码块,这里定义了性别和cry,因为下面让打印的是id,所以一定会出现ID号
//因为他同时又传了参,所以会调用构造代码块和传参类型的函数
System.out.println("=====================================");
System.out.println(doubi.id);
System.out.println("=====================================");
CuteBaby mengbi = new CuteBaby(15);
//最后又创建了对象,所以调用了构造代码块
}
}