第三次Blog作业
《面向对象程序设计(Java)》课程总结:一个大一新生的血泪史
写在最前:作为一名刚结束大一生活的学生,这学期的Java课程让我深刻体会到什么叫"从入门到放弃再到勉强求生"的编程心路历程。虽然收获颇丰,但必须吐槽:这绝对是我大学一年来最秃头的课程!
一、前言:课程工作量与难度体验报告
课程任务全景图
| 环节 | 任务量 | 耗时估计 | 痛苦指数 ★★★★★ |
|---|---|---|---|
| Blog作业 | 3篇技术随笔 | 每篇7-8小时 | ★★ |
| PTA作业 | 9次编程任务(均3到4题) | 每周6-10小时 | ★★★★★ |
| 实验 | 5个递进式项目(尤其是实验五JavaFX动物系统) | 实验课 | ★★★★ |
| 线上课程 | 每周5-6节课视频 | 自主安排 | ★★ |
| 线下课程 | 4小时/周+随堂编码挑战(犯困) | 固定时间 | ★★★ |
真实体验吐槽
-
PTA的魔鬼细节
每次看到"答案错误:0分"就心肌梗塞!特别是隐藏测试用例,有次提交了7次才通过,最后发现是数字比较用了==而不是equals()这种细节问题 -
实验的时间黑洞
期末的JavaFX动物进冰箱系统实验timeline 前半周 : 搭框架,填代码 后半周 : 调试,解决问题
二、面向对象技术:从懵懂到半懵懂
1. OOP三大护法掌握情况
特性
理解程度 血泪教训
封装
终于明白为什么不能把变量全public 题目集里面误改数据,调试不停报错
继承
知道extends但经常创造"四不像" 作业出现狗继承猫的奇葩设计
多态
能认不能用的"最熟悉的陌生人" 至今分不清重载和重写的场景
2. 那些让我头秃的接口们
Comparable vs Comparator 大型迷惑现场(一开始感觉两个东西差不多)
点击查看代码
class Student implements Comparable<Student> { // 实现接口
public int compareTo(Student s) {
return this.id - s.id; // 主排序
}
}
Comparator<Student> gradeComp = new Comparator<>() {
public int compare(Student s1, Student s2) {
return Double.compare(s1.grade, s2.grade); // 次排序
}
};
我的血泪史:
实验四需要先删掉被杀死或者吃掉的动物,按战斗力排序排序,结果写了两个compareTo方法
调试2小时后才被系统告知要用Comparator定制排序
3. 集合框架:用最乱的容器,写最懵的代码
翻车现场实录:
用ArrayList存百万数据导致查询超时
误用HashMap存储有序数据,结果遍历顺序乱飞
至今没搞明白HashSet和TreeSet的本质区别
4. JavaFX:美丽外衣下的残酷真相
崩溃时刻:
做完的JavaFX登录界面突然报错:
数据传输出现错误,登录的密码存入到错误的文件里去了
开始搞翻转课堂,站在讲台上讲我们组的课题:Text,Line
很紧张,但是还是比较成功的,段老师说讲的不错,很开心
5. 设计模式:听起来高大上,用起来扑街现场
| 模式 | 理解程度 | 实际应用 |
|---|---|---|
| 工厂模式 | 能看懂但自己写不出 | PTA作业创建图形对象勉强实现 |
| 观察者模式 | 明白原理但不会优化 | 实验五的天气通知用了最笨的实现 |
| 享元模式 | 概念似懂非懂 | 期末项目没敢用怕把系统搞崩 |
三、踩坑全记录:
1. 对象比较大型车祸现场
事故描述:
PTA作业需要排序学生对象,我自信满满写下:
Arrays.sort(students); // 直接调用排序
!!!
出现错误
Exception in thread "main" java.lang.ClassCastException:
Student cannot be cast to java.lang.Comparable
事故分析:
以为Java会自动知道按什么排序
不知道必须实现Comparable接口
更不知道还可以用Comparator定制
2. 集合遍历的连环炸
死亡代码:
点击查看
for (int i=0; i<list.size(); i++) {
if (list.get(i).contains("bug")) {
list.remove(i); // 导致索引错乱
// 有时还会漏删元素
}
}
点击查看
Iterator<Item> it = list.iterator();
while (it.hasNext()) {
if (it.next().isBuggy()) {
it.remove(); // 安全删除
}
}
在Java里删集合元素就像拆炸弹,选错工具直接GG
3. 继承引发的家族伦理剧
问题爆发:
java: 不允许有多重继承
导致做题时,使用了多继承,让代码报错
问题出现
点击查看代码
new Thread(() -> {
String data = receiveData();
textArea.setText(data); // 直接在主线程外操作UI
}).start();
Platform.runLater(() -> {
textArea.setText(data);
});
血泪教训:JavaFX的线程规则比宿管阿姨还严格!
四、课程优化建议:一个菜鸟的真诚想法
课堂学习体验优化建议
(1) 抽象概念这样讲更好懂
用学生熟悉的东西打比方:
| 编程概念 | 生活比喻 | 注意事项 |
|---|---|---|
| 抽象类 | 半成品乐高 | 不能直接玩,要拼装 |
| 接口 | 手机充电口 | 不同品牌都能用USB-C |
| 多态 | 万能遥控器 | 一个按钮控制不同电器 |
(我个人是这么理解这些抽象的东西的)
(2) 设计模式学习建议
三种模式可以这样理解:
工厂模式:
像奶茶店点单
你说"要珍珠奶茶",店员就做好给你
你不需要知道怎么做奶茶
观察者模式:
像微信群通知
班长发消息(主题)
所有群成员(观察者)都能收到
享元模式:
像共享单车
很多人骑同一批单车
不需要每人买一辆
总结
一、学到了啥
1. Java语言基础能力
基本语法:变量定义、数据类型、循环结构、条件判断
方法运用:参数传递、返回值处理、方法重载
基础调试:使用IDEA定位简单错误
2. 面向对象核心理解
| 概念 | 掌握程度 | 生活化理解 |
|---|---|---|
| 类与对象 | 能创建类并实例化对象 | 类=汽车设计图,对象=具体汽车 |
| 封装 | 会用private保护数据 | 给钱包上拉链 |
| 继承 | 理解extends的基本用法 | 儿子继承父亲的特征 |
| 多态 | 初步理解父类引用子类对象 | 同一个遥控器控制不同电器 |
3. 高级特性入门
抽象类:知道是"不完整的类",包含抽象方法
接口:理解成"能力证书",类可以实现多个接口
集合框架:
熟练使用ArrayList存数据
理解集合与数组的区别
二、需要持续深化的领域
具体提升方向
| 知识领域 | 重点提升目标 | 学习建议 |
|---|---|---|
| 类关系 | 理解组合/聚合等复杂关系 | 画UML类图分析实际案例 |
| 接口 | 掌握Comparable/Comparator的区别与应用场景 | 多做排序练习 |
| 集合框架 | 掌握LinkedList/HashSet等更多集合类型 | 比较不同集合的性能特点 |
| 异常处理 | 学习自定义异常和异常链传递 | 在项目中添加异常处理机制 |
| 多态应用 | 理解方法重写与重载的本质区别 | 编写多态调用示例 |
三、学习收获与成长感悟
1. 能力成长里程碑
从零到有的突破:
掌握了用Java描述现实世界的能力
能构建包含多个类的简单系统
学会面向对象思维方式
调试能力提升:
从"满屏报错就慌张"到"能定位常见错误"
学会使用调试工具查看程序状态
2. 重要认知转变
过去认为:编程=写代码
现在理解:编程=设计结构+实现逻辑+调试优化
四、未来学习路线
提前开始为开学的面向对象技术课程设计打好基础
重点练习Comparator接口实现
社区互动:
在技术论坛解答基础问题
学习优秀开源项目代码
最后学期给我自己的寄语:
这一学期从"Hello World"到面向对象,
就像学会了骑自行车虽然还不熟练。
编程路上犯错不可怕,
重要的是从每个Bug中学到新东西。
保持好奇,持续练习,
浙公网安备 33010602011771号