第 01 课 工单对象与封装
从两个普通Java类开始,分三步练习对象、封装、构造器和参数校验。
完整学习目录 · 14 篇
本篇目录
这节课开始做设备运维工单平台,为你以 2028 届学生身份申请 2027 年暑期 Java 实习积累项目能力。我们先把一张工单变成 Java 对象,再逐步加入业务规则。
全课预计60—90分钟,可以分两次完成。首次先完成起点问题和 A 步,再继续 B、C;先自己尝试,卡住时记录具体疑问。
先确认三个概念 #
用约10分钟回答,不用背术语。暂时答不清可以带着问题完成本课。
- 把成绩字段设为
private后,是否就能自动阻止构造器保存101?为什么? - 构造器与修改成绩的方法,为什么都需要检查
0—100的范围? - 创建两个不同对象时,普通实例字段为什么可以保存不同的值?如果把字段改成
static,情况会怎样?
自查提示:private 限制从哪里访问,数据合法性依靠校验逻辑;每个对象拥有自己的实例字段,而静态字段属于类。能口述后,还要通过下面的代码实验验证。
工单表示什么 #
例如“教室投影仪无法开机”是一条报修。以后它会经历报修、派单、处理、验收。今天的 Ticket 只保存两个信息:id 是工单编号,title 是问题标题。
本课最终规则是:编号必须大于 0;标题不能是 null,去掉两端空格后不能为空,长度不能超过 50;编号创建后不提供修改入口,标题可以通过 rename 修改。
在自己选择的工作目录创建或打开 ops-ticket 普通 Java 项目,在其中创建 src\Ticket.java 和 src\TicketDemo.java:前者描述工单,后者放 main 方法运行小例子。先用普通 Java 项目,不需要 Spring 或 Maven。
本课语法兼容 Java 8 和 21。第3周学习 Maven 时统一使用 Java 21,并核对项目 SDK 与终端实际使用的 JDK。
A 步 创建对象并读取信息 #
预计 25–35 分钟。先实现正常输入的流程,边界校验放到 B 步。
请在 Ticket 中完成:
- 两个私有字段,类型分别为
long和String。 - 构造器
Ticket(long id, String title),把参数保存到当前对象。 getId()和getTitle(),读取当前对象的信息。- 不提供
setId()。
在 TicketDemo 中创建两张不同工单,并通过 getter 打印它们。
| 创建时的输入 | 读取时的预期结果 |
|---|---|
1001, "教室投影仪无法开机" | 编号为 1001,标题为 教室投影仪无法开机 |
1002, "实验室电脑无法联网" | 编号为 1002,标题为 实验室电脑无法联网;第一张工单信息不变 |
局部提示:字段使用 private,getter 使用 public 并返回对应字段。当参数名与字段名相同时,想一想 this 指向什么。构造器名称与类名一致,没有返回类型。
验收时请解释:为什么创建两张工单后,第一张的标题不会被第二张覆盖?为什么读取标题的方法不应该使用 static?
B 步 保证创建出来的工单有效 #
预计 15–20 分钟,A 步通过后再做。加入编号和标题校验,不合法时抛出 IllegalArgumentException;合法标题保存去掉两端空格后的值。
| 输入 | 预期结果 |
|---|---|
编号 0 或 -1,标题正常 | 拒绝创建 |
编号 1,标题为 null、"" 或 " " | 拒绝创建 |
编号 1,标题为 " 无法联网 " | 保存的标题为 无法联网 |
编号 1,标题为连续 50 个英文字母 | 创建成功 |
编号 1,标题为连续 51 个英文字母 | 拒绝创建 |
局部提示:先判断是否为 null,再考虑调用 trim()、isEmpty()、length()。当条件不满足时,用 throw new IllegalArgumentException("说明原因") 拒绝非法参数。
本课长度按 String.length() 计算;它不等同于所有 Unicode 字符的实际个数,表情等情况留待后续。测试边界时用英文字母即可。非法输入可先逐次运行验证;未捕获异常会结束本次程序,这是需要观察的结果。
C 步 修改标题时遵守同一套规则 #
预计 10–15 分钟。增加 rename(String newTitle),让它与构造器复用标题校验,避免两处规则逐渐不同。
| 操作 | 预期结果 |
|---|---|
将标题改为 " 投影仪无信号 " | 新标题为 投影仪无信号,编号保持不变 |
| 将标题改为空白或超过 50 个英文字母 | 拒绝修改,原编号和标题不变 |
局部提示:可以把“检查标题并得到处理后的标题”提取成一个私有方法。先得到合法结果,再修改字段。思考如果先改字段再检查,失败时对象会处于什么状态。
保存哪些学习证据 #
首次保存三个起点问题的回答、A 步的两个 Java 文件和运行输出,并用一句话写出最不确定的地方。B、C 可以在下一次学习时完成。
完成本课后,按第1周任务与验收检查边界,再核对第1周参考答案。笔记区分“独立完成”“参考提示完成”“仍有疑问”;能解释并独立小改之后,再记录已掌握。