第三次Blog作业
前言
在这个学期,我分别从以下几个方面进行了学习:
线上课程以及线下课程:
我在其中学到了如何分析用户需求,以及类与对象、继承与多态、抽象类与接口、List及泛型以及面向对象设计原则等基础知识,除此之外还有正则表达式等,并且线上线下相结合的课程形式对我来说非常受益,我在不懂的地方可以暂停反复看。
PTA作业
这个学期一共发布了11次PTA作业,是根据我们所学的进度来帮助我们巩固所学知识,PTA作业是从简单到难一步步升级的,一开始是让我们掌握基础编程能力,后面渐渐开始考察类设计、继承与多态、List的使用、抽象类与接口等进阶知识。一开始我连类与对象的创建都会出错,到后面编写电梯程序时每天对着草稿纸演算电梯的运行方式的抓心挠肝,还有最后练习运用正则表达式的百思不得其解,在写这些作业时我经常痛苦无比,但在解决了这些问题,搞懂了这些知识后,回过神发现有一种别样的成就感。
实验
在这个学期,我一共做了五次实验,这些实验也是由简到难,主要是完成一个将动物装入电器的程序,
-
实验一较为简单,主要是让我们熟悉Java开发及运行环境,掌握Java程序开发的基本步骤,理解Java+程序开发中的常见错误及其解决办法并且掌握IDE的调试手段和工具。
-
实验二则是在实验一的基础上增加了类的声明、创建与使用、类的构造方法的定义与使用、类的成员变量、成员方法的定义与使用,并且让我们区分类变量、类方法与实例变量、实例方法,理解Java语言中包的概念以及package、import语句,理解引用变量与对象实例之间的关系与区别,方法调用时引用类型参数的传递过程,并掌握private、protected、public等关键的使用场合与使用,掌握对象组合的方式与方法,理解Java中方法重载的实现方式,以此掌握类与对象的基本概念。
-
通过实验三,则是让我掌握了Java语言中继承的基本概念及使用方法以及super关键字的使用方法,理解了继承与组合的区别以及程序设计中代码复用的重要性,除此之外,我还掌握了Java语言中多态的使用方法。
-
实验四则是在实验三的基础上更进一步,要求我掌握Java语言中final关键字的含义及使用、抽象类的基本概念及使用、接口的基本概念及使用、List相关类的使用方法以及Collections.sort方法的使用,并且理解程序设计中常用数据结构的用法。
-
实验五则是要求我使用JavaFX来设计这个界面,刚好可以巩固我新学的JavaFX使用方法,使我了解JavaFX的基本原理和基本组件,能够熟练应用JavaFX组件进行界面设计以及掌握Java的事件驱动机制、lambda表达式。
通过这些实验,我学到了好多实用技能,学会了如何去拆解用户要求并把它们编写成程序,提高了我实际运用的能力。
Blog作业
一开始,写 Blog 其实挺让我头疼的,但后来我发现,线上线下课打基础,PTA 练手感,实验积累实践经验,Blog则是进行总结,逼着自己想明有哪里发生了问题,有哪里需要改进。通过Blog总结自己踩了多少坑,比如写代码总忘判空,泛型语法老是写错,逻辑不够简洁以至于总是出现错误等等。通过Blog总结,我可以进行系统性反思,将经历转化为可复用的知识资本,实现从 “实践” 到 “认知” 再到 “优化” 的闭环提升,对我的学习之路起到了强大的助力。
面向对象技术总结
封装
-
掌握情况:通过private修饰符实现属性私有化,结合public方法实现数据访问控制,比如实验二Elephant类封装weight属性。
-
认知:封装本质是构建类的安全边界,隔离内部实现与外部调用。
-
欠缺:复杂业务场景下的封装粒度设计比如接口隔离原则的应用,仍需强化。
继承
-
掌握情况:如实验中我通过Electric抽象类派生出IceBox/Washing等子类,使用super关键字调用父类构造方法。
-
认知:遵循 “is-a” 关系原则,实现代码复用。
-
欠缺:抽象类与具体类的设计边界把握不清晰,多重继承冲突处理经验不足。
多态
-
掌握情况:实验中我用不同动物子类重写enterElectric()方法,实现动态行为(如老虎与大象进入电器时的不同叫声)。
-
认知:通过父类引用指向子类对象,实现 “同一接口,不同实现”。
-
欠缺:子类特有方法的类型转换(如(Tiger)animal)安全性判断不足。
抽象类
-
掌握情况:在实验四中我将电器类与动物类定义为抽象类,通过abstract关键字声明抽象方法(如enterElectric()),并在子类(IceBox/Elephant)中实现抽象方法,掌握了抽象类作为基类构建继承体系的用法。
-
认知:抽象类无法实例化,用于封装共性属性与方法,强制子类实现核心逻辑,体现 “模板方法” 设计思想。
-
欠缺:未涉及抽象类与接口的混合使用,以及抽象类中构造方法、静态成员的设计场景,对抽象类在复杂架构中的分层设计理解不足。
接口
-
掌握情况:实验四中动物类实现Comparable接口重写compareTo()方法(按战斗力排序),定义有攻击性接口规范攻击行为(返回 0/1),掌握接口的多实现机制(如Elephant同时实现Comparable和有攻击性)。
-
认知:接口是纯抽象的行为契约,不包含实现细节,支持多继承特性,用于解耦代码依赖。
-
欠缺:未实践接口默认方法、静态方法的应用,对接口多实现时方法冲突的解决策略(如显式接口方法实现)缺乏经验。
集合框架
-
掌握情况:实验四中使用ArrayList存储动物对象(List
),调用Collections.sort()进行排序(传入Comparator比较器),掌握基础集合的增删改查操作及排序 API。 -
认知:理解List接口与ArrayList实现类的差异(动态数组特性),通过泛型确保集合元素类型安全,排序时通过比较器定制规则。
-
欠缺:未涉及Map接口(如HashMap)的键值对存储,不熟悉Set接口的去重特性,对泛型通配符(<? extends T>)和类型擦除机制理解不深。
异常
-
掌握情况:实验一中通过try-catch捕获NumberFormatException(输入非数字时),使用try-with-resources关闭Scanner资源,掌握基本异常处理结构。
-
认知:区分受检异常与非受检异常,理解异常处理链的执行顺序。
-
欠缺:未自定义异常类(如AnimalAttackException),未处理异常链(initCause()),对异常日志记录(如Logger)无实践经验。
JavaFX
-
掌握情况:实验五中使用BorderPane布局划分界面区域,通过鼠标点击事件(setOnMouseClicked)触发动物移动逻辑,掌握基础控件(Button/Label)和事件驱动机制。
-
认知:JavaFX 基于场景图构建 UI,通过属性绑定实现动态更新,事件处理可通过 Lambda 表达式简化代码。
-
欠缺:未使用FXML文件分离 UI 与逻辑,不熟悉 CSS 样式定制(如控件背景 / 动画),未实现Timeline动画控制动物移动速度。
采坑心得
在本学期的学习经历中,我总结了许多常犯的错误,以做实验的经历来说:
语法和编译错误
- 类名与文件名不匹配,将类名写成Test,但文件名存为FirstProgram.java,导致声明时找不到主类。
- 公共类声明错误,在一个 Java 文件里定义多个public class,或者public class的类名和文件名不一致。
- 语法符号缺失,代码中漏写分号,比如代码行后面没加分号,导致编译错误。
- 方法重复定义,在同一个类里写了两个同名同参数的方法,比如同时存在两个add方法。
逻辑和运行时错误
- 变量未初始化,定义变量后没赋值就使用,然后直接调用,导致空指针异常。
- 喜欢用set方法添加数组元素,但忘记考虑数组为空时索引越界问题。
- 归并排序时合并逻辑写错,导致排序结果不对,或者冒泡排序的比较条件写反。
输入输出错误
总是用%d输出浮点数,导致输出乱码或错误。
面向对象设计错误
- 继承和多态使用不当,子类没有正确重写父类方法,比如实验中电器类的add方法在子类中返回值错误,导致动物无法添加到电器中。
- 接口和抽象类实现错误,实现接口时漏写方法,比如动物类实现了Put接口,但没写join方法。
改进建议及总结
在以后的程序编写中,我可以:
规范代码与语法细节
- 严格遵循 “public 类名与文件名一致” 原则,避免因命名不一致导致编译错误。
- 养成编写代码后检查分号、括号匹配的习惯,可借助 IDE 的语法高亮功能辅助排查。
- 声明引用类型变量时立即赋值为null,避免空指针异常。、
逻辑与算法优化
- 学会区分add()与set()的使用场景,新增元素统一用add()。
- 归并排序等复杂算法可先绘制流程图梳理逻辑或参考标准实现模板,减少逻辑漏洞。
- 确保随机数生成语句独立,避免变量复用。
面向对象设计强化
- 实现接口时用@Override注解标记重写方法,或借助 IDE 编译提示避免漏写抽象方法。
- 遵循单一职责原则,避免同时处理存储与排序逻辑,提高代码可维护性。
- 子类重写父类方法时确保参数、返回值一致,并且通过单元测试验证多态行为。
总结
我还是有细节把控不足、逻辑严谨性欠缺等问题需要改正,在以后的学习中需要经常进行复习与总结,避免二次翻车。
浙公网安备 33010602011771号