constructor;构造函数。
构造函数的用途:是对对象进行初始化。
注意:
- 构造方法必须与类同名;
- 构造方法前不能有返回类型,例如 void;
- 构造方法不能被static, final, synchronized, abstract和native修饰;
构造方法是对象的初始化,static是控制访问权限,在类初始化时产生,所以构造方法不可static;
构造方法不能被子类继承,所以不能被final和abstract修饰;
构造方法是程序员自己设计的,不能native;
多线程时不会创建多个内存地址相同的对象,所以用synchronized修饰没有必要。 - 构造方法可以重载,以参数的个数、类型或者顺序区分。
需要特别注意的是第二点,加了返回类型的函数属于功能性函数,并非构造函数。
如下:
public class Item {
int Price;
String name;
Void Item(String name){//并非构造函数
this.name = name;
}
}
class Armor extends Item{
void Armor(String name){
}//并非构造函数
int ArmorLevel;
void show(){
System.out.println(name+"\t"+Price + "\t"+ArmorLevel);
}
public static void main(String[] args){
Armor a1 = new Armor("布甲");
Armor a2 = new Armor("锁子甲");
a1.show();
a2.show();
}
}
如上例子中,两个类Item和Armor都没有定义构造函数。默认还有一个隐藏的构造函数为:
Armor(){}
此时编译会报错:

修改方法为,将void删掉。
修改后的代码:
public class Item {
int Price;
String name;
Item(String name){//这个是定义的有参数构造方法,无参数构造方法就不存在
this.name = name;
// System.out.println("name是"+name);
}
public static void main(String[] args){
Armor a1 = new Armor("布甲");
Armor a2 = new Armor("锁子甲");
a1.show();
a2.show();
}
}
class Armor extends Item{
Armor(String name){//这个是定义有参数构造方法,定义后,无参数构造方法不再存在
super(name);//这里必须加显式super,因为父类中没有无参数构造方法。否则会报错
}
int ArmorLevel;
void show(){
System.out.println(name+"\t"+Price + "\t"+ArmorLevel);
}
}
运行结果:

1019

被折叠的 条评论
为什么被折叠?



