第三次Blog作业

前言

一个学期的Java学习即将结束,通过系统的课程训练,我掌握了面向对象编程的核心思想和技术体系。在Blog作业、PTA题目集、实验项目和课堂学习四个维度的共同作用下,我的编程思维能力和实践水平得到了质的提升。
Blog作业共3篇,帮助我逐步建立起对面向对象概念的系统性认知。虽然难度适中,但有效引导我进行阶段性反思,培养了技术表达能力。
PTA作业共11次题目集,从基础语法到复杂算法,让我在解决实际问题的过程中不断提升编码能力,题目难度呈阶梯式上升,有效检验了学习效果。
实验任务共5次,通过不断迭代的项目开发,我深刻体会到软件迭代更新的重要性,唯一的不足是实验系统需要手动输入大量代码,容易出错且效率较低。
线下课堂的讲解则为我打通了许多理论到实践的关节,老师的案例分析对我的成长至关重要。

面向对象技术总结

封装 (Encapsulation)

将数据(属性)和操作数据的方法(行为)捆绑在一个类中,并隐藏内部实现细节(通过 private 修饰符),仅通过公开的接口(public 方法)与外部交互。核心是“隐藏实现,暴露接口”。

深刻体会到封装是保证数据安全性和一致性的基石。它隔离了变化,内部实现的修改(如计算逻辑改变)只要接口不变,就不会影响外部调用者。这显著提高了代码的健壮性和可维护性。

继承 (Inheritance)

允许子类 (extends) 拥有父类的属性和方法,实现代码复用。同时支持方法覆盖 (@Override) 以实现多态。

认知提升: 认识到继承的核心价值在于“is-a”关系的建模和代码复用。理解了“单继承”的限制(Java中一个类只能有一个直接父类),以及继承层次过深可能导致的问题(耦合度高,复杂性增加)。组合优先于继承的设计理念逐渐建立。

多态 (Polymorphism)

编译时多态(方法重载 Overload)和 运行时多态(方法覆盖 Override + 父类引用指向子类对象)。核心是一个接口,多种实现。

认知提升: 体会到运行时多态是提高代码可扩展性的关键。增加新子类(如 Triangle)后,只需传入 Shape 引用的通用代码(如 draw() 或 calculateArea())无需修改就能自动适配新类型,降低了系统耦合度。理解向上转型 (Shape s = new Circle()) 和向下转型 (if (s instanceof Circle) Circle c = (Circle) s;) 的区别与应用场景。

抽象类 (Abstract Class)

用 abstract 修饰的类,不能被实例化。目的是为所有子类提供一个通用的模板和部分实现。包含 abstract 方法(只有声明,无实现,强制子类实现)。

认知提升:认识到抽象类是介于普通类和接口之间的设计构造。当多个相关子类需要共享状态(属性)和公共逻辑(部分方法实现),同时又有必须由子类自定义的行为时,抽象类比纯接口更合适。它是实现多态的重要载体。

接口 (Interface)

interface 定义一组​​行为规范​​。只包含方法声明(Java 8前)或默认方法/静态方法(Java 8+)。类通过 implements 来实现接口,必须覆盖所有抽象方法。

认知提升:接口的核心价值在于定义契约和解耦。强调“can-do”关系,与继承(“is-a”)区分开。深刻理解了​​面向接口编程的意义:降低模块间依赖,提高灵活性和可测试性。Java 8的默认方法让接口具备了更强大的能力,类似于多继承的效果。

集合框架 (Collections Framework)

Java提供的用于存储、操作和管理对象组的强大API。核心接口:Collection (List, Set, Queue), Map。核心实现:ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap 等。

认知提升: 掌握了不同集合的核心特性和适用场景:List (有序可重复), Set (无序唯一), Map (键值对)。理解了 ArrayList (随机访问快,插入删除慢) 和 LinkedList (插入删除快,随机访问慢) 的区别;理解了 HashSet (基于哈希,无序) 和 TreeSet (基于红黑树,可排序) 的区别;理解了 HashMap (哈希,高效查找) 和 TreeMap (红黑树,按键排序) 的区别。

异常处理 (Exception Handling)

用于处理程序运行中可能出现的错误或异常情况的机制。核心:try-catch-finally 块, throws 声明, 自定义异常(extends Exception/RuntimeException)。

认知提升: 深刻理解了异常处理是构建健壮程序的关键。避免程序因意外错误而崩溃,保证部分功能的可用性。认识到何时应该捕获处理异常(能在局部处理的),何时应该抛出(throws)到上层(无法或不应在当前位置处理的),以及避免吞掉异常或进行空捕获(catch(Exception e) {})等不良实践。理解了资源管理 (try-with-resources)语法的简洁性和可靠性(优于手动finally)。

JavaFX

Java官方的GUI工具包,用于构建富客户端桌面应用程序。基于场景图(Scene Graph)和事件驱动模型。

认知提升:理解了MVC架构(或其变体)在GUI应用中的应用。FXML描述View,Contoller处理逻辑和Model交互。理解了事件驱动编程模型的本质:用户操作(如点击)触发事件(Event),注册的事件处理器(EventHandler)响应事件进行逻辑处理。体会到JavaFX提供的丰富API(包括动画、3D、图表等)是构建现代桌面应用的强大基础。

欠缺:CSS样式化应用相对生疏,自定义UI美观度不高。对数据绑定的应用场景和使用方式掌握不足(如ViewModel属性自动同步到UI控件)。对并发更新UI的理解和实践不够。没有完整独立使用纯代码方式构建复杂界面的经验。应用打包和部署实践欠缺。对TableView与后端数据交互经验不足。

前几个部分掌握的还好,但是对集合理解不深,实际并发编程经验不足。对迭代过程中安全修改集合的细节和陷阱掌握不够牢固。对自定义异常的合理设计和使用经验不多。对复杂调用栈中异常的传递、包装(THROW NEW MYEXCEPTION("MSG", E))和最终处理逻辑设计还不够清晰。对JAVAFX的运用也不够熟悉。

采坑心得

一定要多写代码,写的多了自然就会了。
同时也要善用调试功能,这对你理解代码很有帮助。
在写题目的时候的,一定要理解清楚题目意思,做好类图设计。

初期我陷入了"语法驱动"的误区,花费大量时间记忆语法而忽视了设计。在PTA作业中,虽然能勉强完成任务,但代码结构混乱,类职责不清。
一开始我存在过度专注于语法细节,忽视设计思想,对“接口”的意义认知不足,使用场景不清晰,轻视集合框架的选择与性能,过度依赖 ArrayList等种种问题。
但是在后来的多次作业中,我认识到了我的问题,用了较长的时间才改正。
总得来说还是要多写代码,在练习中成长。

改进建议及总结

本课程构建了面向对象编程(OOP)的核心能力,以Java为载体,贯通封装、继承、多态三大支柱,并拓展至抽象类、接口、集合框架、异常处理及JavaFX实践。通过PTA代码训练强化语法与算法基础,完成了从理论到实践的转变。最大的收获是认知的转变:软件的本质是管理复杂度。通过封装划定边界、通过继承和接口建立关系、通过多态注入灵活、通过异常构建容错——正是这些面向对象的基本原则,赋予软件系统抵御变化的能力。
总的来说通过本门课程,我们完成了进入面向对象的第一步。但接下来能走多远,还看自己的努力。

改进建议:
在课堂上多一些案件分析,多分享一些容易出错踩坑的地方。
实验题目可以更加贴近生活一点。实验系统再完善一点。
PTA作业在截至之后可以发个文件,说说作业中的一些知识点和建议,帮助理解。

未来学习计划

深化核心技术:重点加强接口(策略模式、Lambda)、泛型、集合框架(并发集合、流API)的理解与应用实践。
精进JavaFX:学习CSS样式定制、深入掌握数据绑定、解决并发UI更新问题、实践纯代码布局、尝试开发一个完整的小型桌面应用(包含打包部署)。
掌握并发基础:学习Java线程基础、同步机制 (synchronized, Lock),并使用线程安全集合进行练习。
接触设计模式:系统学习常用的设计模式(如单例、工厂、观察者、策略、模板方法等),并在项目中尝试应用,理解其背后的OOP思想和解决的实际问题。
完善工程能力:系统学习JUnit测试(特别是Mock测试),掌握一种日志框架,熟练使用Git进行版本控制和协作开发。学习简单的应用打包工具 (jpackage)。
实践项目驱动: 寻找或设计小型项目(如简易通讯录、图书管理系统、简单的绘图工具等),综合运用所学知识,在实践中巩固基础,克服弱点。

最后,感谢老师的悉心指导和同学们的技术交流,这门课程的结束不是我面向对象学习的终点,而是进入更高层次学习的新起点。编程之道,既在代码之内,更在架构之间;既在当前实现,更在演化可能。唯有持续精进,方能不负所学。

posted @ 2025-06-22 19:07  linkssss  阅读(11)  评论(0)    收藏  举报