1.1:用类制造对象
对象与类
- 对象是实体,需要被创建,可以为我们做事情(具体)
- 类是规范,根据类的定义来创建对象(概念)
- 类定义了每一个对象长什么样、可以进行怎样的操作;而对象是这个类一个个的实例
- 对象 = 属性(数据) + 服务(操作/函数)
封装
- 把数据与对数据的操作放在一起
1.2:定义类
new VendingMachine(); //创建对象VendingMachine
vm = new VendingMachine(); //将新创建的对象交给变量vm(类型为自定义的VendingMachine)
VendingMachine vm = new VendingMachine(); //常用的方式
- 对象的变量为对象的管理者
- 点运算符( . )
v.insertMoney()
1.3:成员变量与成员函数
函数与成员变量
- 在函数中,可以直接写成员变量名来访问成员变量
- <函数>通过对象来调用
- v.insertMoney() 就进行了一次临时调用
调用临时建立了insertMoney()函数与 V 之间的关系,让insertMoney()内部的成员变量调用指的是 V 的成员变量
this
通过
this
:成员函数的一个特殊的固有的本地变量,代表调用这个函数的那个对象 ```java void insertMoney(int price){this.price = price; } //我们定义一个这样的函数
VendingMachine v = new VendingMachine()
v.insertMoney(30);
//这里,this.price 代表对象 V 的成员变量 price, price 代表 30(Java识别变量总是优先识别符合变量名最近的那一个)
<a name="3e0f3933"></a>
### 调用函数
- 通过`.`运算符调用某个对象的函数
- 在成员函数内部直接调用自己(`this`)的其他函数
<a name="0653fbb8"></a>
### 本地变量
- 定义在函数内部的变量是本地变量
- 本地变量的生存期和作用域都是函数内部
- 成员变量的生存期是对象的生存期,作用域是类内部的成员函数
---
<a name="e0912208"></a>
# 1.4:对象初始化
**构造函数:在构造的时候被自动调用的函数**
<a name="25a9e986"></a>
### 成员变量定义初始化
- 成员变量在定义的地方即可赋初值
- 没有初值的成员变量默认 `0` 值
- 对象变量 `0` 值,表示未管理任何对象
- 定义初始化可以调用函数,甚至可以使用已经定义的成员变量
<a name="9bbd2b0d"></a>
### 函数重载
- 一个类可以有多个构造函数,只要参数表不同
- 创建对象时给出不同的参数值,就会调用不同的构造函数
- 通过this()还可以调用其他构造函数
- 一个类里同名但是参数表不同的函数构成了**重载关系**
---
<a name="hVsO5"></a>
# 1.5:本周学习源码
```java
public class Vendingmachine {
int price=80;
int balance;
int total;
Vendingmachine() {
// TODO 构造函数,无参数
total=0;
}
Vendingmachine(int price) {
// TODO 构造函数,带有参数的构造函数
this.price=price;
}
void showprompt() {
System.out.println("Welcome!");
}
void showBalance() {
System.out.println("yours balance:"+balance);
}
void insertMoney(int amount) {
balance = balance + amount;
showBalance();
}
void getFood() {
if(balance >= price) {
System.out.println("here you are!");
balance = balance - price;
total = total + price;
}
}
public static void main(String[] args) {
Vendingmachine a;
a = new Vendingmachine(30);
a.showBalance();
Vendingmachine vm = new Vendingmachine();
vm.showprompt();
vm.showBalance();
vm.insertMoney(100);
vm.getFood();
vm.showBalance();
Vendingmachine vm1 = new Vendingmachine(30);
vm1.insertMoney(200);
vm.showBalance();
vm1.showBalance();
}
}