怎么用这一页
Java 的标准库很大,java.base 一个模块就有几千个类。这一页不追求完整,只回答三个问题:这个包是干什么的、常用类有哪些、什么时候该想到它。 需要完整 API 时,查官方 Javadoc;需要用法示例时,回到对应章节。
先记住一个事实:java.base 是唯一默认加载的模块,java.lang、java.util、java.io、java.nio.file、java.time、java.net.http、java.util.concurrent 都在里面,不需要 requires。其他模块(如 java.sql、java.logging、jdk.httpserver)在模块化项目里要显式声明,在 classpath 模式下通常由 JDK 提供。
java.lang:语言的地基
java.lang 自动导入,不用 import。
| 类/接口 | 用途 | 备注 |
|---|---|---|
Object | 所有类的根 | equals、hashCode、toString、getClass |
String | 不可变字符串 | 字符串常量池、intern() |
StringBuilder | 可变字符串 | 循环拼接优先用它 |
StringBuffer | 线程安全版 | 只在确实需要同步时用 |
Math | 数学函数 | abs、max、min、round、pow |
System | 标准输入输出、属性、时间 | out、err、getenv、currentTimeMillis |
Runtime | 运行时信息 | version()、availableProcessors()、freeMemory() |
Thread | 线程 | 卷一只用基本 API |
Class | 运行时类信息 | 反射入口 |
Record | record 的父类 | 判断 isRecord() |
Enum | enum 的父类 | name()、ordinal() |
Throwable | 异常根 | getMessage、printStackTrace |
Integer 等 | 包装类 | parseInt、valueOf、MAX_VALUE |
ProcessHandle | 进程信息 | pid()、info() |
Module | 模块信息 | getName()、isNamed() |
java.util:容器与工具
这是日常使用频率最高的包。
集合接口与实现
| 接口 | 实现 | 特点 | 典型场景 |
|---|---|---|---|
List | ArrayList | 数组,随机访问 O(1) | 大多数有序列表 |
LinkedList | 链表,头尾操作 O(1) | 频繁头插/尾插,队列 | |
Set | HashSet | 哈希,无序 | 去重 |
LinkedHashSet | 哈希 + 插入顺序 | 去重且保序 | |
TreeSet | 红黑树,有序 | 需要排序的集合 | |
Map | HashMap | 哈希,无序 | 大多数键值对 |
LinkedHashMap | 哈希 + 插入顺序 | LRU 缓存、保序输出 | |
TreeMap | 红黑树,按 key 排序 | 范围查询、有序遍历 | |
Queue | ArrayDeque | 双端队列 | 栈、队列 |
PriorityQueue | 二叉堆 | 优先队列、Top K | |
Deque | ArrayDeque | 双端队列 | 替代 Stack |
工具类
| 类 | 用途 |
|---|---|
Objects | requireNonNull、equals、hash、toString |
Arrays | 数组排序、查找、复制、转列表 |
Collections | 集合排序、不可变视图、同步包装 |
Optional | 显式表达「可能没有值」 |
Comparator | 自定义排序 |
Random | 随机数 |
Scanner | 简单文本解析(命令行) |
StringJoiner | 拼接字符串 |
UUID | 生成唯一标识 |
BitSet | 位集合 |
EnumSet / EnumMap | 枚举专用集合,性能好 |
List<Book> books = new ArrayList<>();
books.add(new Book("978-7-111-1", "Java 入门"));
Map<String, Book> byIsbn = books.stream()
.collect(Collectors.toMap(Book::isbn, b -> b));
Optional<Book> found = Optional.ofNullable(byIsbn.get("978-7-111-1"));
遗留类
Date、Calendar、Vector、Hashtable、Stack 仍然存在,但新代码不应使用。日期用 java.time,并发集合用 java.util.concurrent,栈用 ArrayDeque。
java.util.function:函数式接口
| 接口 | 签名 | 用途 |
|---|---|---|
Function<T,R> | R apply(T t) | 转换 |
BiFunction<T,U,R> | R apply(T t, U u) | 双参数转换 |
Supplier<T> | T get() | 提供值 |
Consumer<T> | void accept(T t) | 消费值 |
Predicate<T> | boolean test(T t) | 判断 |
UnaryOperator<T> | T apply(T t) | 一元运算 |
BinaryOperator<T> | T apply(T a, T b) | 二元运算 |
Runnable | void run() | 无参无返回 |
Function<String, Integer> length = String::length;
Predicate<Book> available = b -> b.status() == LoanStatus.AVAILABLE;
Supplier<List<Book>> empty = ArrayList::new;
基本类型特化版本(IntFunction、ToIntFunction、IntPredicate 等)可以避免装箱,性能敏感时优先用。
java.util.stream:流式处理
| 类 | 用途 |
|---|---|
Stream<T> | 对象流 |
IntStream / LongStream / DoubleStream | 基本类型流,避免装箱 |
Collectors | 收集器工厂:toList、groupingBy、counting、joining |
StreamSupport | 从 Spliterator 构造流 |
Map<String, List<Book>> byAuthor = books.stream()
.collect(Collectors.groupingBy(Book::author));
String titles = books.stream()
.map(Book::title)
.collect(Collectors.joining(",", "《", "》"));
常用终端操作:toList、collect、forEach、count、anyMatch、allMatch、findFirst、reduce、min、max。
java.io:传统 IO
| 类 | 用途 | 备注 |
|---|---|---|
File | 文件路径 | 遗留,新代码用 Path |
InputStream / OutputStream | 字节流 | 二进制 |
Reader / Writer | 字符流 | 文本 |
BufferedReader / BufferedWriter | 缓冲 | 按行读写 |
InputStreamReader / OutputStreamWriter | 字节转字符 | 指定编码 |
PrintWriter | 格式化输出 | 写文本 |
FileInputStream / FileOutputStream | 文件字节流 | 配合缓冲 |
RandomAccessFile | 随机访问 | 大文件定位读写 |
Serializable | 序列化标记接口 | 新项目慎用 |
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream("books.csv"), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
// ...
}
}
新代码优先用 java.nio.file,它更完整、错误信息更清楚。
java.nio.file:现代文件 API
| 类/接口 | 用途 |
|---|---|
Path | 路径抽象,替代 File |
Files | 静态工具:读写、复制、移动、遍历 |
FileSystem | 文件系统 |
WatchService | 监听目录变化 |
StandardWatchEventKinds | 事件类型 |
StandardOpenOption | 打开选项 |
Path dir = Path.of("data");
Files.createDirectories(dir);
Path file = dir.resolve("books.csv");
Files.writeString(file, "isbn,title\n", StandardCharsets.UTF_8);
try (Stream<Path> paths = Files.walk(dir)) {
paths.filter(Files::isRegularFile).forEach(System.out::println);
}
java.nio.charset.StandardCharsets 提供 UTF_8、US_ASCII、ISO_8859_1 等常量。凡是跨进程边界,显式指定编码。
java.time:日期与时间
| 类 | 表示 | 用途 |
|---|---|---|
LocalDate | 日期 | 借期、生日 |
LocalTime | 时间 | 营业时间 |
LocalDateTime | 日期 + 时间 | 本地时间戳 |
Instant | UTC 瞬间 | 日志、事件时间 |
ZonedDateTime | 带时区 | 跨时区业务 |
OffsetDateTime | 带偏移量 | API 交换 |
Duration | 时间量 | 超时、耗时 |
Period | 日期量 | 借期天数 |
ZoneId | 时区 | Asia/Shanghai |
DateTimeFormatter | 格式化 | 解析/输出 |
Clock | 时钟 | 测试中替换时间 |
LocalDate today = LocalDate.now();
LocalDate due = today.plusDays(14);
boolean overdue = LocalDate.now().isAfter(due);
DateTimeFormatter fmt = DateTimeFormatter.ISO_LOCAL_DATE;
String text = due.format(fmt);
java.math:大数
| 类 | 用途 |
|---|---|
BigInteger | 任意精度整数 |
BigDecimal | 任意精度十进制,金额计算 |
MathContext | 精度与舍入上下文 |
RoundingMode | 舍入模式 |
BigDecimal price = new BigDecimal("39.90");
BigDecimal total = price.multiply(new BigDecimal("3"));
BigDecimal rounded = total.setScale(2, RoundingMode.HALF_UP);
金额不要用 double。 0.1 + 0.2 != 0.3 不是 Java 的 bug,是二进制浮点的固有性质。
java.net 与 java.net.http:网络
| 类 | 用途 |
|---|---|
URI | 统一资源标识符 |
URL | 统一资源定位符(遗留) |
InetAddress | IP 地址 |
Socket / ServerSocket | TCP 套接字 |
HttpClient | 现代 HTTP 客户端(11+) |
HttpRequest / HttpResponse | 请求/响应 |
WebSocket | WebSocket 客户端 |
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/api/books"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
HttpClient 支持同步 send 和异步 sendAsync,卷一只用同步版本。
java.util.concurrent:并发
| 类/接口 | 用途 |
|---|---|
ExecutorService | 线程池接口 |
Executors | 线程池工厂 |
ThreadPoolExecutor | 自定义线程池 |
Future / CompletableFuture | 异步结果 |
CountDownLatch | 等待多个任务完成 |
CyclicBarrier | 多线程汇合 |
Semaphore | 限流 |
ConcurrentHashMap | 并发 Map |
CopyOnWriteArrayList | 读多写少列表 |
BlockingQueue | 生产者-消费者 |
AtomicInteger 等 | 原子操作 |
Lock / ReentrantLock | 显式锁 |
TimeUnit | 时间单位 |
try (ExecutorService pool = Executors.newFixedThreadPool(4)) {
Future<Integer> future = pool.submit(() -> 1 + 1);
System.out.println(future.get());
}
卷一只需要知道「有线程池、有 Future、有并发集合」,具体机制在卷三。
java.util.regex:正则
| 类 | 用途 |
|---|---|
Pattern | 编译后的正则 |
Matcher | 匹配操作 |
MatchResult | 匹配结果 |
Pattern isbn = Pattern.compile("^97[89]-\\d-\\d{3}-\\d{5}-\\d$");
boolean valid = isbn.matcher("978-7-111-12345-6").matches();
java.lang.reflect:反射
| 类 | 用途 |
|---|---|
Class<T> | 类信息 |
Method | 方法 |
Field | 字段 |
Constructor<T> | 构造器 |
Modifier | 修饰符判断 |
Proxy / InvocationHandler | 动态代理 |
Parameter | 参数元数据 |
Array | 反射操作数组 |
Class<?> type = Book.class;
for (Method method : type.getDeclaredMethods()) {
System.out.println(method.getName());
}
反射是框架的基础,但性能低于直接调用,且会破坏封装。卷三展开。
java.lang.invoke:方法句柄
| 类 | 用途 |
|---|---|
MethodHandle | 可执行的方法引用 |
MethodHandles | 查找工厂 |
MethodType | 方法签名 |
VarHandle | 变量句柄,替代部分 Unsafe 用法 |
CallSite | 调用点 |
invokedynamic 和 lambda 的底层实现依赖这个包。卷三讲字节码时会遇到。
java.lang.module:模块系统
| 类 | 用途 |
|---|---|
ModuleDescriptor | 模块描述符 |
ModuleFinder | 查找模块 |
ResolvedModule | 已解析模块 |
Configuration | 模块配置 |
module-info.java 的运行时表示。卷一第 3 章只建立印象,卷三展开 JPMS。
java.lang.management:运行时管理
| 类 | 用途 |
|---|---|
ManagementFactory | 获取各种 MXBean |
MemoryMXBean | 堆/非堆内存 |
ThreadMXBean | 线程信息 |
GarbageCollectorMXBean | GC 统计 |
RuntimeMXBean | JVM 运行时 |
OperatingSystemMXBean | 操作系统 |
MemoryMXBean memory = ManagementFactory.getMemoryMXBean();
System.out.println(memory.getHeapMemoryUsage());
卷四会用这些接口和 JFR 做运行时观测。
java.lang.annotation:注解
| 注解 | 用途 |
|---|---|
@Retention | 保留到源码/字节码/运行时 |
@Target | 可标注的位置 |
@Documented | 出现在 Javadoc |
@Inherited | 子类继承 |
@Repeatable | 可重复标注 |
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Audited {
String value() default "";
}
其他常用模块
| 模块 | 包 | 用途 |
|---|---|---|
java.logging | java.util.logging | JDK 自带日志 |
java.sql | java.sql | JDBC |
java.xml | javax.xml.* | XML 解析 |
java.desktop | java.awt、javax.swing | 桌面 GUI |
java.management | javax.management | JMX |
java.instrument | java.lang.instrument | 字节码增强 |
java.compiler | javax.tools | 编译 API |
jdk.jfr | jdk.jfr | 飞行记录 |
jdk.httpserver | com.sun.net.httpserver | 轻量 HTTP 服务 |
jdk.jcmd | 命令行工具 | jcmd、jps |
jdk.jconsole | 命令行工具 | jconsole |
第 18 章会用 jdk.httpserver;卷四会用 jdk.jfr 和 jdk.jcmd。
选包速查
| 我要做什么 | 用哪个包 |
|---|---|
| 存一组对象 | java.util 集合 |
| 可能没有值 | java.util.Optional |
| 转换/过滤集合 | java.util.stream |
| 读写文本文件 | java.nio.file.Files |
| 读写二进制 | java.io 字节流 |
| 日期与借期 | java.time |
| 金额计算 | java.math.BigDecimal |
| 发 HTTP 请求 | java.net.http.HttpClient |
| 起一个轻量 HTTP 服务 | com.sun.net.httpserver |
| 多线程任务 | java.util.concurrent |
| 正则校验 | java.util.regex |
| 反射/框架 | java.lang.reflect |
| 日志 | java.util.logging 或 SLF4J |
| 运行时观测 | java.lang.management、jdk.jfr |
一页记忆
java.base默认加载;java.lang自动导入。- 集合先选接口(
List/Set/Map),再选实现(ArrayList/HashSet/HashMap)。 - 文本文件用
Path+Files,显式 UTF-8。 - 日期用
java.time,金额用BigDecimal。 - HTTP 客户端用
HttpClient;轻量服务端用com.sun.net.httpserver。 - 并发先用
ExecutorService,不要直接new Thread。 - 反射和
MethodHandle是框架的底层,业务代码少用。 - 查 API 用官方 Javadoc,查用法回本书对应章节。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。