java边界检查需用if等主动拦截非法值:检查int年龄范围、防整数溢出、char unicode区间、浮点精度误差、数组/集合索引越界,避免依赖运行时异常。

Java 中流程控制与基本数据类型结合做边界检查,核心是用条件语句主动拦截非法值,而不是依赖运行时异常“被动兜底”。因为基本类型本身不带校验逻辑,必须靠 if、switch 或循环中的判断来提前识别越界、溢出、精度丢失等风险。
用 if 判断基本类型的取值范围
每个基本类型都有明确的上下限,声明变量后不能直接信任输入值。比如接收用户输入的年龄,用 int 声明很自然,但年龄不可能是负数或超过 150:
- 先读入原始值(如 Scanner.nextInt()),再立刻用 if 检查是否在合理区间内
- 对 byte、short、int、long,重点防 上溢 和 下溢:比如两个大 int 相加前,可先判断 a > Integer.MAX_VALUE - b
- 对 char,检查是否落在有效 Unicode 范围('\u0000' 到 '\uffff'),避免非法控制字符
处理浮点数精度导致的隐性越界
float 和 double 无法精确表示很多十进制小数(如 0.1),做范围比较时容易误判。例如判断价格是否小于 100.0,直接写 price
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 用 BigDecimal 替代 float/double 处理货币、账务等敏感场景
- 若必须用 double,比较时引入误差容忍值:Math.abs(price - 100.0)
- 避免用 == 判断浮点数相等,改用区间判断
在 switch 中防范 null 和非法值
switch 表达式本身不接受 null,一旦传入会直接抛 NullPointerException,根本走不到 default 分支:
- 对可能为 null 的引用类型(如 String、Integer),必须在 switch 前显式判空
- 对基本类型包装类(如 Integer),注意自动拆箱可能触发 NullPointerException
- 对枚举或固定字符串输入,用 default 分支覆盖未定义值,但前提是表达式本身非 null
数组和集合操作中结合索引类型做双重校验
数组下标必须是 int,且需满足 0 ≤ index
- 用 for 循环遍历时,把 i
- 接收外部传入的索引参数时,立即用 if (index = arr.length) 抛 IllegalArgumentException
- 对 List.get(i),同样要先 checkIndex(i, list.size()),不要指望 get() 的异常信息足够友好
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










