Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 2 周:面向对象(类 / 对象 / 封装)

本周目标

本周建立 Java 面向对象思维,不再把所有逻辑写进 main 方法。完成后,应能够:

  • 根据需求设计类的属性和行为
  • 创建对象并通过对象访问属性和方法
  • 使用封装隐藏实现细节,只暴露必要接口
  • 使用构造方法完成对象初始化,并区分构造方法重载
  • 使用 this 区分成员变量和局部变量
  • 使用开发工具的调试能力观察对象状态

学习资料与范围

视频范围学习模块学习结果
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)产生的位置

必做练习

  1. 定义第一个类:定义 Student 类,包含学号、姓名、年龄三个属性和一个输出个人信息的方法。
  2. 创建对象:创建 3 个 Student 对象,分别赋值并输出信息;再用对象数组管理这 3 个对象。
  3. 封装改造:把 Student 的属性改为 private,补充 get/set 方法,并在 setAge() 中限制年龄只能是 18-60。
  4. 构造方法:为 Student 添加无参构造和全参构造,使用两种方式各创建一个对象。
  5. this 练习:编写一个成员变量与参数同名的 set 方法,分别使用 this 和不使用 this,观察输出差异。
  6. 对象参数:实现 printStudent(Student student) 和 createStudent(),说明对象作为参数和返回值的传递过程。
  7. 引用对比:让两个引用指向同一个 Student 对象,通过其中一个修改属性,输出另一个引用的结果并解释原因。
  8. 空引用排查:故意创建一个未初始化的对象引用并调用其方法,记录报错信息并说明修复方式。
  9. 设计练习:定义 Book 类和 Course 类,每个类至少包含 3 个属性和 2 个行为,并说明属性和行为是如何从需求中提取的。
  10. 调试记录:在 setAge() 中设置断点,记录一次对象属性被修改前后的值。

本周综合任务:用面向对象重写成绩统计器

把第 1 周的学生成绩统计器改写为类和对象的写法。

要求:

  • 定义 Student 类,包含学号、姓名、三门课成绩和总分字段
  • 为 Student 提供封装的访问方法,并在 set 方法中校验成绩范围
  • 为 Student 提供计算总分和平均分的行为,而不是把计算写在外部
  • 定义 StudentManager 类,负责保存学生对象数组并完成录入、查询、统计和排序
  • main 方法只负责创建管理对象、显示菜单和调用管理方法
  • 全部数据通过对象传递,禁止继续使用裸数组加下标的方式管理学生
  • 使用空引用和数组越界各制造一次异常,记录报错并修复

本周产出

  • Student、Book、Course 等类的定义代码
  • 封装与构造方法练习代码
  • 面向对象版本的成绩统计器
  • 一份对象内存模型笔记(栈、堆、引用)
  • 一份空引用和数组越界的排查记录

完成检查

  • 能够根据需求提取类的属性和行为
  • 能够创建对象并通过对象调用方法
  • 能够使用 private 和 get/set 完成封装
  • 能够编写无参构造、有参构造并处理方法重载
  • 能够正确使用 this 区分成员变量和局部变量
  • 能够说明对象引用在内存中的存储方式
  • 能够使用断点观察对象状态并定位空引用问题
  • 已完成面向对象版本的成绩统计器,main 方法不再包含业务计算