一、面向对象
- 定义【面试必备】:面向对象是一种编程思想,对象是指现实生活中的具体存在事物,是类的具体描述。【例如:一辆超跑跟超跑设计图纸==》图纸即为类,造出来的超跑就是对象】。
- 类是指一组具有相同或者相似的属性、行为的统称,是对象的抽象。
-
类的创建:
/** * 创建Dog类 * 抽取狗子的特征,定义为属性 * 抽取狗子的行为,定义为方法 * @author Dushine2008 * */ public class Dog { // 属性--品种-哈士奇、年龄-3、名字-道哥、颜色-黑白 String breed; int age; String name; String color; // 方法 public void eat(String food) { System.out.println("狗子喜欢吃:" + food); } public void sleep(int hour) { System.out.println("我们家的狗子每天睡觉时长是" + hour); } } -
对象的创建:【类是对象的模板,可以使用类创建出无数个具体的对象】
- 语法格式:类名 对象名 = new 类名(参数列表);
-
public class DogTest { public static void main(String[] args) { Dog dog = new Dog(); // 调用方法 dog.eat("骨头"); dog.sleep(8); // 调用属性,属性如果没有提前赋值,得到的是默认值 int age = dog.age; System.out.println(age); // 给dog的属性赋值 dog.breed = "哈士奇"; dog.name = "二哈"; dog.age = 3; dog.color = "黑白"; // 调用dog的属性 System.out.println("狗子的品种是:" + dog.breed); System.out.println("狗子的名字是:" + dog.name); System.out.println("狗子的年龄是:" + dog.age); System.out.println("狗子的颜色是:" + dog.color); } } - 图解【创建单个对象】:

-
图解【创建多个对象】:
-

二、局部变量和实例变量
| 类型 | 局部变量 | 实例变量(成员变量) |
| 定义位置 | 方法内部 | 类中方法外 |
| 存储位置 | 栈内存 | 堆内存 |
| 默认值 | 无,必须赋值在使用 | 有默认值,和数据类型有关 |
| 作用范围 | 整个方法 | 整个类 |
| 生命周期 | 创建方法到方法的结束 | 随着对象的创建而创建,对象的消失而消失 |
| 命名冲突 | 方法中不能存在重名的变量 | 可以和局部变量重名,局部变量优先级高 |
三、实例方法
- 定义:创建方法后可以使用对象调用的方法,每个方法都是独立存在的,不能写在其他方法中,不能使用static修饰,使用static修饰就变成类方法。
- 案例:
public class Student { // 属性 String name; /** * 见面打招呼的方法【实例方法】 * @param word 打招呼的内容 */ public void sayHi(String name) { System.out.println(name+"是一个好学生); } //调用实例方法 public static void main(String[] args) { // 创建学生对象stu01 Student stu01 = new Student(); stu01.name = "张飞"; //调用实例方法 stu01.sayHi("我乃燕人张翼德"); } }
四、方法重载
- 重载(Overload):一个类中定义多个相同名称的方法
- 要求:方法名相同;参数列表不同(类型、个数、顺序);与访问修饰符、返回值类型无关
- 注意:调用带有重载方法时,需要根据传入的实参去找到与之匹配的方法。
- 好处:灵活、方便、屏蔽使用差异。
五、构造方法
- 定义:构造方法是一种特殊的方法,创建对象时候调用,方法名必须和类名一致,没有返回值类型,无法在外部手动调用
- 语法格式:public 类名(参数列表){ 构造方法体 }
- 案例:
public class Demo01 { public static void main(String[] args) { //调用无参构造方法 Stu stu01 = new Stu(); System.out.println("=============="); //调用有参构造方法 Stu stu01 = new Stu(“张三”,25); } } class Stu{ //无参构造方法 public Stu() { System.out.println("我是Stu空参的构造方法"); } // 属性name和age String name; int age; //有参构造方法 public Stu(String name,int age) { System.out.println("我是Stu空参的构造方法"); } } - 默认构造方法:在我们创建类的时候,如果没有写任何的构造方法,jvm会赠送一个空参的构造方法,若自己定义了则不赠送
六、this
- 定义:This是类中的默认引用,代表当前实例
- 当类服务于某个对象时,this则指向当前对象
- this的用法
- 第一种用法【调用实例属性、实例方法】
- 如:this.name、this.sayHi()
- 案例:

- 第二种用法【调用本类的其他构造方法】
- 如this()、this(实参)
- 案例:

- 第一种用法【调用实例属性、实例方法】
七、ATM小案例:
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
/**
* 银行ATM
模拟银行账户业务,实现存款、取款和余额查询。运行效果如下所示:
1.存款 2.取款 3.查询 0.退出
请选择你要办理的业务:1
请输入存款金额:1000
---------
存款成功!
1.存款 2.取款 3.查询 0.退出
请选择你要办理的业务:2
请输入取款金额:100
---------
取款成功!
1.存款 2.取款 3.查询 0.退出
请选择你要办理的业务:3
---您当前账户余额:900元---
1.存款 2.取款 3.查询 0.退出
请选择你要办理的业务:0
O(∩_∩)O谢谢您的使用,欢迎下次光临!
*/
Scanner in = new Scanner(System.in);
// 创建银行卡
ATM atm = new ATM(1000);
// 开启死循环,不断提示用书输入数据
outer:while (true) {
System.out.println("1.存款 2.取款 3.查询 0.退出\r\n请选择你要办理的业务:");
int select = in.nextInt();
switch (select) {
case 0:
System.out.println("O(∩_∩)O谢谢您的使用,欢迎下次光临!");
break outer;
// 存款的操作
case 1:
System.out.println("请输入存款金额:");
int m1 = in.nextInt();
atm.saveMoney(m1);
System.out.println("成功存入金额:" + m1 + ",余额:" + atm.getBalance());
break;
// 取款的操作
case 2:
System.out.println("请输入取款金额:");
int m2 = in.nextInt();
double ret = atm.takeMoney(m2);
// 判断ret是否大于0
if (ret == m2) {
System.out.println("成功取出:" + m2 + ",余额:" + atm.getBalance());
}else {
System.out.println("余额不足");
}
break;
// 查询余额
case 3:
System.out.println("当前账户余额:" + atm.getBalance());
default:
System.out.println("输入有误,请再次输入...");
break;
}
}
}
}
/**
* 自助柜员机
* 定义了余额
* 定义存、取、查询的方法
* @author Dushine2008
*
*/
class ATM{
// 属性:余额
double balance;
// 构造方法
public ATM() {}
public ATM(double balance) {
this.balance = balance;
}
// 存钱
public void saveMoney(int money) {
this.balance += money;
}
// 取钱
public double takeMoney(int money){
// 判断余额是不是充足
if (money <= balance) {
this.balance -= money;
return money;
}
return 0;
}
// 查询
public double getBalance() {
return this.balance;
}
}