定义构造器
构造器(constructor)是一个方法。像普通方法一样,我们在类中定义构造器。构造器有如下基本特征:
- 构造器的名字和类的名字相同
- 构造器没有返回值
public class Test{
public static void main(String[] args){
Human aPerson = new Human(160);
System.out.println(aPerson.getHeight());
}
}
class Human{
/**
* construnctor
*/
Human(int h){
this.height = h;
System.out.println("I'm born");
}
/**
* accessor
*/
int getHeight(){
return this.height;
}
int height;
}
上面的程序会打印
160
- 为数据成员提供初始值 this.height = h;
- 执行特定的初始操作 System.out.println("I'm born");
初始化方法的优先级
public class Test{
public static void main(String[] args){
Human aPerson = new Human(160);
System.out.println(aPerson.getHeight());
}
}
class Human{
/**
* construnctor
*/
Human(int h){
this.height = h;
}
/**
* accessor
*/
int getHeight(){
return this.height;
}
int height = 170;
}
运行结果为:
160
对象最终的初始化值与构建方法中的值一致。因此:
构建方法 > 显式初始值 > 默认初始值 (事实上优先级与初始化时的执行顺序有关)
方法重载
public class Test{
public static void main(String[] args){
Human neZha = new Human(150,"shit");
System.out.println(neZha.getHeight());
}
}
class Human{
/**
* construnctor 1
*/
Human(int h){
this.height = h;
System.out.println("I'm born");
}
/**
* construnctor 2
*/
Human(int h,String s){
this.height = h;
System.out.println("Ne Zha:I'm born,"+s);
}
/**
* accessor
*/
int getHeight(){
return this.height;
}
int height ;
}
运行结果:
Ne Zha: I'm born, shit
150
上面定义了两个构造器,名字都是Human。两个构造器有不同的参数列表。
在使用new创建对象时,Java会根据提供的参数来决定构建哪一个构造器。比如在构建neZha时,我们提供了两个参数: 整数150和字符串"shit",这对应第二个构建方法的参数列表,所以Java会调用第二个构建方法。
public class Test{
public static void main(String[] args){
Human aPerson = new Human();
aPerson.breath(10);
}
}
class Human{
/**
* breath() 1
*/
void breath(){
System.out.println("hu..hu..");
}
/**
* breath() 2
*/
void breath(int rep){
int i;
for(i = 0;i<rep;i++){
System.out.println("lu..lu..");
}
}
int height ;
}
运行结果:
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
总结
constructor特征: 与类同名,无返回值
constructor目的: 初始化,初始操作
方法重载: 方法名 + 参数列表 -> 实际调用哪一个方法