第三次Blog作业

《面向对象程序设计(Java)》课程总结:一个大一新生的血泪史

写在最前:作为一名刚结束大一生活的学生,这学期的Java课程让我深刻体会到什么叫"从入门到放弃再到勉强求生"的编程心路历程。虽然收获颇丰,但必须吐槽:这绝对是我大学一年来最秃头的课程!


一、前言:课程工作量与难度体验报告

课程任务全景图

环节 任务量 耗时估计 痛苦指数 ★★★★★
Blog作业 3篇技术随笔 每篇7-8小时 ★★
PTA作业 9次编程任务(均3到4题) 每周6-10小时 ★★★★★
实验 5个递进式项目(尤其是实验五JavaFX动物系统) 实验课 ★★★★
线上课程 每周5-6节课视频 自主安排 ★★
线下课程 4小时/周+随堂编码挑战(犯困) 固定时间 ★★★

真实体验吐槽

  1. PTA的魔鬼细节
    每次看到"答案错误:0分"就心肌梗塞!特别是隐藏测试用例,有次提交了7次才通过,最后发现是数字比较用了==而不是equals() 这种细节问题

  2. 实验的时间黑洞
    期末的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();

#####崩溃结果:随机出现界面冻结,报错信息: Caused by: IllegalStateException: Not on FX application thread 正确姿势:

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中学到新东西。
保持好奇,持续练习,

最后的最后:

电梯调度问题真的好难啊

posted @ 2025-06-18 11:47  朝朝如念  阅读(32)  评论(0)    收藏  举报