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%。总量为零时提前抛出异常,不执行除法。正式界面应在调用边界把异常转换成适合用户的提示。
文章回复
0 条公开回复