JAVA_OOP_大一下课程总结

Java OOP 课程学习与技术实践全记录

当写下这篇blog的时候,已经要考java的线上期末测验了。虽然感觉还是没有对java掌握得很透彻。很多知识只是浮光掠影,还没有深入研究,例如集合框架,设计模式,IO流等,课程知识还是暂告一段落。

一、前言

总的来说,课程作业都在可掌握范围内,题量和难度都没有太大。

Blog作业:只布置了两次大作业的Blog任务以及这次的总结,写Blog周不用写PTA,算是劳逸结合。前面两次Blog是对三次PTA作业的总结,过了三周,一开始的思路可能都忘了很多,但是在写Blog的时候就自发的将三次题目的思路都整合起来,使思路更明晰,对题目的理解也更深。
除此之外,在Blog中还会有“踩坑”的环节,让我这种“这个坑过去就过去了”的人不得不重新复盘遇到的坑,进而加深印象。
以及通过代码分析工具,我也更深的了解到书写代码的格式规范。比如代码率要达到0.2-0.3,一个方法里的最大深度不宜超过6。

PTA作业:题量不大,偶有几道非常刁钻的题目,比如电梯的算法题,还有java关键字的正则,着实费脑子。其他的部分在熟悉掌握知识点后还是很仁慈的。其中每道复杂题目都需花费大量时间思考调试,有时为通过一个隐藏测试用例,需反复修改代码结构,耗时数小时。

实验:难度不大,数量上也比上个学期要少很多。只是工程量可能比单道PTA稍稍大,很好的锻炼了我们写代码的速度,提高了我们的耐心程度。

线上课程:每节课时长不长,内容量不大,课时也不多,练习也很到位,就是有的练习题答案比较抽象,两个相同位置的填空位置不一样也会判错,有的答案多加或者少加定语还是会被叛错。

线下课程:内容不多,就是知识点加举例子。因为很多内容线上课程已经提前讲了,所以线下课程的负担也减轻很多,老师讲的也很通俗易懂很透彻,还会拓展点科普知识,还是很不错的。还有翻转课堂,让大家自己上去讲,让我又学会了很多如何把一个东西讲好给别人,这也是我需要学习的一个很重要的技能之一。

二、面向对象技术总结

封装

封装是将数据和操作数据的方法捆绑,并隐藏内部实现细节。

实践案例:封装的本质是将数据与操作数据的方法捆绑,并通过访问控制隐藏内部实现。在 "7-1 NCHU_点与线" 作业中,我将 Point 类的 x/y 坐标设为private,通过getX()/setX()方法实现访问控制。当用户输入非法坐标(如负数)时,setter 方法会进行校验并抛出异常,这种设计避免了外部对数据的非法篡改。​
在 "7-2 汽车风挡玻璃雨刷问题" 中,雨刷状态(静止 / 低速 / 高速)的封装更具业务场景特色。我定义了WiperStatus枚举类封装状态常量,通过setState()方法时会检查状态转换的合法性(如从静止不能直接切换到高速),这种封装方式不仅保护了数据,还实现了业务逻辑的内聚。

掌握现状:简单场景下能熟练运用,但在复杂业务逻辑中,如设计货运系统时,如何对商品类、订单类等进行合理封装,以满足高内聚、低耦合要求,还需更多实践。


继承与多态

继承和多态是面向对象编程的核心特性。

实践案例:"图形类层次结构" 作业是理解继承与多态的最佳案例。基类Shape定义了getColor()、setFill()等通用方法,以及抽象方法calculateArea()。Circle子类继承后重写面积计算方法为πr²,Rectangle则实现为lengthwidth。通过Shape shape = new Circle(5)的多态用法,同一shape.calculateArea()调用能根据实际对象类型执行不同逻辑。

掌握现状:基本概念和应用已理解,但处理多层继承关系,以及在设计模式中应用多态时,对方法重写和调用顺序、代码优化等方面,还需进一步学习掌握。


抽象类与接口

抽象类用于定义部分实现的模板,接口侧重于定义行为规范。

实践案例:通过实现Comparable接口对对象排序,理解接口定义和实现模式。能区分抽象类和接口的使用场景,有共同实现代码时用抽象类,仅定义行为规范时用接口。

掌握现状:基本能区分使用,但实际项目设计时仍有犹豫。对接口的默认方法、静态方法,以及函数式接口与 Lambda 表达式结合应用,缺乏实际操作经验,需通过更多项目实践加深理解。


集合框架

集合框架提供丰富接口和类,满足不同数据处理需求。

实践案例:"7-5 统计 Java 关键词" 作业中,我使用TreeMap<String, Integer>存储关键词及其出现次数。TreeMap 自动按键(关键词)排序的特性,使统计结果无需额外排序即可输出。在处理大量文本时,HashMap的 O (1) 查找效率比初期尝试的 ArrayList 遍历快 3 倍以上。

掌握现状:掌握核心接口及其常用实现类的基本特性和操作方法,但在选择具体集合实现类时,对LinkedListArrayList的性能差异,以及TreeSetTreeMap等使用场景判断不准确。处理大规模数据时,缺乏集合优化操作经验。


JavaFX

JavaFX 采用翻转课堂教学,让我对其有了初步认识和实践。

实践成果:掌握StageScene等基本概念,能用Scene Builder设计简单界面,通过FXML文件和Controller类实现界面与后台代码交互,在 “大象进冰箱” 实验中完成完整流程。

不足与挑战:对复杂控件如TableViewTreeView使用,数据与界面自动更新、CSS 样式美化等缺乏实践。FXML绑定常因小错误导致空指针异常,排查耗时,需更细心严谨。

三、采坑心得

在课程学习过程中,遇到诸多问题,也积累了宝贵经验教训。


1.总是看不懂题目需求就开敲,像第一次的电梯题目,就是因为没有读懂题目的意思和需求,直接理解成直上直下的运行逻辑,导致前面打的代码全都错掉了,还得重新来过新的运行逻辑。不仅是题目的需求,还有输出输出的格式要求,注意输入时的换行符,输出时也要注意空格,符号的格式。

2.在读完题之后,不仅要读懂需求,还要好好分析如何做类设计,考虑以后可能哪里会扩展,迭代,尽量做到遵守的七大设计原则,好好考虑类的单一职责原则和可拓展性。

3.从面向过程编程思维转向面向对象编程思维并不顺利。初期习惯将代码写在main方法中,或类职责不明确,导致代码耦合度高,难以维护扩展。如在小型项目中,将数据处理、界面展示功能集中在一个类,增加新功能时修改困难。通过学习练习,逐渐遵循单一职责原则,优化类结构。

4.初期使用集合框架不重视类型安全,不使用泛型,导致频繁强制类型转换,增加出错概率。同时未考虑集合实现类性能差异,选择不当影响程序效率。如在频繁插入数据场景中误用ArrayList,后来明白使用集合需指定泛型,根据需求选择合适实现类。

四、改进建议及总结

1.改进建议

分享优秀案例:分享优秀代码案例,包括代码实现和设计思路,拓宽编程思路。

优化实验系统:在实验过程中会出现程序无响应的状态,打字到到一半程序无响应然后不得已关掉是真的会很崩溃,以及有的时候打中文字超过5-6秒,系统就直接把拼音打上去了,只能跟系统拼打字的手速了。

2.总结:

通过这一学期的学习,逐渐从一个代码小白变得稍微懂一点的小白了。正如前文里所说,虽然课程暂告一段落,但java知识点,功能绝不止步于此,与java的交战还绵绵无绝期。

posted @ 2025-06-19 15:48  YXYA  阅读(15)  评论(0)    收藏  举报