本文转载自微信公众号《简略编程》,院长先若所著。转载本文请联系剑仙编程公众号。前言:构造代码块与构造函数之间存在一定的联系。为了抓住这个联系,我总结了一个案例,可以加深你对构造函数和构造代码块的理解。写这篇文章是为了给需要迷茫的人提供一些帮助。还是那句话:你越懂得与人分享,你的附加值就越大!在看代码之前,首先要明白一个需求:用Java类来描述一个婴儿,假设现在有两种婴儿,一种婴儿出生时有名字,我们称这种婴儿为白虎,而另一种婴儿出生后有名字,我们称这种婴儿为黑户。(为了方便理解,我把出生时有名字的称为白虎,出生后起名的称为黑虎)//宝宝类publicclassBaby{intid;//身份证Stringname;//姓名//哭泣的公众号voidcry(){System.out.println(name+"Crying...");}}classTest{publicstaticvoidmain(String[]args){//创建宝宝对象Babybaby=newBaby();//宝宝出生baby.id=111;baby.name="小宝贝";//黑狐baby.cry();}}??运行结果:小宝宝在哭。...由于宝宝出生后被赋值,所以宝宝是黑户。现在我们想让宝宝一出生就有名字,所以需要用到构造函数。构造函数的作用:初始化对应的对象。构造函数定义的格式:修饰函数名(形参){函数体。..}构造函数中需要注意的细节:1.构造函数没有返回值类型2.构造函数的函数名必须和类名保持一致3.构造函数不是我们手动调用的,而是当对应的对象被创建后,jvm会主动调用对应的构造函数4.如果一个类没有显式写构造函数,Java编译器会为该类添加一个无参构造函数5.如果一个类已经显式写了构造方法时使用,Java编译器不会给类添加一个无参数的构造方法。6、一个类中可以有多个构造函数,以函数重载的形式存在。//宝宝类publicclassBaby{intid;//身份证Stringname;//name//无参构造函数publicBaby(){}//有参构造函数publicBaby(intid,Stringname){this.id=id;this.name=name;System.out.println("Baby的属性已经初始化!!!");}//crypublicvoidcry(){System.{//创建一个婴儿对象Babybaby=newBaby(222,"cute");//婴儿出生在白户baby.cry();}}?运行结果:Baby的属性被初始化!!!小可爱哭了。...通过以上黑白户型,我们可以对构造函数有一个深刻的认识。接下来扩展构建代码块,还是同一个例子,只是需求变了。现在的需求是宝宝一出生就必须哭。可能说到这里,如果有人看懂了上面的代码,肯定马上就会想到。这不简单。在构造函数中写哭泣的方法是不够的。简洁一点,能少写就不要多写,可以先看下面的代码。//宝宝类publicclassBaby{intid;//身份证Stringname;//姓名//无参构造函数publicBaby(){cry();}//有参构造函数publicBaby(intid,Stringname){this.id=id;this.name=name;cry();}//哭publicvoidcry(){System.out.println("Wowcrying...");}}classTest{publicstaticvoidmain(String[]args){//创建一个白色家庭婴儿对象Babybaby=newBaby(222,"cute");//白色家庭//创建黑色家庭婴儿对象Babybaby1=newBaby();//黑色家庭}}??运行结果:哭。...哭了。...虽然白人和黑人宝宝出生的时候都会哭,但是两个构造函数中有重复的代码,cry()方法重复了两次。为了解决重复代码的问题,让构造代码块出现在下方。我们走吧!构造函数的作用:初始化对应的对象构造代码块的作用:统一初始化对象构造代码块的格式:{构造代码块}注意:构造代码块的花括号必须放在在代码的成员位置块的类型:1.构造代码块2.局部代码块花括号位于方法内部作用:缩短局部变量的生命周期,节省一点内存。三、静态代码块{staticcodeblock}构造代码块需要注意的事项:1、Java编译器在编译Java源文件时,会将成员变量的声明语句提前到类的前端2、成员变量的初始化工作实际上是在构造函数中进行的3、一旦被Java编译器编译,构造代码块的代码就会被移到构造函数中,在构造函数之前执行。构造函数中的代码是最后执行的4.成员变量的显式初始化和代码块的构造都是按照当前代码的先后顺序执行的。);}//无参数构造函数publicBaby(){}//带参数构造函数publicBaby(intid,Stringname){this.id=id;this.name=name;}//哭泣publicvoidcry(){System.out.println("Wow,cry...");}}classTest{publicstaticvoidmain(String[]args){//创建一个白虎宝宝对象Babybaby=newBaby(222,"cute");//白虎//创建一个blackhouseholdbabyobjectBabybaby1=newBaby();//Blackhousehold//anonymousobjectnewBaby();}}???运行结果:哭。...哭了。...哭了。...//BabyclasspublicclassBaby{intid;//IdentityCardStringname;//Name//构造代码块{cry();}//无参构造函数publicBaby(){}//有参构造函数publicBaby(intid,Stringname){this.id=id;this.name=name;}//哭了publicvoidcry(){System.out.println("哇哭了...");}}classTest{publicstaticvoidmain(String[]args){//部分代码块{//创建白色家居宝贝对象Babybaby=newBaby(222,"小可爱");//白色家居//创建黑色家居householdThebabyobjectBabybaby1=newBaby();//BlackHouse//AnonymousobjectnewBaby();}}}?【小编推荐】用Java打造你自己的文本编辑器1000集北航大师亲身教学大白话看懂Java教程基础:Java.Securityframework的签名、加密、摘要和证书你真的了解JavaScript闭包和高阶函数吗?这篇文章告诉你Java日期和时间API到底有多烂
