Day 7
Java 复习日:把散落的知识点串成线
原本计划今天学新的 Servlet 知识,翻书时却发现上周整理的实验文档和验证码代码里,还有不少 “似懂非懂” 的角落 —— 索性停下来复盘,没想到这一天的复习,竟把之前零散的知识点织成了小网。
最先啃的是实验文档里的 “硬骨头”—— 二进制补码和浮点数精度。之前整理结论时只记了 “Java 用补码存整数”,今天重新跑 BitCodeTest.java,盯着控制台里 - 5 的二进制串 “11111111111111111111111111111011”,突然反应过来:难怪之前算~5 得到 - 6,原来取反是对补码每一位操作,再转成十进制时要考虑符号位。接着又翻出 TestBigDecimal.java,故意把构造参数换成 double 类型,果然重现了精度误差,这下才彻底记住 “必须用字符串初始化 BigDecimal” 的原因 —— 不是语法规定,是为了避开 double 本身的存储误差。
复习到枚举类型时,意外和之前写的验证码程序串上了。看着文档里 “枚举值是单例对象” 的结论,突然想:如果把验证码的字符类型(大写、小写、数字)做成枚举,是不是比直接写字符串常量更清晰?随手改了段代码,用CodeType.UPPER_CASE.getValue()替代原来的字符集片段,不仅代码可读性高了,还避免了手敲字符串的拼写错误。原来之前学的基础语法,真的能在实战里找到用武之地。
最后重点过了 JavaWeb 相关的部分。打开验证码项目的 LoginServlet,对着代码画了张流程图:用户请求生成验证码→Servlet 调用 CodeUtil→存 Session→输出图片;用户提交表单→LoginServlet 取 Session 里的验证码→对比输入。画完图才发现,之前卡壳的 “Session 获取不到” 问题,本质是没理清 “请求链路”—— 生成验证码和验证是两次不同的请求,必须确保用的是同一个 Session。再看 web.xml 里的 Servlet 映射,突然明白 “url-pattern” 就是给不同请求找对应的处理类,这和之前学的 “方法调用” 逻辑其实相通,只是场景换成了 Web。
夕阳照在笔记本上的流程图时,突然觉得复习不是 “重复看旧知识”,而是找知识点之间的 “连接线”。之前学枚举时想不到它能优化验证码代码,写 Servlet 时也没关联到二进制补码的底层逻辑,而今天的复盘,让这些孤立的 “点” 终于连成了 “线”。
明天可以带着这些梳理清楚的知识点,继续往下学 Servlet 的请求转发和重定向了 —— 这次应该不会再像之前那样,只知其然不知其所以然了。