总结性Blog----第三次作业

总结性Blog-----第三次作业

前言

第一次Blong作业的工作量和难度在我看来是最多最难的,尤其是电梯调度算法可以算是11次PTA作业里最难的了。PTA作业中工作量最大的应该是航空货运管理系统,但难度方面总体而言适中。实验方面最难的不是第5次的JavaFX,而是第三次实验的继承与多态设计。而在线上课程—— 慕课 里我最难理解的反而是正则表达式,目前也不是很会用。而线下课程里课程大多难度相似,没有一节课难一节课简单的情况,工作量倒是有点多。

面向对象技术总结

一、面向对象编程核心特性(封装、继承、多态)

1. 封装:

通过访问修饰符(private、protected、public)限制类成员的访问范围,结合getter/setter方法实现对数据的安全操作。例如,将类的属性设为private,外部仅能通过方法间接操作,从而避免数据被非法修改。认知上理解了封装对代码可维护性和安全性的重要性,但在复杂业务场景中,对封装粒度的把握(如何时将多个属性封装为复合对象)仍需更多实践,当然实际运用中有更多的封装方法。

2. 继承:

通过extends关键字建立类间的继承关系,子类可复用父类的属性和方法,并通过方法重写(@Override)扩展功能。例如,定义“动物”父类,“猫🐱”“狗🐕”作为子类继承其“进食”“移动”“叫”等方法。在认知上明确了继承的“is-a”关系原则,但在处理多层继承的构造函数调用顺序、super关键字的灵活使用时,仍需加深理解(其实是我不太会)。

3. 多态:

分为编译时多态(方法重载,Overload)和运行时多态(方法重写,Override)。运行时多态通过父类引用指向子类对象,实现“同一接口,不同实现”,如List接口可引用ArrayList或LinkedList。认知上理解了多态在设计模式(如策略模式)中的应用,但在复杂泛型场景下,对类型擦除机制的掌握仍有欠缺。

注:类型擦除(Type Erasure)是 Java 泛型(Generics)的底层实现机制,其核心作用是在编译后移除所有泛型类型信息,使代码在运行时无需处理泛型类型,从而保持与 Java 旧版本(JDK 5.0 之前,泛型未引入)的二进制兼容性。

二、抽象类与接口:

1. 抽象类:

包含抽象方法(未实现的方法)和具体方法,通过abstract class声明,子类必须实现抽象方法。例如,定义“抽象计算器”类,声明“计算”抽象方法,子类实现具体算法。认知上明确了抽象类适用于“部分实现、部分扩展”的场景,但在抽象类与具体类的层次设计上,有时会混淆抽象程度(但子类一定比父类具体,父类一定比子类抽象)。

2. 接口:

Java 8前仅包含抽象方法,之后支持default和static方法,通过interface声明,类用implements实现多接口(注:两个接口间的继承要用extends,而不是用implements)。例如,“可跑”“可飞”接口定义行为,类可同时实现多个接口。认知上理解了接口对解耦的作用(如依赖倒置原则),但对接口默认方法的版本兼容性问题(如修改接口后子类是否受影响)缺乏实践经验,说白了就是我不太会用接口。

三、集合框架:

1. 核心容器

List:有序可重复,ArrayList(数组实现,随机访问快)与LinkedList(链表实现,增删快)的选择需根据场景,如频繁查询就用ArrayList,频繁修改就用LinkedList。

2. 泛型与工具类

通过实现类型安全,避免类型转换异常;Collections工具类提供排序、查找等方法(如Collections.sort())。目前对集合框架的性能优化(如HashMap的初始容量设置、ArrayList的扩容机制)理解不够深入,对Queue、Deque等特殊容器的应用场景掌握不足。

四、异常处理:

1. 异常体系与处理机制
区分Checked异常(如IOException,必须捕获或声明抛出)和Unchecked异常(如NullPointerException,无需强制处理),通过try-catch-finally处理异常,finally块用于资源释放(如IO流关闭)。自定义异常时需继承Exception(Checked)或RuntimeException(Unchecked)。

2. 实践中的不足
目前能完成基础异常处理,但存在两点欠缺:一是对异常链(Throwable.initCause())的使用较少,难以追溯异常根本原因;二是在复杂业务中,对“何时捕获异常、何时抛出”的策略判断不够精准,可能导致异常处理逻辑冗余或遗漏。

五、JavaFX:GUI开发的探索

1. 基础概念的掌握
JavaFX是替代Swing的现代GUI框架,采用FXML(类似HTML)分离界面与逻辑,通过Scene(场景)、Stage(窗口)、Node(控件)构建界面层次,支持动画(Timeline)和事件处理(Lambda表达式)。例如,用Button控件绑定点击事件,通过CSS样式美化界面。

2. 技术短板
目前仅掌握基础控件使用和布局管理(如BorderPane、GridPane),对高级特性(如FXML与Java代码的双向绑定、自定义控件封装、FXML加载性能优化)缺乏实践,且未涉及JavaFX与后端数据的动态交互(如数据库查询结果的界面展示)。

六、总结:

  • 薄弱点:JavaFX的复杂交互逻辑、集合框架的底层实现原理(如HashMap的哈希算法)、异常处理的最佳实践,super关键字的灵活使用,对于接口的理解。
  • 改进计划:通过阅读源码(如JDK集合类)理解底层实现,结合项目实战练习JavaFX数据绑定,优化异常处理逻辑,逐步从“会用”向“精通”进阶。

踩坑心得

在学习Java这门课程的过程中,我走过不少弯路,也从这些经历里吸取了许多宝贵的经验教训。

起初,我为了追求快速掌握知识,就忽视了基础知识的深度理解。比如在学习面向对象编程时,没花足够时间去钻研封装、继承、多态的底层逻辑和设计思想,就只是简单记住语法和示例,导致在实际项目中遇到复杂场景时,无法灵活运用这些特性。后来我意识到,只有扎实掌握基础,才能为后续的进阶学习筑牢根基,于是重新梳理基础知识,结合实际案例深入分析,学习效果明显提升。

学习过程中,我还犯了“眼高手低”的毛病。觉得看懂代码示例就等于学会了,很少动手实践。直到独立完成作业时,才发现连简单的功能实现都问题百出,实际编码时也经常报出低级错误❌。从此我明白,编程必须多敲代码,在实践中积累经验,解决各种报错,才能真正掌握技术。

在异常处理和JavaFX的学习上,我过于依赖教材和其他小组的讲解,缺乏主动探索。遇到难题时,第一反应是等别人解答或查询AI,而不是尝试通过查阅文档、搜索技术论坛寻找解决方案。这种学习方式不仅效率低,还限制了自己解决问题的能力。后来我开始主动学习官方文档,参与技术社区讨论,逐渐培养起独立解决问题的能力。

此外,我没有做好知识的归纳和总结。学过的内容杂乱无章地存在脑海里,随着知识点增多,常常混淆概念,比如抽象类和接口的区别。后来我开始使用思维导图梳理知识体系,定期复习总结,学习思路变得更加清晰,知识记忆也更加牢固。

这些弯路让我深刻认识到,学习Java需要沉下心来,稳扎稳打,注重实践,主动探索,并且及时总结反思。只有这样,才能真正学好这门编程语言,为未来的开发工作打下坚实基础。

改进建议及总结

1. 课程设计与内容

课程在讲解抽象概念(如多态、设计模式)时,可增加更多贴近实际业务的案例。例如,在介绍接口时,除了基础示例,可引入网购系统中“支付接口”的设计,展示不同支付方式(支付宝、微信支付)如何实现接口,帮助学生理解接口在真实项目中的解耦作用(我们需要更多的例子🐱🐱🐱)。

2. 教学方式

课堂教学中,教师讲解理论知识的时间较长,我认为适当增加互动环节,如通过提问、小组讨论或即时编程练习(这已经有了),检验学生对知识点的理解程度,及时发现并解决共性问题。此外,可以录制重点知识的短视频,供学生课后复习,尤其对于较难理解的内容(如集合框架的底层实现),以碎片化学习的方式加深印象。

3. 作业与实验

目前作业和实验的难度梯度起伏较大,基础题与进阶题的区分度较低,但实验明显更难。建议一段时间内的联系题目和实验难度不要跨度太大,同时,希望在作业批改中,老师门能针对代码逻辑、设计思路给出详细的优化建议,帮助学生提升编程思维(好吧,我知道这很累,只是说说而已)。

4. 课上及课下组织方式

课上可增加“学生分享”环节,偶尔让学生讲解自己完成的作业或实验中遇到的问题及解决方案,锻炼表达能力的同时,促进同学间的经验交流。课下建议建立更活跃的学习群,除了答疑,还可以分享优质学习资源(如技术博客、开源项目),营造更浓厚的学习氛围。

以上建议基于苏俊宏个人学习体验提出,希望能帮助优化课程教学,让后续学习者获得更好的学习效果❤❤❤。

posted @ 2025-06-18 09:58  苏俊宏  阅读(13)  评论(0)    收藏  举报