05-常用 API(基础篇)
对应原始资料:
day06-常用API、day07-常用API
一、Math
java.lang.Math,工具方法全是 static。
java
Math.abs(-5); // 5
Math.ceil(3.1); // 4.0 向上取整
Math.floor(3.9); // 3.0 向下取整
Math.round(3.5); // 4 四舍五入
Math.max(3, 5); // 5
Math.min(3, 5); // 3
Math.pow(2, 10); // 1024.0
Math.random(); // [0.0, 1.0)获取 1~n 的随机整数:(int)(Math.random() * n) + 1
二、System
java
System.currentTimeMillis(); // 当前时间毫秒数,常用于计时
System.exit(0); // 退出 JVM
System.arraycopy(src, 2, dest, 0, 3); // 数组拷贝三、Object 类
所有类的根类。
| 方法 | 说明 |
|---|---|
toString() | 返回对象的字符串表示,建议重写为"对象的字段值" |
equals(Object) | 比较是否相等,默认比较地址,建议重写为"比较字段值" |
getClass() | 返回运行时类对象 |
java
// 重写 equals 示例(IDEA 可自动生成)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student s = (Student) o;
return age == s.age && Objects.equals(name, s.name);
}四、Objects(JDK 7+)
java.util.Objects 工具类,空指针安全:
java
Objects.equals(a, b); // a 为 null 也不报错
Objects.isNull(a);
Objects.nonNull(a);五、BigDecimal(精确计算)
解决 double / float 精度丢失问题(金额计算必用)。
java
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
b1.add(b2); // 0.3 加
b1.subtract(b2); // 减
b1.multiply(b2); // 乘
b1.divide(b2); // 除
b1.divide(b2, 2, RoundingMode.HALF_UP); // 除不尽必须指定精度,否则抛异常重点:用
String构造方法创建 BigDecimal 才精确。
六、包装类
每种基本类型对应一个包装类(int→Integer、char→Character,其余首字母大写)。
1. 自动装箱/拆箱(JDK 5+)
java
Integer i = 10; // 自动装箱 Integer.valueOf(10)
int a = i; // 自动拆箱 i.intValue()2. 基本类型与字符串互转
java
// 基本类型 → String
String s1 = 10 + ""; // "10"
String s2 = String.valueOf(10);
// String → 基本类型
int n = Integer.parseInt("123");
double d = Double.parseDouble("3.14");3. Integer 缓存陷阱
java
Integer a = 127, b = 127;
System.out.println(a == b); // true (-128~127 缓存)
Integer c = 128, d = 128;
System.out.println(c == d); // false 超出缓存范围
// 比较包装类一律用 equals()七、String 类(重点)
java.lang.String:不可变字符串(final 修饰),底层是 final byte[]。
1. 创建
java
String s1 = "abc"; // 字符串常量池
String s2 = new String("abc"); // 堆中新对象
String s3 = new String(byte[]); // 字节数组
String s4 = new String(char[]); // 字符数组2. == 与 equals
==比较地址,equals比较内容。- 字面量方式创建的字符串在常量池中,相同字面量共享。
3. 常用方法
java
s.length() // 长度
s.charAt(i) // 第 i 个字符
s.indexOf("ab") // 子串首次出现索引,找不到返回 -1
s.substring(2) // 从索引 2 到结尾
s.substring(2, 5) // [2, 5)
s.toUpperCase() / s.toLowerCase()
s.replace("a", "A") // 替换
s.trim() // 去两端空格
s.split(",") // 按分隔符切分,返回 String[]
s.toCharArray() // 转字符数组
s.getBytes() // 转字节数组
s.concat("def") // 拼接
s.compareTo("abc") // 按字典序比较4. StringBuilder(可变字符串)
- String 拼接大量字符串效率低(每次新建对象)。
StringBuilder是可变的字符序列,提升拼接效率。
java
StringBuilder sb = new StringBuilder();
sb.append("hello").append(" ").append("world");
sb.reverse(); // 反转
sb.length();
String result = sb.toString(); // 转回 String字符串拼接原理:JDK 8 中,
+拼接在底层会被优化为 StringBuilder。但在循环中拼接时,必须手动用 StringBuilder,否则每次循环都会 new 一个。
八、Date 与 SimpleDateFormat(基础用法)
java
Date d = new Date(); // 当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d); // 格式化
Date d2 = sdf.parse("2024-01-01 12:00:00"); // 解析进阶模块会介绍 JDK 8 的
LocalDate/LocalDateTime(更现代、线程安全)。
练习建议
- 用
Math实现:猜数字、随机生成验证码。 - 用
BigDecimal完成0.1 + 0.2,对比double的结果。 - 统计字符串中字母、数字、空格的个数。
- 用
StringBuilder反转字符串、判断回文。 - 用
String.split解析 CSV 行。