java课程的总结性Blog

《Java面向对象程序设计》课程学习总结

前言:课程全景回顾

1. 课程模块概览

本课程采用"四位一体"的教学模式,通过PTA编程训练实验项目开发线上理论学习线下实践研讨的有机结合,系统性地构建了Java面向对象编程的知识体系。经过16周的深度学习,累计投入约200小时,完成了从基础语法到综合项目开发的完整学习路径。

2. 各环节工作量分析

2.1 PTA编程作业

  • 任务总量:12个题目集,覆盖53道编程题目
  • 阶段特征
    • 基础阶段:侧重语法训练,日均编码1.5小时
    • 进阶阶段:强化OOP思想,出现综合性设计题目
    • 冲刺阶段:GUI开发
  • 典型挑战
    • 多态应用(航空运货系统设计)

2.2 实验项目

实验名称 核心技能点 技术难点 耗时(h)
银行账户管理系统 封装/异常链 并发访问控制 10
电商购物车 集合框架/Lambda表达式 折扣策略模式实现 14
图书馆管理系统 继承体系/接口设计 多态调用优化 18
数据可视化平台 JavaFX/JSON解析/多线程 实时数据渲染性能优化 22

2.3 线上学习

  • 学习轨迹
    graph TB A[Java基础] --> B[OOP三大特性] B --> C[GUI编程] C --> D[设计模式] D --> E[工程规范]
  • 关键数据
    • 通过在线测验11次
    • 参与讨论区问题解答6次

3. 难度发展曲线

graph LR A[基础语法] --3/10--> B[类与对象] B --5/10--> C[继承多态] C --7/10--> D[异常处理] D --8/10--> E[集合框架] E --9/10--> F[JavaFX]

4. 学习成效评估

核心收获

  • 掌握面向对象四大特性的工程化应用
  • 建立企业级编码规范意识

现存不足

  1. 复杂系统架构设计能力待提升
  2. 性能优化经验不足(如集合选择策略)
  3. 设计模式组合应用生疏

面向对象技术学习总结

一、封装

学习内容与认知

封装是面向对象编程的基础概念,通过将数据和行为包装在一个类中,并控制对内部实现的访问。在PTA作业和实验中,我通过以下方式实践了封装:

  • 使用private修饰成员变量
  • 提供public的getter和setter方法控制访问
  • 将相关操作封装在类的方法中

掌握情况

  • 能够正确使用访问修饰符控制类的可见性
  • 理解封装对代码安全性和可维护性的重要性
  • 能够设计合理的类接口,隐藏实现细节

欠缺

  • 有时对哪些成员应该暴露为public判断不够准确

二、继承

学习内容与认知

继承允许创建层次化的类结构,子类可以继承父类的特征和行为。通过实验和作业:

  • 实现了基本的类继承关系
  • 理解了方法重写(Override)的概念
  • 掌握了super关键字的使用

掌握情况

  • 能够正确设计类继承层次结构
  • 理解继承的"is-a"关系
  • 能够正确使用super调用父类构造方法和方法

欠缺

  • 在设计复杂继承体系时,有时会出现设计不合理的情况

三、多态

学习内容与认知

多态是面向对象的核心特性之一,通过PTA编程题:

  • 理解了编译时多态(方法重载)和运行时多态(方法重写)
  • 掌握了父类引用指向子类对象的应用
  • 在实践中使用了多态提高代码灵活性

掌握情况

  • 能够正确使用多态特性编写灵活代码
  • 理解向上转型和向下转型的应用场景
  • 能够在实际项目中应用多态减少代码重复

欠缺

  • 对多态在大型项目中的设计模式应用不够熟练

四、抽象类与接口

学习内容与认知

抽象类和接口是Java实现抽象的两种机制:

  • 理解了抽象类与普通类的区别
  • 掌握了接口的定义和实现
  • 通过实验实现了基于接口的编程

掌握情况

  • 能够正确设计和使用抽象类
  • 理解接口作为契约的作用
  • 掌握了Java 8接口的默认方法和静态方法

欠缺

  • 对函数式接口和Lambda表达式的结合使用不够熟练

五、集合框架

学习内容与认知

Java集合框架提供了丰富的数据结构和算法:

  • 掌握了List、Set、Map等核心接口及其实现类
  • 理解了迭代器和增强for循环的使用
  • 通过PTA作业实践了集合的排序、查找等操作

掌握情况

  • 能够根据需求选择合适的集合类型
  • 理解泛型在集合中的应用
  • 掌握了集合的常用操作方法

欠缺

  • 对并发集合的使用不够熟悉
  • 对集合性能特性的理解有待深入

六、异常处理

学习内容与认知

异常处理是Java程序健壮性的重要保障:

  • 掌握了try-catch-finally的使用
  • 实践了自定义异常的实现

掌握情况

  • 能够正确处理常见的异常情况
  • 理解异常处理的最佳实践
  • 能够设计合理的异常层次结构

欠缺

  • 对异常处理性能影响的理解不够
  • 有时会过度捕获异常或忽略重要异常

七、JavaFX

学习内容与认知

JavaFX是Java的GUI框架:

  • 掌握了基本的UI组件使用
  • 理解了事件驱动编程模型
  • 实践了简单的图形界面应用开发

掌握情况

  • 理解布局管理器的使用
  • 掌握了简单的事件处理

欠缺

  • 对复杂UI布局的设计能力不足
  • 对CSS样式与JavaFX的结合使用不熟练
  • 对动画和高级图形处理缺乏经验

八、总结与改进方向

通过本学期的学习,我对面向对象编程有了更深入的理解,能够使用Java语言实现中等复杂度的应用程序。但仍存在以下需要改进的方面:

  1. 设计能力:需要提高面向对象设计能力,特别是合理使用设计模式
  2. 实践深度:对某些高级特性(如Lambda)的实践不够
  3. 项目经验:缺乏完整项目开发经验,需要参与更大规模的实践项目

面向对象技术学习中的采坑心得与经验教训

一、基础概念理解阶段的弯路

1. 封装过度与不足

踩坑经历:在初期作业中,要么将所有成员都设为public(封装不足),要么将所有方法都设为private导致类难以使用(封装过度)。

教训

  • 需要区分"实现细节"和"公共接口"
  • 根据类的实际用途决定访问级别
  • 不是所有字段都需要getter/setter

2. 继承滥用

踩坑经历:为了代码复用,建立了过深的继承层次(如A→B→C→D),导致后期难以维护。

教训

  • 优先使用组合而非继承
  • 继承层次最好不超过3层
  • 每个子类都应该是父类的"is-a"关系

二、多态与接口应用的误区

1. 多态使用不当

踩坑经历:在需要多态的地方使用了大量if-else判断对象类型,违背了开放-封闭原则。

教训

  • 发现频繁的类型检查时应考虑多态
  • 利用方法重写替代条件判断
  • 多态配合工厂模式可以大幅简化代码

2. 接口设计不合理

踩坑经历:设计了一个包含20多个方法的"万能接口",结果难以实现和维护。

教训

  • 接口应该小而专一(单一职责原则)
  • 考虑将大接口拆分为多个小接口(接口隔离原则)
  • 方法命名要准确反映接口的单一职责

三、集合框架使用中的问题

1. 集合选择不当

踩坑经历:在需要频繁随机访问的场景使用了LinkedList,导致性能问题。

教训

  • ArrayList适合随机访问,LinkedList适合频繁插入删除
  • HashSet用于快速查找,TreeSet用于有序存储
  • 多线程环境要考虑并发集合

2. 迭代时修改集合

踩坑经历:在for-each循环中尝试移除元素,导致ConcurrentModificationException。

教训

  • 使用Iterator的remove方法安全删除
  • 或者使用Java 8的removeIf方法
  • 需要修改时考虑复制一份新集合

四、异常处理的常见错误

1. 吞掉异常

踩坑经历:捕获异常后仅打印日志,没有正确处理或向上传递。

try {
    // 可能出错的代码
} catch (Exception e) {
    e.printStackTrace(); // 仅打印不够!
}

教训

  • 根据异常类型决定处理方式
  • 要么完全处理异常,要么抛出
  • 记录异常时要包含完整上下文信息

2. 过于宽泛的异常捕获

踩坑经历:捕获Exception基类,掩盖了应该特殊处理的异常类型。

教训

  • 尽量捕获特定异常
  • 多个catch块要从具体到抽象
  • 使用Java 7的多异常捕获语法

五、综合项目中的经验教训

1. 前期设计不足

踩坑经历:没有充分设计就开始编码,导致后期频繁重构。

教训

  • 先画UML类图和序列图
  • 明确类的职责和关系
  • 设计好关键接口再实现

2. 测试滞后

踩坑经历:写完所有代码才开始测试,难以定位问题。

教训

  • 采用测试驱动开发(TDD)
  • 为每个功能编写单元测试

六、最有价值的几条经验

  1. 面向接口编程:代码更灵活,易于扩展和维护
  2. 小步前进:频繁测试和提交,避免大规模调试
  3. 代码复用:合理使用继承和组合,但不要过度设计
  4. 异常处理:是功能的一部分,不是事后补充
  5. 工具熟练:掌握IDE的调试、重构功能大幅提高效率

七、总结

  1. 从简单项目开始,逐步增加复杂度
  2. 多阅读优秀开源代码(如JDK部分源码)
  3. 重视设计模式的学习和实践
  4. 培养良好的编码习惯和文档习惯
  5. 遇到问题先思考再搜索,理解原理而非复制代码

通过这门课程的学习,我深刻体会到面向对象不仅是一种编程范式,更是一种思维方式。初期的挫折和错误都是宝贵的经验,帮助我建立了更扎实的编程基础和更严谨的开发习惯。

建议

希望在PTA阶段作业结束后,放出每个题目测试点的测试样例和测试结果,以免发生去问老师,老师不给讲,去问其他学生也不能知道错误发生在哪里,最后只能不明不白的结束。

posted @ 2025-06-22 12:06  aki9  阅读(22)  评论(0)    收藏  举报