Day8
复习Java方法:原来“偷懒”和“梳理”才是核心
翻完王建民老师那版“方法”PPT时,手边的笔在笔记本上记了满满两页——原本以为“方法”只是“写个函数封装代码”,这次复习才发现,从李冰“积薪烧石”的思路到递归、大数字处理的细节,藏着的全是“怎么更高效解决问题”的门道。
最有意思的是开头“懒人造就方法”的例子。PPT里拿愚公凿石和李冰烧石对比,之前看只觉得是个故事,现在回头想自己写代码的经历,突然有了共鸣:刚学Java时,算个平方、生成随机数都要重复写好几行,明明能封装成方法,却宁愿复制粘贴——这不就是“愚公式”的勤快吗?复习到自定义方法那部分,翻出之前写的SquareInt.java代码,当时只按语法写了static int square(int x)
,现在再看,才懂把重复逻辑抽成方法,不只是省代码,更是让后续改bug、加功能时能“精准定位”,就像李冰找到“烧石”的巧劲,比硬凿省力多了。
中间复习到递归和大数字处理时,还补上了之前的知识漏洞。算n!的例子,之前用递归写过代码,却没注意到int类型会溢出——PPT里那个“阶乘算出负数”的bug,我之前还真踩过!这次跟着复习BigInteger的用法,把calculateN2
方法里的int换成BigInteger.valueOf(n).multiply(...)
,再跑代码,终于能正确算出大的阶乘值。还有递归和递推的对比,之前总觉得递归“优雅”就乱用,现在才明白,算简单的n!用递推循环更省内存,复杂的问题(比如树形结构遍历)用递归更清晰,得根据场景选,不能只看表面。
可变参数和方法重载也是这次复习的重点。PPT里max(double ... values)
的例子,之前没深究“编译器隐含创建数组”这件事,今天特意写了段代码调试,发现传max(1,11,300)
时,底层其实是把参数存成了double数组——难怪可变参数要放在参数列表最后。还有方法重载,看了square(int x)
和square(double y)
的例子,再去查System.out.println()的源码,原来它有十几种重载形式,分别对应不同类型的参数,难怪不管传int、String还是double都能打印,这种“同一方法名适配不同场景”的设计,比写一堆不同名的方法清爽太多。
最后翻到课后作业里的“四则运算程序”,突然有了新想法:之前想生成30道题,只会用循环硬写,现在复习完方法,能拆成“生成不重复题目”“判断对错”“倒计时”三个方法,甚至能用方法重载处理加减乘除不同逻辑。看来这次复习不只是“回顾旧知识”,更是把之前零散的语法串成了“能解决实际问题”的思路。
接下来打算按PPT要求,把动手动脑的问题整理成博客,再试着把四则运算程序优化一下——毕竟学方法的核心,不就是把“会的知识”用得更巧吗?