Java 没有像脚本语言那样的全局内置函数——对应物是 java.lang 与 java.util 的核心类库。本篇按「每个类一词条」覆盖最常用的 API。
1. Object – 万物基类
描述
equals/hashCode/toString 契约:equals 相等则 hashCode 必须相等(HashMap 依赖)。
语法和示例
class Money {
final int cents;
Money(int c) { cents = c; }
@Override public boolean equals(Object o) {
return o instanceof Money m && m.cents == cents;
}
@Override public int hashCode() { return Integer.hashCode(cents); }
}2. String – 不可变字符串
描述
字面量进池;+ 在循环里慢(每轮新建 StringBuilder);常用方法速记。
语法和示例
String s = "Hello";
s.length(); s.isEmpty(); s.isBlank(); // isBlank 认全空白(11+)
s.charAt(0); s.indexOf("ell"); s.contains("ll");
s.substring(1, 3); s.replace("l", "L");
"a,b,c".split(","); String.join("-", "a", "b");
s.strip(); s.repeat(3); s.lines().count(); // 11+
" x ".stripLeading(); "Ab".toLowerCase();
s.compareTo("Hello") == 0; // 比较内容,别用 ==
// 判等永远 equals;大量拼接:
var sb = new StringBuilder();
for (var w : words) sb.append(w).append(',');3. StringBuilder / StringBuffer
描述
可变字符串;Buffer 线程安全但慢——单线程永远 Builder。
语法和示例
var sb = new StringBuilder(64); // 预估容量避免扩容
sb.append("a").append(1).appendln(); // 链式
sb.insert(0, "前").deleteCharAt(0);
sb.reverse(); sb.setLength(0); // 复用清空4. Integer / Long / Double – 包装类
描述
parseInt/parseLong/valueOf;缓存 -128~127;自动装箱在循环里费内存。
语法和示例
Integer.parseInt("42");
Integer.parseInt("ff", 16); // 255
Integer.valueOf("42"); // 返回包装(可能命中缓存)
Integer.compare(a, b); // -1/0/1,避免 a-b 溢出
Integer.MAX_VALUE; Integer.toBinaryString(255);
Double.isNaN(x); Double.compare(0.1, 0.2);
// int ↔ String:String.valueOf(42)、Integer.parseInt(s)5. Math – 数学
描述
全静态;floorDiv/floorMod 处理负数;addExact 溢出检测。
语法和示例
Math.abs(-3); Math.max(1, 2); Math.min(3L, 4L);
Math.floor(1.8); Math.ceil(1.2); Math.round(1.5); // round 银行家舍入 2.5→2
Math.pow(2, 10); Math.sqrt(16); Math.hypot(3, 4); // 5.0
Math.floorDiv(-7, 2); // -4(向下取整除)
Math.floorMod(-7, 2); // 1(符号跟除数)
Math.addExact(Integer.MAX_VALUE, 1); // 抛异常而非回绕
Math.random(); // [0,1),要范围用 Random/ThreadLocalRandom6. Arrays – 数组工具
描述
排序/填充/拷贝/转字符串;二分查找前必须有序。
语法和示例
int[] a = {3, 1, 2};
Arrays.sort(a);
Arrays.toString(a); // [1, 2, 3]
Arrays.binarySearch(a, 2); // 需先排序
Arrays.copyOf(a, 5); Arrays.copyOfRange(a, 0, 2);
Arrays.fill(a, 0); Arrays.equals(a, b);
int[][] g = new int[3][4];
Arrays.stream(a).sum(); // 桥接 Stream7. Collections – 集合工具
描述
排序/反转/不可变视图;unmodifiableX 是视图不是拷贝。
语法和示例
List<String> l = new ArrayList<>(List.of("b", "a"));
Collections.sort(l);
Collections.reverse(l); Collections.shuffle(l);
Collections.max(l); Collections.frequency(l, "a");
Collections.unmodifiableList(l); // 视图:原表仍可变
Collections.swap(l, 0, 1); Collections.emptyList();8. ArrayList – 动态数组
描述
随机访问 O(1);中间插删 O(n);初始容量 10,扩容 1.5 倍。
语法和示例
var list = new ArrayList<String>(100); // 预估容量
list.add("a"); list.add(0, "head"); // O(n)
list.get(0); list.set(0, "A");
list.remove(0); list.remove("a"); // 两种 remove
list.size(); list.contains("a");
list.isEmpty(); list.clear();
for (String s : list) {} // 增强 for
list.removeIf(s -> s.isEmpty()); // 迭代中删除9. HashMap – 哈希映射
描述
键需正确实现 hashCode/equals;允许一个 null 键;遍历无序。
语法和示例
var m = new HashMap<String, Integer>();
m.put("a", 1); m.get("a"); m.getOrDefault("b", 0);
m.putIfAbsent("c", 3); m.merge("a", 1, Integer::sum); // 计数惯用
m.computeIfAbsent("k", this::load); // 缓存惯用
m.containsKey("a"); m.remove("a");
for (var en : m.entrySet()) { en.getKey(); en.getValue(); }
// LinkedHashMap 保插入序;TreeMap 按键排序10. List.of / Map.of – 不可变工厂(9+)
描述
一行建只读集合;不接受 null;改它抛 UnsupportedOperationException。
语法和示例
List<String> xs = List.of("a", "b");
Map<String, Integer> m = Map.of("go", 1, "php", 2);
Set<Integer> s = Set.of(1, 2, 3);
Map.copyOf(mutable); List.copyOf(list); // 拷贝为不可变11. Optional – 可能缺席
描述
表达「可能没有」的返回值;不当字段/参数;不裸 get()。
语法和示例
Optional<User> u = repo.findById(id);
u.map(User::name).orElse("匿名");
u.orElseThrow(() -> new NotFound(id));
u.ifPresentOrElse(this::show, this::empty);
repo.find(id).or(() -> repo.findBackup(id));12. Stream – 声明式管道
描述
中间操作惰性,终端触发;分组/连接/统计一站完成。
语法和示例
List<String> top = orders.stream()
.filter(o -> o.amount() > 100)
.sorted(Comparator.comparing(Order::amount).reversed())
.limit(5)
.map(Order::customer)
.toList();
Map<String, Long> cnt = orders.stream()
.collect(Collectors.groupingBy(Order::customer, Collectors.counting()));
String joined = words.stream().collect(Collectors.joining(", "));
int total = orders.stream().mapToInt(Order::amount).sum();
boolean any = words.stream().anyMatch(w -> w.isEmpty());
words.stream().distinct().sorted().forEach(System.out::println);13. Comparator – 比较器
描述
comparing 链式;thenComparing 多级;自然序用 naturalOrder。
语法和示例
Comparator<User> byName = Comparator.comparing(User::name);
users.sort(byName.reversed());
users.sort(Comparator.comparing(User::dept)
.thenComparing(User::age, Comparator.reverseOrder()));
Comparator.comparingInt(String::length);14. Iterator / Iterable
描述
hasNext/next 契约;remove 是唯一安全删除;Iterable 即可增强 for。
语法和示例
for (var it = list.iterator(); it.hasNext(); ) {
var x = it.next();
if (stale(x)) it.remove(); // 安全删除
}15. System – 系统入口
描述
out/err/exit/currentTimeMillis/getenv/arraycopy。
语法和示例
System.out.println("x"); // println 自动 flush
System.err.println("错误");
System.currentTimeMillis(); // 毫秒(测耗时用 System.nanoTime)
System.getenv("HOME"); System.getProperty("user.dir");
System.exit(0); // 0 正常
System.arraycopy(src, 0, dst, 0, n);16. Runtime / ProcessBuilder – 进程
描述
exec 系已被 ProcessBuilder 取代;读输出防阻塞。
语法和示例
var pb = new ProcessBuilder("git", "status");
pb.redirectErrorStream(true);
var proc = pb.start();
try (var r = new BufferedReader(
new InputStreamReader(proc.getInputStream()))) {
r.lines().forEach(System.out::println);
}
proc.waitFor(); // 管道不读完可能阻塞——先读后等
Runtime.getRuntime().availableProcessors();17. Exception 层次
描述
Error 不捕;受检必须 throws/catch;RuntimeException 非受检。
语法和示例
Throwable
├─ Error(OutOfMemoryError 等:不该捕)
└─ Exception
├─ RuntimeException(NPE/IllegalArgument/IndexOutOfBounds:可不声明)
└─ 其他(IOException/SQLException:必须 catch 或 throws)
// 自定义:业务异常继承 RuntimeException18. Objects – 空安全工具
描述
requireNonNull 快速校验;isNull/nonNull 可作方法引用。
语法和示例
Objects.requireNonNull(user, "user 必填");
Objects.requireNonNullElse(input, "默认");
Objects.requireNonNullElseGet(x, () -> make());
Objects.equals(a, b); // null 安全比较
Objects.hash(a, b); // null 安全 hash19. java.time – 日期时间
描述
不可变;LocalDateTime 无时区、Instant 是 UTC 点;格式化走 DateTimeFormatter。
语法和示例
LocalDate d = LocalDate.of(2026, 10, 29);
LocalTime t = LocalTime.of(15, 30);
LocalDateTime dt = LocalDateTime.of(d, t);
Instant now = Instant.now(); // 存库/比较用
ZonedDateTime z = dt.atZone(ZoneId.of("Asia/Shanghai"));
d.plusDays(7).minusMonths(1);
Duration.between(t, t2).toMinutes(); // 时分秒量
Period.between(d1, d2).getDays(); // 年月日量
dt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
LocalDate.parse("2026-10-29"); // ISO 默认
d.isBefore(e); d.isEqual(e);20. BigInteger / BigDecimal – 大数与精确小数
描述
BigInteger 任意精度整数;BigDecimal 算钱;都不可变。
语法和示例
var big = new BigInteger("99999999999999999999");
big.add(BigInteger.ONE).multiply(BigInteger.TWO);
var price = new BigDecimal("19.99"); // 字符串构造!
price.add(new BigDecimal("0.01"))
.multiply(BigDecimal.valueOf(3))
.setScale(2, RoundingMode.HALF_UP);
price.compareTo(other) < 0; // equals 连 scale 一起比21. Random / ThreadLocalRandom
描述
Random 全局可竞争;并发用 ThreadLocalRandom。
语法和示例
var r = new java.util.Random(42); // 种子可复现
r.nextInt(100); r.nextBoolean(); r.nextDouble();
var tr = java.util.concurrent.ThreadLocalRandom.current();
tr.nextInt(1, 101); // 并发场景22. Record 速记(16+)
描述
数据载体一行声明;紧凑构造器校验;可加静态工厂。
语法和示例
record Range(int lo, int hi) {
Range { // 紧凑构造器
if (lo > hi) throw new IllegalArgumentException();
}
static Range of(int lo, int hi) { return new Range(lo, hi); }
}