构造函数构造函数是什么?
在堆内存中创建对象的时候对象均需要初始化初始化的动作就有构造函数来实现事实上每个类在创建对象且初始化的时候均调用了一个隐式构造函数 用户在程序若重写声明构造函数则是显式构造函数JVM在执行的时候则以用户定义的构造函数为主
构造函数特点:
<>函数名必须与类名保持一致
<>没有类型定义即是没有voidintString类类型等等数据类型的修饰
<>不可存在return语句
<>可以通过方法重载的方式来区别不同对象的初始化方式
比如Person类对象的初始化就如刚刚诞生的婴儿那般有的婴儿出生前还没有取好名字但出生后称了体重;有的出生前已经取好了名字且出生后也称了体重但是不管怎么样婴儿都是哭着来到这个世界的所以都共同拥有一个方法cry()
classPerson{
privateStringname;//姓名
privateintweight;//出生体重
privateintorder;//编号
//不取名字也不称重
Person(){
Systemoutprintln(Order:+order+donothing!);
cry();
}
//取好名字未称体重
Person(intorderStringname){
Systemoutprintln(Order:+order+Nameis:+name);
cry();
}
//未取名字但称体重
Person(intorderintweight){
Systemoutprintln(Order:+order+Weightis:+weight+Kg);
cry();
}
//取了名字称了体重
Person(intorderStringnameintweight){
Systemoutprintln(Order:+order+Nameis:+name+Weightis:+weight+Kg);
cry();
}
//但是都是哭着来的
voidcry(){
Systemoutprintln(Cryingwhenbirth!);
}
publicstaticvoidmain(String[]args){
Personchild=newPerson();
Systemoutprintln(华丽的分割线);
Personchild=newPerson(Smith);
Systemoutprintln(华丽的分割线);
Personchild=newPerson();
Systemoutprintln(华丽的分割线);
Personchild=newPerson(John);
}
}
/*运行结果如下:
Order:donothing!
Cryingwhenbirth!
华丽的分割线
Order:Nameis:Smith
Cryingwhenbirth!
华丽的分割线
Order:Weightis:Kg
Cryingwhenbirth!
华丽的分割线
Order:Nameis:JohnWeightis:Kg
Cryingwhenbirth!
*/
上面的代码描述了构造函数的基本特点一个空参数的构造函数和三个带有不同参数变量的构造函数在实例化对象的时候便有了不同的实现方式
构造函数出现的时机:
在定义类的时候分析现实世界中具体事物的时候若该事物存在或者具备一些特性或者行为那就将这些内容定义到构造函数中如例子中的婴儿具有的特性就是体重等一些生理指标和名字标示符行为动作就是出生后先哭
构造代码块
是将重载的构造函数中所具有的共同的功能或者特性再次抽取出来放在一起执行
格式在程序中写一对大括号 { } 即可与构造函数具有同样的域范围即可然后将共有的特性抽取到括号内比如cry(); 注下面程序中红色部分
并且是先于构造函数执行的 可以参考下面代码执行的结果
如下面的代码
classPerson{
privateStringname;//姓名
privateintweight;//出生体重
privateintorder;//编号
//构造代码块
{
cry();
}
//不取名字也不称重
Person(){
Systemoutprintln(Order:+order+donothing!);
}
//取好名字未称体重
Person(intorderStringname){
Systemoutprintln(Order:+order+Nameis:+name);
}
//未取名字但称体重
Person(intorderintweight){
Systemoutprintln(Order:+order+Weightis:+weight+Kg);
}
//取了名字称了体重
Person(intorderStringnameintweight){
Systemoutprintln(Order:+order+Nameis:+name+Weightis:+weight+Kg);
}
//但是都是哭着来的
voidcry(){
Systemoutprintln(Cryingwhenbirth!);
}
publicstaticvoidmain(String[]args){
Personchild=newPerson();
Systemoutprintln(华丽的分割线);
Personchild=newPerson(Smith);
Systemoutprintln(华丽的分割线);
Personchild=newPerson();
Systemoutprintln(华丽的分割线);
Personchild=newPerson(John);
}
}
/*执行结果如下:
Cryingwhenbirth!
Order:donothing!
华丽的分割线
Cryingwhenbirth!
Order:Nameis:Smith
华丽的分割线
Cryingwhenbirth!
Order:Weightis:Kg
华丽的分割线
Cryingwhenbirth!
Order:Nameis:JohnWeightis:Kg
*/
以上就是构造函数最基本的应用了当然构造函数在子类继承父类的时候还有要注意的地方和细节会在记录继承特性的时候补充还望指正