学习前提
理解方法返回值、类型转换和集合操作。
本课完成后你能做什么
区分格式错误、范围错误和程序缺陷。
先理解机制
外部字符串不能直接视为整数。先trim,再parseInt处理格式,最后检查业务范围;"25"是合法格式,但"999"仍可能超出允许范围。
NumberFormatException属于IllegalArgumentException的子类。本例parseMinutes将格式和范围错误都作为非法输入暴露给调用层,调用层按行反馈并继续处理下一条。
只把可能失败的单次转换放进try。捕获Exception会把无关缺陷也伪装成用户错误。错误信息在这里固定为invalid,真实界面可进一步区分原因。
可运行示例
使用JDK 21。将代码保存为Main.java,在独立练习目录执行 javac -encoding UTF-8 Main.java,再执行 java Main。每章独立运行,不把多个public Main类放进同一文件。
public class Main {
static int parseMinutes(String raw) {
if (raw == null) throw new IllegalArgumentException("missing value");
int value = Integer.parseInt(raw.trim());
if (value < 0 || value > 240) throw new IllegalArgumentException("range");
return value;
}
public static void main(String[] args) {
for (String raw : new String[] {"25", " 0 ", "2.5", "-1", "999"}) {
try { System.out.println("ok=" + parseMinutes(raw)); }
catch (IllegalArgumentException e) { System.out.println("invalid"); }
}
}
}
推演与验证
25和0通过,2.5格式错误,-1和999范围错误,共三行invalid。
常见错误与边界
空白不是0;超出int表示范围的数字同样解析失败。不要用默认0悄悄掩盖所有错误,否则无法区分真正的零时长。
动手练习
增加空字符串、null、240和241四个测试输入。
参考解法与理由
前两项invalid,240输出ok=240,241为invalid。边界包含240,条件应为>240而不是>=240。