学习前提

理解方法返回值、类型转换和集合操作。

本课完成后你能做什么

区分格式错误、范围错误和程序缺陷。

先理解机制

外部字符串不能直接视为整数。先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。

进一步阅读