Java课程总结

一、前言:

时间过得很快,这个学期的Java课程眼看就要落下帷幕了,这应该也是最后一个作业了吧,作为一个软件工程的学生,这是我接触到的第二个编程语言,和上学期的c语言一样,都是才接触的时候难,接触多了也不简单,随着课程的深入,知识点的加深,这门课程是越来越难了,每周都有折磨人的pta作业,这是我们训练技能的基础,然后还有实验,五次实验更是大强度,反正是要花大量的时间之后才能完成的,但是能为我们灵活的运用知识点提供了训练的舞台,线上课程的教学我认为是非常好的,可以为我们提供了复习的资源,课上没有听懂的知识点,可以通过下来观看学堂在线的视频重新学习。之后就是这个blog作业,为我们一段时间的学习后的总结有很大的帮助。

二、面向对象技术总结

一、封装:藏数据没那么简单

刚学封装的时候,我还以为把属性设成private,写几个get和set方法就完事了。结果实际写代码才发现,这根本不是单纯藏数据!比如给对象设属性值,还得考虑各种限制条件,像年龄不能是负数、金额不能小于 0。我好几次写代码都忘记检查,一运行就出问题,debug 的时候真的要崩溃,现在总算明白,封装就像给数据上了个保险,得保证数据安全,可我有时候还是会疏忽。

二、继承:继承了 “痛苦”

继承这概念听着挺简单,子类继承父类的东西嘛。实验有动物类的题目,我写了大象类继承动物类,构造函数的调用直接把我搞懵了!子类初始化的时候到底什么时候调用父类构造函数?super关键字怎么用?我对着代码调试了好久才搞清楚。而且 Java 居然不支持多重继承,这和我想象的不太一样,不过后来用接口实现了类似的功能,感觉稍微好点,但还是不太熟练,总担心写错继承关系。

三、多态:最让人摸不着头脑

多态绝对是我最头疼的!什么编译时多态、运行时多态,光是概念就让我晕头转向。实验课上用抽象类实现图形绘制的多态,定义了Shape抽象类,让圆形和矩形类重写draw方法。我写代码的时候还挺明白,可一运行就报错,原来是父类引用和子类对象没对应好。PTA 作业里用接口实现支付方式多态的时候,我又忘记在子类里完全实现接口方法,直接编译不通过。现在虽然知道多态能让代码更灵活,但遇到复杂的场景,比如泛型和多态结合,我还是会犯迷糊。
 
四、抽象类和接口:傻傻分不清楚
 
抽象类和接口真的把我绕晕了!到底什么时候该用抽象类,什么时候该用接口?抽象类里能有普通方法,接口全是抽象方法,这些规则我老是记混。接口的默认方法和静态方法,我到现在都没完全搞懂,感觉考试考到就要凉
 
五、集合框架:表面友好,暗藏玄机
 
集合框架一开始用着觉得挺方便,ArrayList存数据、HashMap做映射,感觉自己掌握了。结果处理大量数据时,程序直接卡住,才知道不同集合底层实现差别这么大,增删改查性能也不一样。泛型虽然能避免类型错误,但我写代码经常忘加类型参数,又得花时间改。线程安全的集合更是不敢碰,看着就觉得难。
 
六、异常处理:总是丢三落四
 
异常处理刚开始学觉得挺有趣,以为能解决程序崩溃问题。可实际写代码,我老是忘记在finally块里释放资源,导致程序出各种奇怪的问题。自定义异常更是灾难,不知道该继承哪个类,也不清楚怎么合理抛出,每次写都像在 “瞎蒙”。
 
七、JavaFX:理想很丰满,现实很骨感
 
JavaFX 的界面设计听起来超酷,我想着终于能做个像模像样的软件了!结果GUI作业上做登录界面,光是按钮和文本框的布局就把我搞疯了,VBox和HBox怎么组合都不对,按钮点击事件也老是触发不了。我照着教程写代码,可一运行就报错,不是找不到控件,就是样式错乱。那些高级特性,比如动画和 FXML 绑定,我连看都不敢看,感觉离我太遥远了。而且我真的想说句实在话,你真的指望能在翻转课堂上学到点什么吗,别想了还不是得下来自己下功夫。一想到暑假还要用JavaFX做实训,我就。。。。。。。
 
八、总结:痛并成长着
 
虽然被 Java 折磨得够呛,但回头看看,确实学到了不少东西。现在至少能独立完成一些简单的面向对象程序,也知道怎么用集合处理数据、用异常保证程序稳定。不过还有太多东西没掌握好,特别是那些复杂的技术点,希望下学期学的语言能轻松一点吧。
 
三、踩坑心得

while 循环:写累加条件时总是忘记边界值,比如需要>=0却写成>0,导致少加一个数。

List 遍历:用for-each循环输出 List 时,经常遇到null值,不知道该怎么过滤。直接用if (element != null)判断会报空指针异常,后来才知道要先检查 List 是否为null,再遍历元素。

浮点数格式化:在计算商品折扣时,我直接return String.format("%.2f", price * discount),以为返回的还是double,结果编译报错。正确做法是先计算折扣后的值,最后在输出时格式化

抽象方法复写:父类定义了抽象方法,子类忘记复写,编译报错。比如:

方法重写规则:重写方法时缩小访问权限,比如父类方法是public,子类写成private,导致编译失败。

ArrayList 越界:用list.get(index)时不检查索引范围,导致IndexOutOfBoundsException

HashMap 键重复:以为相同内容的对象作为键会覆盖值,结果没有重写hashCode()equals(),导致键重复存储。

空指针异常:调用null对象的方法,比如:

捕获异常后不处理:catch块里只写e.printStackTrace(),不解决问题,导致程序后续逻辑混乱。

电梯调度算法:实验课写电梯模拟程序,不知道如何设计状态转换逻辑,坐在电脑前 3 小时写不出一行代码。后来发现要先画流程图,再分状态实现。

递归爆栈:写递归方法时忘记终止条件,导致StackOverflowError,比如:

不会用断点:程序出错时只会加System.out.println打印变量值,不会用 IDE 的调试功能,效率极低。

多线程调试:遇到线程安全问题时完全抓瞎,不知道如何查看线程状态和变量值。

文件读写乱码:读取中文文件时不指定编码,导致乱码,比如:

Scanner 遗留问题:先调用nextInt()再调用nextLine()时,会吞掉换行符,导致输入异常。

四、建议与总结

回望这学期的Java课程,有痛苦也有些许成就感,不可否认的是不知道骂过多少次这个课程,因为因为实在是太难了,写代码是一个复查的情绪过程,这是我的缺点,不过写代码也能学到些东西的。这里我十分的的想提出建议,真的真的Java的任务确实对于我这种资质平庸的学生来说任务确实确实是太重了,导致要花很多时间在Java上,真的没有时间放在其他的课程上了,导致Java死命的学,其他课程根本没有时间去花心思,导致我的数学半期考试都没有考到理想的分数,每次Java又是pta又是实验又是线上课堂又是blog作业又是翻转课堂的每一个任务都会花费我的大量时间,我不是说这些任务不好,我承认这些任务都是对我们的发展起到非常好的锻炼的,但是但是真的真的实在是太多了,感觉有些适得其反了。占了我学习的太多时间,导致分到其他科目的时间真的真的太少了,我总不可能只学Java吧。以上只是经我一学期学习下来的真是感受。我不是在抱怨,我只是在根据我真实的感受发表我的心声。最后感谢老师的悉心教导。展望未来,我深知 Java 的海洋浩瀚无垠,我所掌握的仅是冰山一角。我将持续学习,不断实践,努力在编程的道路上走得更深更远。

posted @ 2025-06-18 19:44  四季抗病毒  阅读(19)  评论(0)    收藏  举报