第三次blog作业
前言
• PTA作业:都是编程题,主要练的就是基础语法,比如循环、条件判断,或者简单的排序、查找算法。每次就布置两三道题,大部分题目半小时内就能搞定。偶尔会遇到那种藏着小陷阱的题,比如边界条件没考虑到,但网上搜搜资料、翻翻笔记,最多花个把小时也能搞明白,特别适合用来巩固上课学的编程知识。
• 实验:实验室的操作步骤都印在实验指导书里,照着一步步做就行,比如调试设备、录入数据,基本不会手忙脚乱。不过做完实验后写报告比较麻烦,要按学校要求的格式写,数据图表都得弄规范。难就难在分析实验结果,得搞懂实验背后的原理,才能说清楚为啥数据是这样,动手操作倒没什么难度。
• 线上课程:一节课视频也就40分钟左右,中间还会穿插些小动画或者案例,不会让人看得打瞌睡。每节课后都会配点练习题,帮你巩固知识点。老师讲课思路很清晰,重点内容还会用不同颜色标出来,或者反复强调。要是有没听懂的,随时暂停倒回去重看,课后复习翻翻课件、刷几道题,压力真不大。
• 线下课程:老师上课节奏把握得挺好,不会一股脑塞太多知识点,中间还会时不时提问,让大家跟着思考。每节课后可能就留一两个小作业,或者小组讨论个小话题,在课堂上就能完成大半。只要上课认真听,下课花十几分钟整理下笔记,知识点都能理解,不用熬夜死磕。
面对对象设计技术总结
1. 封装
学习收获:现在算是搞懂了封装到底是咋回事。说白了,就是把数据和方法都打包放在一个类里,然后用访问修饰符当“门卫”,像 private 就是私密信息,外人不能随便看; public 就是公开的,谁都能访问。在PTA作业里做学生管理功能时,我把学生的成绩、姓名这些属性都设成 private ,想修改得通过专门的方法,这下就不怕别人瞎改数据,导致程序出错了。
认知:封装真是面向对象编程的基础操作,有了它,代码就像一个个整齐的小仓库,想用啥直接找对应仓库拿就行,结构特别清晰。以后写代码,肯定得养成用封装的习惯,这样写出来的代码不仅看着舒服,改起来也方便。
欠缺:但遇到复杂的业务需求就有点懵。有时候把不该藏的东西藏得太深,导致调用起来特别麻烦;有时候又藏得不够,让数据暴露在外,安全性没保障。到底该把哪些东西封装起来,封装到什么程度,还得再多练练。
2. 继承
学习收获: extends 关键字简直是个“偷懒神器”!有了它,子类能直接用父类的属性和方法,不用重复写代码。做实验设计动物类时,我把“进食”“移动”这些动物都有的行为写在父类里,“猫”“狗”这些子类直接继承过来,再单独写自己特有的行为,比如猫会“抓老鼠”,狗会“看家”,效率高多了。
认知:继承说白了就是“is - a”的关系,猫是动物,狗也是动物。不过继承也不能乱用,要是继承的层级太多,子类和父类的关系就变得特别复杂,牵一发而动全身,改代码时容易出问题。
欠缺:构造方法调用的先后顺序老是记混,有时候子类初始化完了,父类还没初始化好。还有方法重写,明明看着代码差不多,就是报错,后来才发现是权限修饰符或者返回值类型不对,这块还得找时间专门研究研究。
3. 多态
学习收获:多态就像一个“百变高手”,同样的操作,不同的对象干起来不一样。在PTA画图形的题目里,我定义了一个“Shape”父类,“Circle”和“Rectangle”是子类,用父类的引用去调用绘图方法,结果圆画出来是圆,长方形画出来是长方形,特别神奇。
认知:多态让代码变得超灵活,以后要是想添加新的图形,直接写个新子类就行,不用改原来的代码。不过得搭配抽象类或者接口用,才能把多态的优势发挥到最大。
欠缺:在实际项目里,工厂模式、策略模式这些需要用多态的地方,我还是搞不太明白。有时候明明感觉能用多态解决问题,但就是不知道从哪儿下手,还得多看看别人的代码案例。
4. 抽象类与接口
学习收获:以前总把抽象类和接口搞混,现在终于分清了。抽象类里既能有没写完的抽象方法,也能有写好的具体方法;接口里全是没实现的抽象方法。做交通工具实验时,我用抽象类定义了“行驶”这种抽象方法,用接口定义了“可充电”这种行为,不同的子类按照要求实现,特别方便。
认知:抽象类适合有共同代码实现的情况,接口更适合定义一些行为规范。把它们搭配起来用,代码之间的依赖关系就没那么强了,改起来也容易。
欠缺:接口里的默认方法和静态方法到底啥时候用,我到现在也没整明白。有时候该用接口的地方用成了抽象类,设计出来的代码特别别扭。
5. 集合框架
学习收获:现在List、Set、Map这些集合我都能熟练用了。ArrayList像个能自动扩容的大口袋,存学生信息特别方便;HashMap就像个智能小账本,用学号当“账本页码”,一翻就能找到对应的学生信息。在PTA做题时,用对集合能省好多事儿。
认知:集合框架处理数据的效率太高了!不过不同集合的底层原理差别很大,比如ArrayList用数组实现,HashMap用哈希算法。搞懂这些原理,在处理大量数据时,就能选到最适合的集合,让程序跑得更快。
欠缺:泛型用起来还是有点费劲,经常因为类型不匹配报错。而且对多线程环境下能用的ConcurrentHashMap了解太少,要是遇到需要处理多线程数据的情况,估计得抓瞎。
6. 异常处理
学习收获:try - catch - finally这套组合拳太有用了!在做文件读取实验时,用try - catch把可能出错的代码包起来,捕获到IOException后,程序不会直接崩溃,还能给出提示。遇到特殊的业务错误,我还自定义了异常类,比如输入参数不对就抛出InvalidInputException,特别方便定位问题。
认知:有了异常处理,程序就像穿上了“防弹衣”,遇到意外情况也能正常运行。不过异常处理也不能乱用,得按照规范来,不然反而会把代码搞得一团糟。
欠缺:异常链这块基本没用过,有时候程序报错了,只知道最后一步出问题,前面哪出错了根本找不到,感觉错过了一个“查错神器”。
7. JavaFX
学习收获:JavaFX做界面可太有意思了!Button按钮、TextField文本框这些控件,还有BorderPane、VBox这些布局方式,我都能熟练用了。做学生信息管理系统实验时,用JavaFX做出来的界面比命令行好看太多了,操作也方便。
认知:和老掉牙的Swing比起来,JavaFX简直是“高富帅”,做动画、改样式都超简单,特别适合开发桌面应用。
欠缺:处理按钮点击、输入框内容变化这些事件时,我老是搞不懂事件传递的逻辑。遇到复杂的界面交互,比如多个控件联动,写出来的代码乱七八糟。FXML文件感觉特别方便,但我就是用不明白,还得慢慢摸索。
这门课学下来收获特别大,以前对面向对象编程只是一知半解,现在总算把封装、继承这些核心概念吃透了。就像搭积木一样,用封装把数据和功能打包,继承能直接复用现成的“积木块”,多态让同样的操作能玩出不同花样。写代码的时候,这些概念都能顺手用起来,不像刚开始学的时候那么手忙脚乱了。
异常处理这块,我算是从“小白”成长了不少。刚开始写代码,经常被突然冒出来的报错搞得头疼,特别是受检异常,总忘加try - catch。现在至少能提前预判一些常见错误,像文件读取失败、参数输错这些,都能做基本的处理,程序没那么容易“崩溃”了。不过遇到复杂的业务场景,自定义异常该怎么设计,还是有点摸不着头脑。
编程解决问题的能力也进步了不少。以前碰到复杂的需求就发懵,现在学会把大问题拆成一个个小任务,先画个流程图理清楚思路,再去查资料、问同学,解决起来心里更有底了。
但也发现自己不少短板。理论这块,设计模式和泛型这些高级知识点,只停留在知道概念的层面,实际用起来还是很生疏。动手做项目的时候,问题更明显,代码该怎么分层、怎么拆成独立模块,总是规划不好,写出来的代码又乱又难改。时间安排上也不合理,一碰到难啃的问题就死磕,结果后面的任务只能熬夜赶工,还影响了整体质量。
Java学习踩坑与成长总结
在Java学习过程中,我遇到过不少因基础不扎实导致的问题。语法层面,常因疏忽细节出错:比如多次忽略封装特性,直接在类外调用 private 修饰的成员变量,导致编译报错;在 for 循环中直接修改集合元素,触发 ConcurrentModificationException 异常。后来通过反复查阅官方文档,编写大量测试代码验证规则,才逐渐减少这类错误。
算法实践上也走过弯路。在PTA的电梯模拟题中,由于对电梯运行逻辑分析不足,最初设计的算法存在缺陷,无法满足实际运行要求。我通过绘制状态转换图,逐步梳理不同状态下的运行逻辑,结合实际场景反复调试,才优化了算法。
面向对象编程方面,也有过教训。使用继承和多态时,曾错误地尝试用父类引用调用子类特有方法,违背了多态原则;在实现抽象类和接口时,偶尔遗漏抽象方法的重写,导致程序无法正常运行。这些经历让我意识到,理清类与类之间的关系,准确把握语法规则和设计原则,是写出可靠代码的关键。通过不断总结和练习,我的编程能力也在逐步提升。
浙公网安备 33010602011771号