04-面向对象基础(封装)
对应原始资料:
day05-面向对象基础
一、面向对象思想
1. 什么是面向对象
- 面向过程:强调步骤(第一步做什么、第二步做什么)。
- 面向对象:强调找对象来做,把数据和操作数据的方法封装到对象中。
2. 三大特征
封装、继承、多态(基础阶段先掌握「封装」,继承和多态在进阶模块)。
二、类和对象
- 类:对一类事物的抽象描述,是模板。
- 对象:类的一个具体实例,是真实存在的。
1. 类的定义
java
public class Student {
// 成员变量(属性)—— 堆内存,有默认值
String name;
int age;
// 成员方法(行为)
public void study() {
System.out.println(name + " 正在学习");
}
}2. 对象的创建与使用
java
Student s = new Student();
s.name = "张三";
s.age = 18;
s.study();3. 成员变量 vs 局部变量
| 区别 | 成员变量 | 局部变量 |
|---|---|---|
| 位置 | 类中方法外 | 方法内 / 参数 |
| 内存 | 堆 | 栈 |
| 默认值 | 有 | 无,必须先赋值 |
| 作用域 | 整个类 | 所属方法 |
三、封装
1. private 关键字
- 被private 修饰的成员只能在本类中访问。
- 通过
public的 getter/setter 间接访问。
java
public class Student {
private String name;
private int age;
public void setAge(int age) {
if (age < 0 || age > 150) {
System.out.println("年龄非法");
} else {
this.age = age;
}
}
public int getAge() { return age; }
}2. this 关键字
this代表当前对象的引用。- 当成员变量和局部变量重名时,用
this.成员变量区分。
java
public Student(String name, int age) {
this.name = name; // this.name 是成员变量
this.age = age;
}四、构造方法
1. 作用与格式
- 作用:创建对象,并给成员变量赋初值。
- 格式:方法名与类名相同,没有返回值类型(连 void 都没有),没有具体返回值。
java
public class Student {
private String name;
private int age;
// 无参构造(不写时系统默认给一个;一旦自定义有参构造,无参构造就消失,建议永远手写)
public Student() {}
// 有参构造
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}注意: 一旦手写了构造方法,系统就不再赠送无参构造。强烈建议始终手写无参构造。
五、标准 JavaBean
java
public class Student {
private String name;
private int age;
public Student() {}
public Student(String name, int age) { this.name = name; this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}IDEA 快捷键:
Alt + Insert→ Getter/Setter/Constructor 一键生成。
六、API 文档与常见类
- Object 类:所有类的根类,常用方法
toString()、equals()(进阶模块详解)。 - Scanner、Random、String:见常用 API 章节。
七、对象的内存图(理解)
java
Student s = new Student("张三", 18);- 栈中开辟
s变量空间。 - 堆中开辟 Student 对象,初始化成员变量。
- 把堆中的地址赋给栈中的
s。 - 字符串
"张三"在堆中的字符串常量池中。
练习建议
- 定义
Phone类(品牌、价格、打电话),创建对象测试。 - 定义
Student类,包含 private 属性 + getter/setter + 构造方法。 - 写一个
StudentTest,创建 3 个学生存入数组,遍历输出。 - 练习 IDEA 的 getter/setter/constructor 自动生成。