1.构造函数:
如果一个类里,有一个成员函数和类的名称完全一致,那么该成员函数称为构造函数,且在每创建一个该类的对象时就会自动调用一次该构造函数;
并且 构造函数不可以有返回类型,直接是 函数名(){};前面不能有返回类型,
如 void 函数名 (){}是不对的。
2.重载:
一个类可以有多个构造函数(同名),但他们的参数表不同;
创建对象时给的参数值,决定了走进哪个构造函数;
通过this()可以调用其他构造函数;
一个类里的同名但参数表不同的函数构成了重载的关系;
还是以自动售货机举例:
public class VendingMachine {
int price=999;
int balance;
int total;
//定义三个属性——全局变量:价格 余额 总收入,也是成员变量
VendingMachine(){
price=55;
}//构造函数1-无参数
VendingMachine (int price){
this.price=price-1;
}//构造函数2-参数price
void showPrompt(){
System.out.println("Welcome!");
}//操作1-提示
void insertMoney(int input){
balance=balance+input;
}//操作2-投钱计算余额
void showBalance(){
System.out.println("你的余额是:"+balance);
}//操作3-显示余额
void getFood(){
if(balance>=price){
System.out.println("Here u are");
balance=balance-price;
total=total+price;
}
else {
System.out.println("再给"+(price-balance)+"块");
}
}//操作4-出货判断
public static void main(String[] args){
VendingMachine vm=new VendingMachine();//自动调用构造函数1
vm.showPrompt();//对象调用操作1
vm.showBalance();
vm.insertMoney(1);
vm.getFood();
vm.showBalance();
VendingMachine vm1=new VendingMachine(100);//自动调用构造函数2
vm1.insertMoney(1000);
vm1.showBalance();
vm.showBalance();
}
}
Debug一下,关注返回的price,可以看到vm自动调用了构造函数1,vm1自动调用了构造函数2