第三次blog作业——总结
前言
我认为本门课程的Blog作业、PTA作业、实验、线上课程和线下课程的工作量与难度设置恰到好处,既不会因任务繁重让人望而却步,也不会因过于简单而难以提升编程能力。
线上课程打破了时间与空间的限制,无论是课后复习,还是针对某个重难点进行专项突破,我都能依据自身进度自由安排学习节奏。,线上我们有充足的时间查阅资料、思考解题、调试代码,线下课程也结合线上的视频进行讲解,更能深入理解视频里的样例,最后组织的翻转课堂也锻炼了我们的小组协调能力和自学能力、讲解能力;美中不足的就是实验提交系统用着没那么方便,经常敲错了单词还没发现,最后敲完代码一运行跳出来几十个错误,没有标明行数也不太方便查找错误的位置,每次都要额外花几个小时修改和提交实验代码。
面相对象技术总结
-
经过几个月的面向对象技术学习,我对封装和继承已经有了比较好的掌握,封装是从一开始写代码到现在都一直在强调的,继承和抽象类在PTA作业和实验中运用的也比较多,算是用的比较熟练了,例如在 PTA 作业和实验中,我通过抽象基类定义通用行为,派生子类实现具体逻辑。如定义抽象图形类,派生出圆形、矩形等子类,利用继承实现代码复用,通过抽象方法强制子类提供特定实现。
-
多态的概念同样与继承紧密相连,在继承关系的基础上,通过方法重写和父类引用指向子类对象,实现了同一方法在不同子类中的多样化表现。不过,尽管在实际应用中经常接触多态,但对于强制类型转换的使用场景,我偶尔仍会感到困惑。有时在处理父类引用和子类对象的转换时,难以迅速判断何时需要进行强制转换,何时又可以自然过渡,这还需要我在后续的学习中加强总结和练习。
-
对接口运用没有抽象类那么多,虽然它们是类似的,但接口的运用没有抽象和继承那么熟练,有时会忘记一些细节,还要翻阅资料加强记忆。
-
在集合框架这方面,我对list接口运用自如,无论是ArrayList的快速访问,还是LinkedList的灵活增删,都能熟练操作,但set、map接口现在都还不太熟悉,用的时候需要查阅资料。
-
异常处理用的也不多,一个原因是它在最后才讲,还有一个原因是前期编写代码时没有养成使用异常处理的习惯,再加上部分简单程序即便不使用异常处理也能正常运行,导致我在实际编程中对它的应用较少。
-
在JAVAFX这方面,它的内容比较多,而且是以翻转课堂的形式讲的,在最初接触 JAVAFX 时,面对繁多的类和复杂的 API,我常常感到无从下手,但是经过实验五和互评作业也能学会用JAVAFX,但不可否认的是,JavaFX 的知识体系庞大,我目前的掌握程度还比较浅,在开发较为复杂的界面功能时,仍需要不断查阅资料,借鉴优秀案例。
-
总的来说,我对面向对象技术课程的核心知识已经有了基本的掌握,能够运用所学知识完成常见的编程任务,在编写代码时也很少出现原则性错误,但我也清楚地认识到,自己在一些不常用的知识点上还存在明显短板,知识体系的完整性和熟练度还有待进一步提升。
踩坑心得
-
刚开始学习时,我经常混淆int和Integer,经常在 应该用Integer的地方用int,后来才明白int是基本类型而Integer是包装类型,int作为基本数据类型,其默认值为0;而Integer作为包装类,不仅能存储数值,还能通过null表示缺失数据;
-
一开始对于Integer和String类型的对象总是习惯采用两个=进行比较
但实际上它们应该用equals()进行比较,因为两个=比较的是对象的内存地址,而字符串比较应该用equals(),因为字符串在 Java 中是对象,使用==比较时,只有当两个字符串引用指向同一个对象时才会返回true; -
在处理浮点数格式化输出时,我因对数据类型转换理解不足导致编译错误。在一个计算商品价格折扣的程序中,需求是将计算结果保留两位小数。我错误地在方法中使用double作为返回值,并直接返回String.format("%.2f", value),我误以为String.format()返回的仍是double类型,结果导致编译错误。实际上,该方法返回的是格式化后的String对象。正确的做法是先进行数学运算,最后在展示时格式化;
-
我曾经在循环中用+拼接字符串,但程序运行一段时间后内存占用过大,查阅资料之后才知道,每一次使用+拼接字符串,都会创建一个新的String对象占用内存,用StringBuilder或者StringBuffer可以解决这个问题;
-
在javafx实验中,我曾经用import javafx.scene.导入包,误以为可以导入所有包,在使用Button等控件时却出现编译错误,我查阅资料才了解到仔细查阅文档后得知,通配符仅能导入javafx.scene包下的类和接口,无法导入javafx.scene.control等子包中的类。必须显式添加import javafx.scene.control.*语句,才能正确使用这些控件;
-
这些踩坑经历虽然让我花费了不少调试时间,但也成为了我成长的宝贵财富。它们教会我:编程不仅需要掌握理论知识,更要注重细节和实践积累。每一次错误都是一次深入理解语言特性的机会,只要善于总结反思,就能逐步提升代码质量和编程水平。在未来的学习中,我将继续保持谨慎的态度,不断探索 Java 语言的奥秘。
改进建议
*针对学习中频繁踩坑的知识点,如基本类型与包装类型的区别、多态中强制类型转换的使用场景、JavaFX 包导入规则等,增设专题课程或案例分析。例如,通过实际项目中出现的错误代码进行调试演示,帮助学生更直观地理解正确的使用方式,减少因概念模糊导致的错误;
-
对于 JavaFX 等内容较多、难度较大的模块,仅采用翻转课堂的形式,学生在自主学习时容易感到无从下手。建议在学生自主学习前,教师提供详细的学习指南和示例代码;在学习过程中,增加课堂答疑和小组讨论环节,及时解决学生遇到的问题,提高学习效果,鼓励学生以小组为单位进行讨论,分享学习经验和遇到的问题,通过互相交流和启发,共同解决学习难题,提高学习效果;
-
异常处理在课程后期才讲解,导致前期编程时难以养成使用习惯。建议将异常处理相关内容适当提前,结合基础代码示例,让学生在学习初期就认识到异常处理对程序健壮性的重要性,逐步培养良好的编程习惯。
总结
回顾这段 Java 课程的学习历程,我从对面向对象编程技术一无所知的初学者,逐渐成长为能够运用相关知识完成常见编程任务的入门者。在学习初期,面对封装、继承、多态等抽象概念,我感到困惑和迷茫,常常在实际编程中出现各种错误。例如,在尝试使用继承关系创建类时,我没有正确理解子类与父类之间的属性和方法继承规则,导致程序运行结果与预期不符。通过不断地查阅资料、向老师和同学请教,以及反复调试代码,我逐渐掌握了这些概念的本质和应用方法。在完成 PTA 作业和实验项目的过程中,每一次遇到的问题和错误都成为了我深入学习的契机。我学会了从错误中总结经验教训,不断调整自己的编程思路和方法,对 Java 语言的理解也越来越深刻。
在这个学习过程中,我不仅提升了编程技能,更重要的是培养了严谨的逻辑思维和问题解决能力。当面对复杂的编程任务时,我能够运用所学知识,将问题进行分解,逐步分析和解决,例如,在一个PTA题目里,,我需要实现图形的绘制功能。我以Shape作为父类,定义了通用的属性和抽象方法,比如用x、y表示图形的坐标,draw、printInfo等抽象方法规范图形的行为。然后创建Circle作为子类继承Shape,在子类中通过radius属性封装圆的半径,重写父类的draw方法,实现具体的绘制逻辑,即输出在特定坐标绘制指定半径圆的信息;
尽管我已经掌握了课程的核心知识,但我也清醒地认识到自己在学习中还存在诸多不足。在接口的运用方面,我还不够熟练,常常在实现接口方法时出现逻辑错误,对接口在代码设计中的作用和优势理解不够深入。在集合框架的学习中,除了对list接口较为熟悉外,对于set和map接口的使用还比较生疏,在实际应用中需要频繁查阅资料,这在一定程度上影响了编程效率。
针对这些问题,我希望通过上述提出的改进建议,能够进一步优化 Java 课程的教学,让后续的学习更加高效和顺畅。同时,我也将在未来的学习中,更加注重对薄弱知识点的学习和练习,积极参与实践项目,不断突破自我,努力提升编程水平,为成为一名优秀的程序员奠定坚实的基础。我相信,只要保持积极的学习态度和坚持不懈的努力,我一定能够在 Java 编程的道路上取得更大的进步。

浙公网安备 33010602011771号