第三次Blog作业
Java 面向对象课程学习总结
前言
| 学习内容 | 工作量描述 | 难度描述 |
|---|---|---|
| Blog作业 | ⭐⭐⭐定期完成,量不大,但是需要整理资料并深入思考 | ⭐⭐要深入理解自己阶段性学习的内容,还要能回顾自己的学习过程,还需要一定的写作能力,但是有了前面一次的经验之后,后面自己的回顾、总结、表达等能力都更上一层楼了,也便不觉得难 |
| PTA作业 | ⭐⭐⭐⭐题目数量最大,涵盖多种题型,是我们最常做的作业 | ⭐⭐⭐⭐⭐难度梯度分明倒是挺分明的,简单的题目每次几乎都可以秒掉,但是每次题目集里面最难的那个题目,并不那么容易能解决。尤其是第一次碰见电梯题的时候,像是遇见了鬼了一样,十分畏惧,下不了手 |
| 实验 | ⭐⭐⭐⭐⭐独立完成有一定复杂度的项目,但是重点工作量不在实验内容,而在把写好的程序输入进实验提交系统和纠正错误 | ⭐⭐⭐综合考验多知识点运用,没有输入和输出样例,需要根据任务书自己进行设计,考验我们解决实际问题的能力,好在给出的任务的逻辑并不都很难 |
| 线上课程 | ⭐资源比较丰富,但视频时长适中,可以自主安排时间学习,并且通过线下课程或者写PTA作业时自学学会的内容,可以倍速学习 | ⭐课程内容易懂,即使有时没看懂也可以反复重新看,不存在跟不上,作业也比较基础,与课程结合比较紧密,看了课就会写 |
| 线下课程 | ⭐⭐固定课堂时间,工作量不大 | ⭐⭐老师结合案例教学,整体难度适中,比线上课程的节奏要慢一些,更好理解,但是设计复杂的部分如果没听明白,需要课后花时间自己查找资料学习 |
面向对象技术总结
封装
封装是面向对象编程的基础特性之一,它将数据和操作数据的方法封装在一个类中,通过访问修饰符来控制对类中成员的访问。我感觉它就像给代码世界里的 “小家” 安装防盗门和保险柜,在 PTA 作业和实验里设计学生类时,把姓名、学号这些关键信息私有化,就好比把家里的贵重物品锁进保险柜,只通过公有的 getter 和 setter 方法这把 “特制钥匙” 来取用和修改,外人没钥匙根本别想随意触碰。
通过实验、PTA这些实践,我深刻理解了封装的意义。它不仅提高了数据的安全性,避免了外部对数据的随意修改,还实现了代码的模块化和信息隐藏,使代码的结构更加清晰,便于维护和扩展。在初期学习时,我对访问修饰符的使用不够熟练,经常出现封装过度或封装不足的情况。例如,将一些本应私有属性误设为公有,导致数据的安全性降低;或者在不需要对外提供访问的方法上使用了公有修饰符,破坏了类的封装性。经过不断练习和总结,我逐渐掌握了合理封装的技巧,能够根据实际需求准确设置属性和方法的访问权限。
继承
继承是实现代码复用的重要手段,通过子类继承父类的属性和方法,减少了代码的重复编写。在PTA的作业中,以图形类为例,定义一个抽象的图形父类,包含计算面积和周长的抽象方法,然后让圆形、矩形等子类继承该父类,并实现具体的计算方法。
在学习继承的过程中,我掌握了子类对父类属性和方法的继承规则,以及方法重写的概念。同时也认识到继承关系的设计需要谨慎考虑,不合理的继承关系可能导致代码的耦合度过高,增加维护难度。例如,在一次作业中,我错误地将一些不相关的类进行了继承,导致子类出现了一些不必要的属性和方法,使得代码逻辑变得混乱。通过这次教训,我明白了在设计继承关系时,要遵循 “is - a” 原则,确保子类和父类之间具有合理的逻辑关系。
多态
多态是面向对象编程的核心特性,它允许不同的对象对同一消息作出不同的响应。在 PTA 作业和实验中,多态的应用十分广泛。比如,在实现一个图形求面积程序时,定义一个图形面积接口,让圆形、矩形等类实现该接口,然后在主程序中使用图形接口类型的变量来引用不同的图形对象,调用求面积方法时会根据对象的实际类型执行相应的计算逻辑。我理解了多态的两种实现方式:方法重载和方法重写。多态的使用极大地提高了代码的灵活性和可扩展性,使得程序能够更容易地适应需求的变化。然而,在复杂的多态场景中,有时会出现方法调用错误的情况。例如,在多层继承和重写的情况下,对方法的调用顺序和覆盖关系理解不够清晰,导致程序运行结果不符合预期。后来,我通过绘制类图和调试代码,逐步理清了多态调用的逻辑,提高了在多态场景下编写正确代码的能力。
抽象类
抽象类是一种不能被实例化的类,它包含抽象方法,用于为子类提供统一的接口和行为规范。在课程中,当设计具有共性特征但具体实现不同的类时,抽象类发挥了重要作用。例如,在Java期中考试,设计一个游戏角色类体系时,定义一个抽象的角色类,包含攻击、防御等抽象方法,然后让具体角色类继承该抽象类并实现这些方法。我掌握了抽象类的定义和使用方法,明白了抽象类在代码架构设计中的重要性。它能够将共性的行为和属性提取出来,为子类提供一个统一的框架,增强了代码的规范性和可维护性。不过,在抽象类与具体子类的职责划分上,初期我存在一些困惑,有时会将一些本应在子类中实现的细节逻辑放到抽象类中,导致抽象类过于复杂。经过不断反思和调整,我逐渐学会了合理界定抽象类和子类的职责,使代码结构更加清晰。
接口
接口是一种特殊的抽象类型,它只包含常量和抽象方法,实现接口的类必须实现接口中的所有方法。在课程实践中,接口常用于实现多继承的效果和定义规范。例如,在实验设计一个具有攻击力的动物时,定义一个有攻击力的接口,包含杀死对方、吃掉对方等方法,让狮子老虎类类实现该接口。通过对接口的学习和应用,我认识到接口能够实现代码的解耦,使不同的类之间可以通过接口进行交互,提高了系统的灵活性和可扩展性。同时,接口也便于团队协作开发,不同的开发者可以根据接口定义的规范分别实现具体的类。在使用接口时,我曾遇到过接口方法过多导致实现类过于臃肿的问题。后来,我学会了将相关的接口方法进行拆分和组合,通过定义多个小接口来实现更清晰的代码结构。
集合框架
Java 集合框架提供了一组强大的数据结构和算法,用于存储和操作数据。在 PTA 作业和实验中,经常会用到集合来处理大量的数据。例如,使用 ArrayList 来存储学生信息,使用 HashMap 来实现键值对的存储和查询。通过实践,我掌握了常用集合类(如 List、Set、Map)的特点和使用方法,能够根据不同的需求选择合适的集合类。同时,也了解了集合框架的迭代器、泛型等特性的应用。在使用集合时,容易出现空指针异常和类型转换错误等问题。例如,在遍历集合时没有判断元素是否为空,或者在使用泛型时类型转换错误。通过不断调试和总结,我学会了在使用集合时进行必要的边界检查和类型判断,提高了代码的稳定性。
异常
异常处理机制用于处理程序运行过程中出现的错误和意外情况。在课程学习中,通过 PTA 作业和实验,我掌握了 Java 异常的分类(Checked 异常和 Unchecked 异常),以及 try - catch - finally 语句的使用方法。例如,在读取文件时,可能会出现文件不存在等异常,通过 try - catch 语句捕获异常并进行相应的处理,保证程序的正常运行。
通过实践,我认识到合理的异常处理能够提高程序的健壮性和用户体验。在初期,我对异常的抛出和捕获规则不够熟悉,有时会过度捕获异常,导致程序出现问题时无法准确定位错误原因;或者没有捕获应该处理的异常,使程序崩溃。经过不断学习和练习,我逐渐掌握了异常处理的技巧,能够根据具体情况合理地抛出和捕获异常。
JavaFX
JavaFX 是用于构建富客户端应用程序的框架,在实验环节中,我们使用 JavaFX 进行了图形界面的开发。通过实践,我学习了 JavaFX 的基本组件(如按钮、文本框、标签等)的使用方法,以及布局管理器(如 BorderPane、VBox、HBox 等)的应用。同时,也掌握了事件处理机制,能够为界面组件添加相应的事件响应方法。然而,JavaFX 的学习难度相对较大,尤其是在复杂界面的设计和动画效果的实现方面。在实验过程中,我遇到了界面布局不协调、组件样式设置不符合预期等问题。由于相关的学习资料相对较少,解决问题的过程比较困难。但是通过查阅官方文档和在线教程,以及不断尝试和调整,还有不断地向AI“请教”我逐渐掌握了一些 JavaFX 界面开发的技巧,并用JavaFX技术做出了我的Java大作业————航空货运管理系统。但对于一些高级特性的应用还不够熟练,需要进一步学习和实践。


采坑心得
在整门课程的学习过程中,我走过不少弯路,也积累了许多宝贵的经验教训。
- 设计先行,避免盲目编码
"没有良好的设计,临时拼凑的代码最终只会自食其果"
在第一次电梯调度PTA作业中,我犯了一个严重的错误:看到题目后急于求成,没有对整体结构进行合理设计,只想着通过测试样例。结果第二次电梯调度题目要求扩展功能时,我发现自己第一次的代码根本无法复用,不得不重新从头开始编写。这种“走一步看一步”的做法不仅浪费了大量时间,还让我在后续任务中陷入了被动。
其他具体教训:
-
在航空货物管理系统实验中,由于初期类设计不合理,导致后期修改逻辑复杂、牵一发而动全身。
-
大作业UI主菜单界面未按照规定实现该有的功能,最终全部推翻重写。
应对策略: -
建立清晰的设计文档和类图,明确每个类的职责与交互关系。
-
编码前先画流程图或伪代码,验证逻辑可行性。
-
多与同学讨论设计方案,避免闭门造车。
- 注释与可读性不可忽视
"写完代码就忘了自己写的是什么?那是因为你没写注释"
我在很多次实验中都忽略了给代码添加足够的注释,导致后来调试或提交时出现编译错误却无从下手。尤其是在实验报告提交系统中,因为只能参考任务书,没有老师或AI辅助,我发现自己的代码难以理解,甚至连函数的作用都记不清了。
问题分析:
-
没有注释的代码随着时间推移变得难以维护。
-
缺乏命名规范和模块化设计,使得代码逻辑混乱。
-
忽视代码风格统一,增加了阅读难度。
解决方法: -
每个类、方法、关键变量都要有清晰的注释说明。
-
使用有意义的命名方式(如驼峰命名法)。
-
保持代码整洁,适当换行和缩进,增强可读性。
- 持续练习是提升编程能力的关键
"理论学得再好,不动手也是白搭"
我对理论知识掌握较好,但在实际动手编程方面明显不足。例如,在设计实验五或航空货物管理系统时,我常常卡在如何组织类结构、处理事件响应等问题上,进度缓慢。这归根结底是平时练习不够,缺乏独立完成项目的能力。
问题分析:
-
平时练习少,遇到复杂问题不知从何入手。
-
对Java基础语法和面向对象思想的理解停留在表面。
-
面向对象设计思维不成熟,类职责划分模糊。
解决方法: -
制定每日编程训练计划,哪怕只是简单的小程序也要坚持。
-
主动挑战PTA中较难的题目,锻炼综合设计能力。
-
模拟考试环境练习限时编程,提高实战应变能力。
- 过度依赖AI工具削弱自主思考能力
"当AI成为你的拐杖,你的腿就不再有力气走路了"
在平时练习中,我有时会把出错的代码直接喂给AI工具,让它帮我找出错误并给出修改建议。久而久之,我逐渐失去了独立排查问题的能力。这一点在期中考试中暴露无遗——面对不能使用AI的环境,我的代码出现了错误却迟迟找不到原因,最后差点没能完成答题。
问题分析:
-
过度依赖AI工具,丧失了主动调试和解决问题的能力。
-
不清楚错误的本质原因,只是机械地接受修复建议。
-
调试技巧缺失,不会使用断点、日志等基本调试手段。
解决方法: -
减少对AI的依赖,养成独立思考和调试的习惯。
-
学会使用IDE的调试功能,如设置断点、观察变量值变化。
-
每次调试后总结错误类型,形成自己的常见错误清单。
改进建议及总结
课程内容
整体课程内容丰富且系统,涵盖了 Java 面向对象编程的各个重要方面。但在一些知识点的讲解深度上,可以进一步优化。例如,对于 JavaFX 等相对较难的内容,可以增加更多的实际案例和详细的操作步骤,帮助学生更好地理解和掌握,而不是只采用“翻转课堂”的形式。同时,在课程中可以适当引入一些企业级的开发案例,让学生了解实际项目中面向对象编程的应用场景,增强学习的实用性。
教学方式
线下课程的互动式教学效果良好,学生的参与度也比较高。
作业与实验
PTA 作业和实验对于巩固知识和提升实践能力起到了重要作用。在作业布置方面,可以增加一些开放性的题目,鼓励学生发挥创意,运用所学知识解决实际问题,培养学生的创新能力。对于实验项目,我发现有的时候实验任务书上写的有点模棱两可,导致有点不知道怎么写,可以提供更详细的需求文档和设计思路指导,帮助学生更好地规划实验步骤,提高实验效率。同时,我对于实验提交系统仍存在疑问,学生们都“深受其害”,我虽然知道老师用心良苦,有他的道理,但是我还是想知道这样安排的具体原因(之前问过了老师,老师只说了别问那么多)。
课上及课下组织方式
在课上,可以增加一些趣味性的编程竞赛或挑战活动,激发学生的学习兴趣和竞争意识。在课下,可以建立学习小组或学习社区,方便学生之间进行交流和互助。老师也可以定期在社区中发布学习资料和答疑解惑,营造良好的学习氛围。
总结
通过这门课程的学习,我不仅系统地掌握了 Java 面向对象编程的核心技术,还培养了良好的编程习惯和解决问题的能力。虽然在学习过程中遇到了许多困难和挑战,但每一次克服困难都是一次成长和进步。同时,我也对课程的教学和学习方式有了一些自己的思考和建议,希望这些总结和建议能够对今后的学习和教学有所帮助。在未来的学习和工作中,我将继续深入学习 Java 编程技术,不断提升自己的专业能力,将所学知识应用到实际项目中,创造更大的价值。

浙公网安备 33010602011771号