DevCN
菜单
全部文章快讯开发深度热点

Java 入门:编译学习进度程序并理解数值类型

完成从 Java 源码到类文件再到 JVM 运行的过程,用显式浮点转换计算进度,并让结果不受系统地区设置影响。


本节目标

完成从 Java 源码到类文件再到 JVM 运行的过程,用显式浮点转换计算进度,并让结果不受系统地区设置影响。

环境与运行方法

准备 JDK 21。保存为 Lesson.java,执行 javac -Xlint:all Lesson.java,再执行 java Lesson。文件名与 public 类名一致,运行时使用类名而不是 .class 文件名。

核心思路

整数适合计数,直接整数相除却会截断小数。先转成 double 再计算比例。格式化使用 Locale.ROOT,让示例小数点保持确定,便于跨电脑比较输出。

完整示例

import java.util.Locale;
public class Lesson {
    public static void main(String[] args) {
        int completed = 3;
        int total = 8;
        if (total <= 0) throw new IllegalArgumentException("total must be positive");
        double percent = (double) completed / total * 100;
        System.out.printf(Locale.ROOT, "progress=%.1f%%%n", percent);
    }
}

预期输出

progress=37.5%

逐步理解

javac 生成字节码,java 启动 JVM 并调用 main。String[] args 接收命令行参数,本例没有读取它。格式字符串中的 %% 表示百分号,%n 生成平台换行。

修改源码后必须重新编译,不能一直运行旧类文件。double 足以演示比例,但需要精确十进制规则的金额应采用专门设计。编译成功只证明满足部分语法和类型约束,业务规则还需测试。

常见问题与边界

  • public 类名与文件名大小写要一致。
  • 转换整个整数除法结果已经太晚。
  • 格式说明符与参数类型不符可能在运行时失败。

动手练习

把完成量改成 5,再单独让总量为零。

参考答案

5/8 显示 62.5%。总量为零时提前抛出异常,不执行除法。正式界面应在调用边界把异常转换成适合用户的提示。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。