Java 中的常用 API
本文介绍了 Java 中常用的 API,包括BigDecimal
、随机数生成、数学运算、系统操作、Runtime
类的使用,以及 Java 8 之后的日期和时间 API。
一、BigDecimal 精确计算
1.1 浮点数精度问题演示
1 2
| System.out.println(1.01 + 2.02);
|
1.2 BigDecimal 基础用法
1 2 3 4 5 6 7 8 9 10 11 12
| BigDecimal one = new BigDecimal("1.01"); BigDecimal two = BigDecimal.valueOf(2.02);
System.out.println(one.add(two)); System.out.println(one.subtract(two)); System.out.println(one.multiply(two));
System.out.println(one.divide(two, RoundingMode.HALF_UP)); System.out.println(one.divide(two, 10, RoundingMode.FLOOR));
|
1.3 精度控制与比较
1 2 3 4 5 6
| BigDecimal value = BigDecimal.valueOf(1.3543242342342); System.out.println(value.setScale(4, RoundingMode.HALF_UP));
System.out.println(value.compareTo(BigDecimal.ZERO));
|
二、安全随机数生成
2.1 基础随机数生成
1 2 3 4 5 6
| int fullRangeInt = ThreadLocalRandom.current().nextInt(); long fullRangeLong = ThreadLocalRandom.current().nextLong();
double unitDouble = ThreadLocalRandom.current().nextDouble();
|
2.2 范围约束生成
1 2 3 4 5 6 7 8 9 10 11 12
| int rangeInt = ThreadLocalRandom.current().nextInt(0, 100);
int closedRange = ThreadLocalRandom.current().nextInt(0, 10 + 1);
double rangeDouble = ThreadLocalRandom.current().nextDouble(0.01, 100.0);
BigDecimal formatted = BigDecimal.valueOf(rangeDouble) .setScale(2, RoundingMode.HALF_UP);
|
三、Math 数学运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| System.out.println(Math.abs(-100)); System.out.println(Math.ceil(4.3)); System.out.println(Math.floor(4.9)); System.out.println(Math.round(3.5));
System.out.println(Math.max(3, 5)); System.out.println(Math.min(2.8, 3));
System.out.println(Math.pow(2, 3)); System.out.println(Math.sqrt(16));
System.out.println(Math.sin(Math.PI / 2)); System.out.println(Math.cos(Math.PI));
System.out.println(Math.random()); System.out.println(Math.log(Math.E)); System.out.println(Math.exp(2));
|
四、System 系统操作
1 2 3 4 5 6 7 8
| System.out.println(System.currentTimeMillis());
System.gc();
System.exit(0);
|
五、Runtime 类
5.1 获取 Runtime 实例
1
| Runtime runtime = Runtime.getRuntime();
|
5.2 执行系统命令
1 2 3 4 5 6 7
| try { Process process = runtime.exec("calc.exe"); process.waitFor(); } catch (Exception e) { e.printStackTrace(); }
|
5.3 内存管理
1 2 3 4 5 6 7 8 9 10 11
| long freeMem = runtime.freeMemory(); System.out.println("Free Memory: " + freeMem / 1024 / 1024 + " MB");
long totalMem = runtime.totalMemory(); System.out.println("Total Memory: " + totalMem / 1024 / 1024 + " MB");
long maxMem = runtime.maxMemory(); System.out.println("Max Memory: " + maxMem / 1024 / 1024 + " MB");
|
5.4 注册关闭钩子
1 2 3
| runtime.addShutdownHook(new Thread(() -> { System.out.println("JVM is shutting down, cleanup here..."); }));
|
六、Java 8 日期和时间 API
6.1 LocalDate 表示日期(年 月 日)
1 2 3 4 5 6 7
| LocalDate localDate = LocalDate.now(); System.out.println(localDate); System.out.println(localDate.getYear()); System.out.println(localDate.getMonth()); System.out.println(localDate.getDayOfMonth()); System.out.println(localDate.getDayOfWeek().getValue());
|
6.2 LocalTime 表示时间(时 分 秒)
1 2 3 4 5 6 7 8 9 10 11
| LocalTime localTime = LocalTime.now();
System.out.println(localTime);
System.out.println("Hour: " + localTime.getHour()); System.out.println("Minute: " + localTime.getMinute()); System.out.println("Second: " + localTime.getSecond()); System.out.println("Nano: " + localTime.getNano());
|
6.3 LocalDateTime 表示日期和时间(年 月 日 时 分 秒)
1 2 3 4
| LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("完整日期时间: " + localDateTime);
|
6.4 ZoneId 带时区
1 2 3
| Set<String> zoneIds = ZoneId.getAvailableZoneIds(); System.out.println("可用时区数量: " + zoneIds.size());
|
以下是关于地理坐标系统中 经线(经度) 和 纬线(纬度) 的基础知识补充:
6.4.1 经线(经度)
- 定义:地球表面连接南北极的虚拟线,表示东西方向的位置。
- 分类:
- 东经(E, East):从本初子午线(0°)向东至 180°,范围
0° ≤ 东经 < 180°
示例:北京位于东经约 116.4°。
- 西经(W, West):从本初子午线向西至 180°,范围
0° ≤ 西经 < 180°
示例:纽约位于西经约 74.0°。
6.4.2 纬线(纬度)
- 定义:地球表面与赤道平行的虚拟线,表示南北方向的位置。
- 分类:
- 北纬(N, North):从赤道(0°)向北至北极点(90°N),范围
0° ≤ 北纬 ≤ 90°
示例:上海位于北纬约 31.2°。
- 南纬(S, South):从赤道向南至南极点(90°S),范围
0° ≤ 南纬 ≤ 90°
示例:悉尼位于南纬约 33.9°。
6.4.3 经纬度与时间的关系
- 时区划分依据:经线是划分时区的主要参考(每 15° 经度对应 1 小时时差)。
- 示例:
- 东经 120° 对应中国标准时间(UTC+8)。
- 西经 97° 对应美国中部时间(UTC-6)。
6.5 Instant 时间戳
1 2 3 4
| Instant instant = Instant.now(); System.out.println("当前时间戳: " + instant);
|
1 2 3 4 5 6
| LocalDateTime now = LocalDateTime.now();
String formatted = now.format(DateTimeFormatter.ISO_DATE_TIME); System.out.println("ISO 格式输出: " + formatted);
|
附录
参考链接
- Java 官方文档