Java 核心类库详解

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/ThreadLocalRandom

6. 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();                // 桥接 Stream

7. 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)
// 自定义:业务异常继承 RuntimeException

18. 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 安全 hash

19. 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); }
}
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇