第 2 周:面向对象(类 / 对象 / 封装)
本周目标
本周建立 Java 面向对象思维,不再把所有逻辑写进 main 方法。完成后,应能够:
- 根据需求设计类的属性和行为
- 创建对象并通过对象访问属性和方法
- 使用封装隐藏实现细节,只暴露必要接口
- 使用构造方法完成对象初始化,并区分构造方法重载
- 使用
this区分成员变量和局部变量 - 使用开发工具的调试能力观察对象状态
学习资料与范围
- 主课程:Java 零基础视频教程(上部)
- 视频范围:P61-P95(类与对象、构造器、this、封装、IDEA 调试)
| 视频范围 | 学习模块 | 学习结果 |
|---|---|---|
| P61-P68 | 类与对象、属性与方法、对象的创建和使用 | 能够定义类并创建对象 |
| P69-P76 | 对象内存、成员变量与局部变量、方法与对象的配合 | 能够说明对象在内存中的表示 |
| P77-P84 | 封装、private、get/set 方法和 JavaBean | 能够通过封装保护对象数据 |
| P85-P90 | 构造方法、构造方法重载、this 关键字 | 能够正确初始化对象 |
| P91-P95 | 类与对象综合案例、开发工具调试 | 能够用面向对象方式组织一个小程序 |
分 P 范围为参考区间,实际以课程章节标题为准。
需要掌握的知识点
类与对象
- 类与对象的关系:类是模板,对象是具体实例
- 成员变量和成员方法的定义方式
- 对象的创建、赋值和访问语法
- 同一个类的多个对象各自独立拥有成员变量
- 对象作为方法参数和返回值的使用方式
- 对象数组的声明、初始化和遍历
- 引用类型的内存模型:栈中保存引用,堆中保存对象
- 多个引用指向同一对象时的相互影响
封装
- 封装的目的:隐藏数据、约束取值范围、方便统一修改
- 使用
private修饰成员变量 get/set方法的命名规范和作用- 在
set方法中做数据校验 - JavaBean 的标准写法:私有属性、无参构造、公共访问方法
- 包的作用、
package与import的基本用法
构造方法与 this
- 构造方法的名字、参数和返回值特点
- 无参构造方法的作用,以及写出有参构造后无参构造为什么会失效
- 构造方法重载,以及多个构造方法之间的区分方式
this访问成员变量和调用本类其他构造方法this与 C 语言中结构体指针的差异
调试
- 在构造方法、
set方法和业务方法中设置断点 - 观察对象引用、成员变量和局部变量的取值
- 判断空引用(
NullPointerException)产生的位置
必做练习
- 定义第一个类:定义
Student类,包含学号、姓名、年龄三个属性和一个输出个人信息的方法。 - 创建对象:创建 3 个
Student对象,分别赋值并输出信息;再用对象数组管理这 3 个对象。 - 封装改造:把
Student的属性改为private,补充get/set方法,并在setAge()中限制年龄只能是 18-60。 - 构造方法:为
Student添加无参构造和全参构造,使用两种方式各创建一个对象。 this练习:编写一个成员变量与参数同名的set方法,分别使用this和不使用this,观察输出差异。- 对象参数:实现
printStudent(Student student)和createStudent(),说明对象作为参数和返回值的传递过程。 - 引用对比:让两个引用指向同一个
Student对象,通过其中一个修改属性,输出另一个引用的结果并解释原因。 - 空引用排查:故意创建一个未初始化的对象引用并调用其方法,记录报错信息并说明修复方式。
- 设计练习:定义
Book类和Course类,每个类至少包含 3 个属性和 2 个行为,并说明属性和行为是如何从需求中提取的。 - 调试记录:在
setAge()中设置断点,记录一次对象属性被修改前后的值。
本周综合任务:用面向对象重写成绩统计器
把第 1 周的学生成绩统计器改写为类和对象的写法。
要求:
- 定义
Student类,包含学号、姓名、三门课成绩和总分字段 - 为
Student提供封装的访问方法,并在set方法中校验成绩范围 - 为
Student提供计算总分和平均分的行为,而不是把计算写在外部 - 定义
StudentManager类,负责保存学生对象数组并完成录入、查询、统计和排序 main方法只负责创建管理对象、显示菜单和调用管理方法- 全部数据通过对象传递,禁止继续使用裸数组加下标的方式管理学生
- 使用空引用和数组越界各制造一次异常,记录报错并修复
本周产出
Student、Book、Course等类的定义代码- 封装与构造方法练习代码
- 面向对象版本的成绩统计器
- 一份对象内存模型笔记(栈、堆、引用)
- 一份空引用和数组越界的排查记录
完成检查
- 能够根据需求提取类的属性和行为
- 能够创建对象并通过对象调用方法
- 能够使用
private和get/set完成封装 - 能够编写无参构造、有参构造并处理方法重载
- 能够正确使用
this区分成员变量和局部变量 - 能够说明对象引用在内存中的存储方式
- 能够使用断点观察对象状态并定位空引用问题
- 已完成面向对象版本的成绩统计器,
main方法不再包含业务计算