学期编程总结

写在前面

经过一年的Java学习,我体会到了Java语言的神奇之处,也感悟到修行机器语言的诸多难题,为此我这个学期花了不少功夫去解决语言上的问题,有一些困境我已经能很轻易地跳出,但仍有困境使我避之不及,这也让我明白语言修行的不易,这并非是浑然天成的功力,而是言传身教的历练,纸上谈兵终是无法推进一步,唯有勤学苦练,坚持不懈,才能在之后明白语言的绝妙之处,以及几个世纪巨人的伟岸,如今的我们只不过在巨人的肩膀上看风景而已,希望以后,我们也能成为自己的巨人。

前言

Blog 作业作为课程知识的拓展与总结环节,要求我们将学习过程中的思考、实践经验以及对特定知识点的深入探究以文字形式呈现。每次 Blog 作业都需要围绕特定主题,如面向对象设计模式、Java 集合框架的深入分析等展开。Blog所为,正是要我们在面对对象编码的过程中,检视自己,明确自己的失误,从而能更好地编写程序,为未来独自完成项目打好基础。

PTA 作业是对课堂知识点的即时巩固与实践检验。涵盖了从基础语法如变量、循环、条件判断,到面向对象核心内容如类与对象、继承多态等。度呈现阶梯式上升,初期基础语法题目较为简单,主要是熟悉 Java 代码的基本编写规范与逻辑;随着课程推进,面向对象相关题目难度增大,需要准确运用封装、继承、多态等思想解决实际问题,比如设计复杂的类继承体系并实现多态行为。但是困境当头也意味着进步,将所用知识在实践中迸发也是一桩美事。

实验课程是理论知识转化为实践能力的关键环节。从基础的冰箱关入动物,到利用Javafx构造一个图形界面进行操作,每个实验都有明确的功能需求与技术要点。度方面,前期实验主要是熟悉开发环境与基本语法应用,相对容易;后期涉及 JavaFX 界面设计与功能实现的实验,既要掌握界面布局、控件使用等前端相关知识,又要结合后端的业务逻辑处理,如数据的增删改查与界面的交互联动,对知识的综合运用能力要求很高,是课程学习中锻炼实践技能的重要环节。虽然工作量极其大,但是也是十分重要的锻炼环节。

线下课程是知识传授的主阵地,教师系统讲解 Java 核心知识与关键概念,从面向对象的思想起源到具体技术实现,如类的设计、继承多态的代码演示等,每节课信息量较大,需要高度集中注意力理解与吸收。线上课堂虽然时长非常长,但是也只能作为一种补充,因为网课不能和线下一样及时向老师提出问题,所以一旦遇到困难,必须线下找老师解明。整体而言,线下课程注重知识的系统性传授与实时互动答疑,线上课程强调自主学习与知识巩固,二者相辅相成,共同构建起 Java 知识学习的完整体系,难度上线下课程的实时理解吸收有一定挑战,线上课程的自主学习则考验自律性与知识梳理能力。

面向对象技术总结

封装

11在课程学习中,封装是接触到的面向对象编程的首要核心概念。通过 PTA 作业中设计各类实体类,如Customer 、Order 类等,深刻理解了封装的意义。封装就是将对象的属性和行为隐藏在类的内部,仅对外提供有限的、规范的访问接口。例如在 Customer 类中,将 idnamepassword 等属性定义为 private,然后提供 public 的 getter 和 setter 方法。这样做的好处在于,一方面可以保护类的内部数据,防止外部直接访问和修改导致数据混乱,比如 password 属性,只有通过特定的 setter 方法才能修改,可在方法中添加密码强度校验等逻辑;另一方面,简化了外部对类的使用,调用者无需关心类内部复杂的实现细节,只需通过统一的接口操作对象。在掌握程度上,已经能够熟练运用封装思想设计简单的类结构,合理规划属性的访问权限与对外接口。但在一些复杂业务场景下,如涉及多个关联类的大型项目中,对封装的粒度把控还不够精准,有时会出现过度封装导致代码调用繁琐,或封装不足无法有效保护数据的情况,后续需要在实际项目中进一步打磨。

继承

继承是实现代码复用与构建类层次体系的重要手段。在实验课程与 PTA 作业中,多次实践了继承的应用。比如定义 Customer 的子类 IndividualCustomer 和 CorporateCustomer,子类可以继承父类 Customer 的属性和方法,如 idname 等属性以及 getter 方法等,同时子类还能扩展自己特有的属性和行为,像 CorporateCustomer 可能有 companyScale(公司规模)等属性。
通过继承的学习,认识到它能够有效减少代码冗余,提高开发效率。父类封装通用的属性和行为,子类专注于自身特有的业务逻辑。然而,在学习过程中也发现,不当的继承可能导致类之间的耦合度过高,破坏代码的可维护性。例如,子类过度依赖父类的实现细节,当父类发生修改时,可能引发子类的连锁错误。目前对继承的基本使用已经熟练,但在复杂类继承体系的设计,以及如何避免继承带来的耦合问题上,还需要深入学习设计模式(如里氏替换原则)来优化。

多态

多态是面向对象编程中实现动态行为的关键。在课程中,通过方法重写(Override)和接口实现等方式体验多态。比如在 Order 相关的类中,不同的 PaymentType 对应不同的支付行为处理,或者不同的 CargoType 货物类型在计算费用时有不同的实现,这可以通过多态来优雅处理。定义一个父类或接口(如 PaymentBehavior 接口),然后不同的支付方式类(如 WechatPaymentAlipayPayment 类)实现该接口的 pay 方法,在实际调用时,根据运行时的对象类型动态调用对应的 pay 方法。多态让程序具有更好的扩展性和灵活性,能够应对需求的变化。但在实际运用中,对于多态的动态绑定机制理解还不够深入,在一些复杂的多态场景,如涉及泛型与多态结合时,容易出现类型转换错误和逻辑混乱,需要更多的实践与深入学习来突破。

抽象类

抽象类是对一类具有共同特征但无法具体实例化的对象的抽象描述。在课程中,主要用于定义一些具有共性行为但具体实现因子类而异的场景。例如,定义一个抽象的 Transport 类,包含抽象方法 calculateCost(计算运输成本),然后不同的运输方式子类(如 AirTransportRoadTransport 类)去实现该抽象方法。
学习抽象类后,理解到它是一种介于具体类和接口之间的设计手段,能够为子类提供统一的行为规范,同时保留一定的实现灵活性。但在实际项目中,何时选择抽象类而非接口,以及如何合理设计抽象类的抽象方法,还缺乏足够的经验,需要在后续的项目开发中不断总结。

接口

接口是比抽象类更纯粹的抽象,它只定义行为规范,不包含具体实现(Java 8 之前,Java 8 及以后引入了默认方法和静态方法,但核心思想仍以抽象行为定义为主)。在 JavaFX 开发中,涉及到事件处理的接口,如 EventHandler 接口,我们实现其 handle 方法来处理按钮点击等事件;在业务逻辑中,也可以定义数据访问接口 DataAccessInterface,让不同的数据库访问类去实现。
接口的学习让我认识到它在解耦代码、实现多继承(Java 不支持类的多继承,但一个类可以实现多个接口)方面的强大能力。通过接口,不同的模块可以基于接口进行交互,降低耦合度。但在接口的设计上,如何平衡接口的粒度(避免接口过大或过小),以及处理接口的演化(如添加新方法时如何不影响已有的实现类),还需要进一步探索与实践。

集合框架

Java 的集合框架是处理数据集合的强大工具,课程中学习了 ListSetMap 等核心集合类型。在实验课程的订单管理系统中,大量运用 ObservableList(JavaFX 中可观察集合,继承自 Java 集合框架)来管理订单列表、货物列表等数据。例如,用 ObservableList<Order> 存储用户的订单信息,方便进行增删改查操作,并且能与 JavaFX 的界面控件(如 TableView)进行数据绑定,实现界面与数据的同步更新。
掌握了集合框架的基本使用,包括集合的创建、元素的添加删除、遍历等操作,以及不同集合类型的特点(如 ArrayList 基于数组,查询快;LinkedList 基于链表,增删快;HashSet 用于去重等)。但在集合的高级应用,如集合的排序(Comparator 和 Comparable 的深入运用)、并发集合的使用(多线程环境下的集合操作)等方面,还存在知识欠缺,需要进一步学习提升。

异常

异常处理是保障程序健壮性的重要环节。课程中学习了编译时异常和运行时异常的区别,以及 try - catch - finally 语句块的使用,还有自定义异常的创建。在 JavaFX 应用开发中,涉及文件读取(如加载图片资源、配置文件)、网络请求(若有)等操作时,合理的异常处理能避免程序崩溃。例如,在加载图片资源时,使用 try - catch 捕获 NullPointerException(资源路径错误导致输入流为空)等异常,并给出友好的提示或备用方案。
目前能够处理基本的异常场景,如捕获常见异常并进行简单的错误提示。但在复杂的异常体系设计,以及异常的日志记录、异常链处理等高级应用方面,还需要深入学习,以提升程序在异常情况下的可维护性与用户体验。

JavaFX

JavaFX 是课程中用于开发图形用户界面(GUI)的重要技术。从简单的界面布局(如 HBoxVBoxGridPane 等布局容器的使用),到控件的创建与事件绑定(如 Button 的点击事件、TextField 的文本输入事件等),再到复杂的界面与数据绑定(如 TableView 与 ObservableList 的绑定,实现数据的可视化展示与交互),都进行了实践。在订单管理系统的实验中,成功搭建了登录界面、订单列表界面、订单详情界面等,实现了用户与系统的图形化交互。

踩坑心得

在课程学习初期,对 Java 基础语法的理解不够深入,尤其是在变量作用域、循环嵌套、条件判断的复杂逻辑处理上。比如在编写一个多层循环嵌套的 PTA 作业题目时,由于没有清晰梳理变量的作用范围,导致循环内部变量的值异常,程序逻辑混乱;还有在搞定输入系统和输出格式的时候,由于经验不足,弄出好多非零返回和格式错误,这使得我当时一直像热锅上的蚂蚁一样,改动无效而且截止时间又迫在眉睫,第一次进行大作业修改与拓展的时候,我就感受到了编写代码的不易以及我自己在编写代码的不足之处,逻辑过于混乱,注释几乎没有,甚至读不清自己写过的代码,使得我十分焦虑。在第一次使用Java实验的时候,我也犯了难,因为根本不知道如何在电脑上配置Java,这时,拥有了半年笔记本电脑的我,就像一个小白,摸不清门路,而现在我已经能够快捷更换jdk了,我只能说网络的力量确实强大,前辈的经验确实丰厚,所以在使用Java之前还是尽量了解一下手上的工具。同样的javafx也是一个十分难缠的对手,因为Javafx的内容非常多,就像在开学初做课设一样,要学的东西也是非常多的,所以在编码之前,一定要花一些功夫去了解部分Javafx的相关知识。

改进建议

经历一个学期的Java学习我已经知道Java这门语言的神奇之处,更是了解到了许多相关的编程技巧,通过理论学习、作业实践、实验操作,逐步掌握了 Java 编程的基本技能与面向对象编程的核心思想。在这个过程中,不仅学会了编写代码实现功能,更重要的是培养了面向对象的思维方式,学会从现实问题中抽象出类与对象,运用封装、继承、多态等思想设计解决方案,同时也锻炼了问题排查、调试代码的实践能力。但是,对于Javafx板块,我有点认为这个太过于仓促了,几乎是没有任何铺垫地就端上来成为了一道主菜,我地建议是在学习Javafx之前在课堂上可以先做个预告,结合本节课所讲,建立与Javafx的联系最好。

posted @ 2025-06-19 18:08  HAOLAI  阅读(16)  评论(0)    收藏  举报