前言

经过一学期的Java学习,我认为学习难度和工作量比上学期的C语言学习都要大的,而且工作种类也是要多一些,上学期的C语言基本上只有pta和实验,但是Java却多了Blog和线上慕课的工作。虽然pta题量相较于C语言有所减少,但是难度却却有所增大,从C语言时的每道题十几行代码到Java时的每道题一两百行代码,
其实最初的大作业,也就是第一次大作业我是非常排斥的,一想到要敲上百行代码就头皮发麻,而且看到第一次大作业快截止了都没有一个人能够得分,自己心里其实是有点高兴的,自己想着反正别人都没有一个人能够写出来,自己也是理所当然的一拖再拖,但是我没想到的是老师居然把作业日期往后延期了3兲,此时我就开始“担心”有人能够写出来,但是这个时候我还是没有想着自己把那道题写出来,因为我知道这个时代的AI特别强大,AI会写就行,到后面越来越多的人把第一次pta测试点通过,我用AI发现根本过不了这个单独的测试点,自己也就只能硬着头皮去理解题目意思,看懂AI的代码逻辑把AI的代码逻辑换成自己所理解的逻辑才得以通过。但是当自己体会到独立完成pta看着提交面板全红的那种爽感也是其他东西所不能比的。
至于线上课程则是一些能够帮助我们再次理解上课没有听懂的知识点或者提前预习下节课所要学习的知识点,还有一些比较基础的题目可以帮助我们加以巩固,这个是C语言学习所没有的。
至于线下课程,蔡老师我认为他是讲得很好的。蔡老师总是列举一些非常生动形象的例子帮助我们理解知识点,比如“取快递”和“郊游”帮助我们理解面向对象思维,“插口”理解接口这个知识点等,在其他课上我是比较容易犯困的,但是说实话我在蔡老师课上很少很少犯困。

面向对象技术总结

封装

类的封装我认为这是Java与C语言最大的核心区别。从我开始学习C语言时的面向过程思维,而且初高中我学习时基本上也是使用这个思维进行理性思考的,从这一步要干什么推出下一步要干什么,做什么事情都是一步一步来,都是有一个过程在这里的。但是Java面向对象的学习让我了解并学习到面向对象的学习思维,完成这个事情我需要哪些人物或条件,而且这些人或事都是互不干扰的,并没有像面向过程思维那样,这一步缺少了某个条件就不能进行之后的步骤,就像一条线一样,中间断了就不能完成之后的事情,但是面向对象我认为是多条线并存,这条线断了并不影响其他的线。就像类的封装。比如pta雨刷那道题,定义雨刷类,控制杆类和刻度盘类等。有了类的封装也就可以使用继承,抽象和接口等方法。

继承

Java提供了相较于C语言更简便的继承方法,继承就像父亲与儿子,父亲有的特性有些儿子也有,但父亲和儿子可能又有自己所独有的特性。继承相较于C语言里所提供的方法更简洁,你写了父类的方法,或许一个extends就帮你完成了子类的方法敲打。比如实验动物电器类,我们可以写一个动物类,他们都可以叫,都可以跑,他们都有自己的战斗力;再如写一个电器类,他们都可以开关门,他们都有自己的容量。再写猫类和狗类或者冰箱类和微波炉类时使用继承就可以节省很多代码空间。当然继承的使用还得像蔡老师所说,不能为了继承而使用继承。

多态

多态这个概念我认为是比较抽象的,不过蔡老师用一个简单的例子让我恍然大悟:动物类有"叫"这个方法,而狗类和猫类继承动物类后,各自实现了不同的"叫"声。这就是多态的魅力所在 - 同一个方法调用,根据对象不同产生不同行为。在实际编程中,我发现多态最大的好处是提高了代码的扩展性。比如在PTA的图形面积计算题中,我定义了一个图形父类,然后圆形、矩形等子类各自实现计算面积的方法。这样当需要新增三角形时,只需要继承图形类即可,完全不用修改原有代码。

抽象类

抽象类是我在学习继承后遇到的又一个重要概念。它就像是一个半成品的模板,定义了子类必须实现的方法框架。我记得在完成PTA的航空货运管理系统时,就很好地运用了抽象类。我创建了一个抽象客户类,定义了计算费率的抽象方法,然后集体用户、个人用户子类各自实现具体的计算逻辑。抽象类不能实例化的特性,强迫我必须通过子类来实现具体功能,这样既规范了代码结构,又避免了误用。

接口

接口的学习让我对Java的设计理念有了更深的理解。接口就像是一份契约,规定了实现类必须遵守的规则。与抽象类相比,接口更加纯粹,它只关心"能做什么",而不关心"怎么做"。接口就像电脑接口一样,只要能接上去就能使用。在完成PTA的图形继承、多态、接口及集合框架题目时,我使用了比较接口,把它接入抽象图形类就能完成比较。

集合框架

从C语言的数组到Java的集合框架,这就像是从石器时代来到了工业革命。集合框架的强大让我爱不释手,特别是它的泛型特性,让类型安全得到了保证。List、Set、Map三大接口各司其职,ArrayList、LinkedList、HashSet、TreeMap等实现类满足不同场景需求。记得在PTA的航空货运管理系统题目时,我使用了ArrayList来储存不同的货物,大大缩短了遍历和对货物的查找代码行数。

异常处理

Java的异常处理机制让我告别了C语言中通过返回值判断错误的原始方式。try-catch-finally结构清晰明了,checked异常和unchecked异常的区分强制开发者处理可能的异常情况。自定义异常的使用更是让错误信息更加明确和专业。不过我对异常处理还不够熟练,对于异常我都是直接使用if语句来判断的,这一方面还有待加强。

Javafx

JavaFX相比于C语言里的Ege系统我自己感觉更加简洁和方便。从命令行到图形界面的转变,就像从黑白电视升级到了彩色电视。场景(Scene)、舞台(Stage)、控件(Node)的三层结构清晰易懂。比如动物电器实验里就使用Javafx创建了一个能够和鼠标交汇又美观的图形界面。JavaFX强大的功能和现代化的外观还是让我印象深刻。

踩坑心得

我觉得对于Java大作业要消除自己内心的那种排斥感,要敢写才有可能写好,如果像自己第一次那样拖到最后指望着使用AI写出来,但AI写不出来,自己还得在这剩余的时间内熬夜赶出来我觉得是件非常折磨的事情,心态很容易崩溃,因为我写第一次大作业熬夜把它赶出来时就非常崩溃。而且在写之前得自己构思一下需要哪几个类和方法,不然很容易写着写着就偏了,这个并不是在浪费时间,而是在为后续的代码编写缩短时间,毕竟磨刀不误砍柴工。
其次就是注释问题,有时候在写大作业时这一天没写完,等另一天再来看时发现有部分代码自己已经看不懂了,还得从头梳理一遍代码逻辑太浪费时间,但是对于有注释的代码基本上看一眼就懂。而且我的代码基本上只有类写注释,我认为还得对方法加一点注释就更好了。

改进建议及总结

改进建议

我认为pta大作业第一次电梯调度难度比第二次大作业航空货运难度要大,才刚开始写大作业就上了比第二次还要大的难度,我觉得这个很容易把初学者从“入门”到“放弃”,所以我建议大作业难度应该由易到难逐层递增是更好的,不仅在初学时可以增强自信心,还可以为后续编写加大难度的大作业的学习打下一定的基础。
再者就是实验提交系统的复制粘贴我建议打开,因为我们编写代码都是在IDEA或者eclipse里面编写好并调好的,本来调好之后就可以直接复制进实验提交系统提交的,但是关闭该功能后还得自己重新敲一遍,而且大概率是编译错误的,由于提交系统并没有提示报错在哪的功能,所以还得自己对着报错慢慢找,花费的时间太长了。

总结

一学期的Java学习也算是落入尾声,这一路虽曲折稍艰辛,但更重要的是学习到了一种全新的思考模式——面向对象思维。从最初接触C语言时的面向过程思维,到如今Java的封装、继承、多态,我逐渐理解了"对象"这一概念的精妙之处。它不再局限于一步步执行指令,而是将现实世界的事物抽象成类,赋予它们属性和行为,让程序更贴近自然逻辑。这种思维模式的转变,不仅影响了我的编程方式,甚至改变了我解决问题的思路——不再只关注"怎么做",而是先思考"谁来做"、"它应该具备什么能力"。

与此同时,我们的大一旅程也即将结束。从刚入学时的懵懂,到现在能独立完成简单的项目;从只会写顺序执行的代码,到能设计类、接口和继承体系;从对编程一知半解,到逐渐理解计算机科学的魅力……这一年的成长,不仅仅是知识的积累,更是思维方式的升级。Java只是开始,面向对象的思想将会伴随我后续的数据结构、算法、乃至更高级的软件开发学习。

未来的路还很长,但至少现在,我已经迈出了坚实的第一步。