Java 常用 API 完全指南
Java 作为一门成熟的编程语言其强大的生态系统很大程度上得益于它丰富的标准类库Java Standard Library。这些 APIApplication Programming Interface覆盖了从基础语言操作到复杂数据结构、文件处理、网络编程等方方面面。掌握这些核心 API是成为一名合格 Java 开发者的必经之路。本文将系统地梳理 Java 中最常用、最重要的 API按功能模块分类并结合代码示例帮助你快速建立 Java 核心 API 的知识体系。建议本文内容全面可按需查阅。建议将java.lang、java.util和java.io作为重点优先掌握。JDK 版本以 Java 17 LTS 为主。一、概览与分类Java 标准库的 API 主要按功能组织在不同的包Package中。常用核心包及其职责如下包名职责说明java.lang语言核心类自动导入无需手动 import提供String,System,Math,Thread,Object等java.util工具与数据结构集合框架List, Set, Map、日期/时间、随机数、正则表达式等java.io输入/输出旧 I/O文件读写、字节流/字符流操作java.nio新 I/OBuffer 和 Channel更高效的文件与网络 I/Ojava.time现代日期与时间 APIJava 8 引入推荐替代java.util.Date和Calendarjava.math高精度数学运算BigInteger超大整数BigDecimal精确小数如金额java.net网络编程Socket, URL, HTTP 连接java.sql数据库访问JDBC连接数据库执行 SQLjava.util.concurrent并发编程线程池、并发集合、锁等java.util.function函数式接口Lambda 表达式的核心配合 Stream API 使用java.util.stream流式操作函数式集合处理filter, map, reduce二、核心基础java.lang这个包中的类是如此基础以至于 Java 语言规范要求它们被自动导入你无需import即可使用。1.Object所有类的根Object是 Java 类层次结构的根。每个类都直接或间接继承自Object因此它的方法在所有对象上可用。方法用途备注equals(Object obj)判断对象“逻辑相等”默认比较引用需重写以实现内容比较hashCode()返回对象的哈希码若重写equals必须重写hashCode以保持一致性toString()返回对象的字符串表示默认输出类名十六进制hashCode通常需重写getClass()获取对象的运行时类常用于反射操作返回Class?对象clone()创建并返回对象的副本需要实现Cloneable接口否则抛出CloneNotSupportedExceptionfinalize()垃圾回收前调用已废弃不推荐使用了解即可wait()/notify()/notifyAll()线程间通信用于多线程同步必须在同步块中调用javapublic class Person { private String name; private int age; // 构造方法、getter/setter 省略 Override public boolean equals(Object o) { if (this o) return true; if (!(o instanceof Person)) return false; Person person (Person) o; return age person.age Objects.equals(name, person.name); } Override public int hashCode() { return Objects.hash(name, age); } Override public String toString() { return Person{name name , age age }; } }2.String不可变字符串String是 Java 最常用的类之一代表不可变的 Unicode 字符序列。常用方法说明length()返回字符串长度charAt(int index)返回指定索引处的字符toCharArray()将字符串转换为字符数组substring(int beginIndex, int endIndex)截取子字符串含 begin不含 endsplit(String regex)按正则表达式拆分字符串trim()/strip()去除首尾空白字符strip支持 UnicodetoLowerCase()/toUpperCase()转换大小写indexOf(int ch)/lastIndexOf(int ch)返回字符或子串首次/最后出现的位置contains(CharSequence s)判断是否包含某个子串startsWith(String prefix)/endsWith(String suffix)判断前缀/后缀replace(CharSequence target, CharSequence replacement)替换所有匹配的子串replaceAll(String regex, String replacement)按正则替换matches(String regex)判断是否匹配正则表达式isBlank()/isEmpty()判断是否为空或空白Java 11join(CharSequence delimiter, CharSequence... elements)使用分隔符拼接字符串Java 8repeat(int count)重复字符串 N 次Java 11java// 字符串不可变的证明 String s Hello; s s World; // 此时生成新的字符串对象原 Hello 成为垃圾 // 常用操作 String text Hello, Java!; System.out.println(text.length()); // 12 System.out.println(text.substring(7, 11)); // Java System.out.println(text.toUpperCase()); // HELLO, JAVA! System.out.println(text.split(,)[0]); // Hello // 字符串拼接Java 8 String joined String.join(-, 2024, 08, 20); // 2024-08-20性能提示由于String不可变频繁拼接如在循环中使用会生成大量临时对象效率极低。应使用StringBuilder非线程安全单线程优先或StringBuffer线程安全代替。javaStringBuilder sb new StringBuilder(); for (int i 0; i 10000; i) { sb.append(a); } String result sb.toString(); // 高效拼接3.StringBuilder与StringBuffer类特点适用场景StringBuilder非线程安全单线程环境下的字符串拼接优先推荐StringBuffer线程安全方法同步多线程共享同一个字符串缓冲区时使用javaStringBuilder sb new StringBuilder(); sb.append(Hello).append( ).append(World); sb.insert(5, ,); sb.reverse(); // 反转字符串 System.out.println(sb);4.System系统相关方法说明System.out.println()控制台输出System.err.println()控制台错误输出System.currentTimeMillis()返回当前时间戳毫秒System.nanoTime()高精度纳秒计时System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)高效数组拷贝System.getProperty(String key)获取系统属性如java.version,user.dir,os.nameSystem.gc()建议 JVM 进行垃圾回收非强制System.exit(int status)终止当前 JVMjava// 高性能数组拷贝 int[] src {1, 2, 3, 4, 5}; int[] dest new int[5]; System.arraycopy(src, 0, dest, 0, src.length);5.Math数学运算工具javaMath.abs(-10); // 10 Math.max(5, 10); // 10 Math.min(5, 10); // 5 Math.pow(2, 3); // 8.0 Math.sqrt(16); // 4.0 Math.random(); // [0.0, 1.0) 随机数 Math.round(3.6); // 4四舍五入 Math.ceil(3.1); // 4.0向上取整 Math.floor(3.9); // 3.0向下取整 Math.PI; // π 常量 Math.E; // e 常量三、集合框架java.util集合框架Collections Framework是 Java 最重要的数据结构库提供 List、Set、Map 等容器以及排序、搜索等算法。1. 集合框架体系结构textIterable (interface) └── Collection (interface) ├── List (interface) → ArrayList, LinkedList, Vector ├── Set (interface) → HashSet, TreeSet, LinkedHashSet └── Queue (interface) → LinkedList, PriorityQueue └── Deque (interface) → ArrayDeque, LinkedList Map (interface) → HashMap, TreeMap, LinkedHashMap, ConcurrentHashMap2.List有序可重复集合实现类底层结构特点ArrayList动态数组随机访问快O(1)插入/删除慢尤其头部最常用LinkedList双向链表插入/删除快O(1)随机访问慢O(n)还实现了DequeVector线程安全的动态数组历史遗留性能较差不推荐新项目使用javaListString list new ArrayList(); list.add(Apple); list.add(Banana); list.add(1, Orange); // 在索引 1 插入 String fruit list.get(0); // Apple list.remove(1); // 按索引删除 list.remove(Banana); // 按对象删除需重写 equals list.size(); // 元素个数 list.isEmpty(); // 判断是否为空 // 遍历方式 for (int i 0; i list.size(); i) { ... } for (String item : list) { ... } list.forEach(System.out::println); list.stream().map(String::toUpperCase).collect(Collectors.toList());3.Set无序不可重复集合实现类底层结构特点HashSet哈希表基于HashMap无序允许 null查找 O(1)最常用TreeSet红黑树SortedSet升序排列查找 O(log n)元素需实现ComparableLinkedHashSet哈希表 链表维护插入顺序允许 nulljavaSetString set new HashSet(); set.add(Java); set.add(Python); set.add(Java); // 重复添加返回 false set.contains(Java); // true set.remove(Python); // 集合运算 SetInteger s1 Set.of(1, 2, 3); SetInteger s2 Set.of(3, 4, 5); s1.retainAll(s2); // 交集s1 变成 {3} s1.addAll(s2); // 并集 s1.removeAll(s2); // 差集4.Map键值对集合实现类底层结构特点HashMap哈希表无序允许一个 null key查找 O(1)最常用TreeMap红黑树按键自然顺序或自定义Comparator排序LinkedHashMap哈希表 链表维护插入顺序ConcurrentHashMap分段锁/哈希表线程安全高并发场景推荐javaMapString, Integer map new HashMap(); map.put(Apple, 10); map.put(Banana, 5); Integer count map.get(Apple); // 10 Integer countDefault map.getOrDefault(Orange, 0); // 0 map.remove(Banana); map.containsKey(Apple); // true map.containsValue(10); // true // 遍历 Map for (Map.EntryString, Integer entry : map.entrySet()) { System.out.println(entry.getKey() - entry.getValue()); } // 或使用 forEach map.forEach((k, v) - System.out.println(k - v)); // 计算与合并 map.merge(Apple, 5, Integer::sum); // 如果存在则相加否则插入 5 map.computeIfAbsent(Orange, k - 0); // 不存在时才计算并插入5. 工具类Collections和ArraysCollections提供对集合Collection接口的操作Arrays提供对数组的操作方法说明Collections.sort(list)排序自然顺序Collections.sort(list, comparator)自定义排序Collections.reverse(list)反转顺序Collections.shuffle(list)随机打乱Collections.max(list)/Collections.min(list)最大值/最小值Collections.unmodifiableList(list)返回不可修改的视图Collections.synchronizedList(list)返回线程安全的包装Arrays.sort(arr)排序数组Arrays.toString(arr)数组转字符串Arrays.asList(T... a)将数组转为固定大小的 Listjava// 排序自定义对象 ListPerson people new ArrayList(); people.add(new Person(Alice, 30)); people.add(new Person(Bob, 25)); people.sort(Comparator.comparingInt(Person::getAge)); // 按年龄升序 Collections.sort(people, Comparator.comparing(Person::getAge)); // 不可变集合Java 9 ListString immutable List.of(a, b, c); SetInteger immutableSet Set.of(1, 2, 3); MapString, Integer immutableMap Map.of(a, 1, b, 2);四、输入输出java.ioI/O 流用于处理文件、网络等数据读写。Java 提供了字节流和字符流两套体系。1. 流体系结构字节流处理二进制数据InputStream→FileInputStream,BufferedInputStream,ByteArrayInputStreamOutputStream→FileOutputStream,BufferedOutputStream,ByteArrayOutputStream字符流处理文本数据自动处理字符编码Reader→FileReader,BufferedReader,InputStreamReaderWriter→FileWriter,BufferedWriter,OutputStreamWriter2. 文件读写示例java// 字符流读取推荐使用 try-with-resources try (BufferedReader reader new BufferedReader(new FileReader(input.txt))) { String line; while ((line reader.readLine()) ! null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } // 字符流写入 try (BufferedWriter writer new BufferedWriter(new FileWriter(output.txt))) { writer.write(Hello Java I/O); writer.newLine(); } catch (IOException e) { e.printStackTrace(); } // 使用 NIOJava 7推荐 Path path Paths.get(data.txt); ListString lines Files.readAllLines(path); // 全部读入内存 Files.writeString(path, 新内容, StandardOpenOption.APPEND); // 追加写入3. 序列化将对象转换为字节流以便存储或传输javaclass Student implements Serializable { private static final long serialVersionUID 1L; private String name; private int age; // getter/setter 省略 } // 序列化 try (ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(student.ser))) { oos.writeObject(new Student(Alice, 20)); } catch (IOException e) { ... } // 反序列化 try (ObjectInputStream ois new ObjectInputStream(new FileInputStream(student.ser))) { Student student (Student) ois.readObject(); } catch (IOException | ClassNotFoundException e) { ... }五、日期与时间java.timeJava 8java.time是 Java 8 引入的现代日期时间 API解决了旧 APIDate,Calendar的诸多问题线程不安全、可变、索引混乱等。1. 核心类一览类描述用途LocalDate日期年-月-日不含时区如 2024-08-20LocalTime时间时:分:秒.纳秒不含时区如 14:30:00LocalDateTime日期和时间不含时区ZonedDateTime含时区的日期时间带时区信息Instant时间戳UTC机器时间可用于时间计算Duration时间段时、分、秒计算两个时间点之间的差值Period时间段年、月、日计算两个日期之间的差值DateTimeFormatter格式化与解析线程安全支持自定义模式2. 使用示例java// 获取当前日期时间 LocalDate today LocalDate.now(); // 2024-08-20 LocalTime now LocalTime.now(); // 14:30:00.123 LocalDateTime current LocalDateTime.now(); // 2024-08-20T14:30:00.123 // 创建指定日期 LocalDate birthday LocalDate.of(2000, 1, 1); LocalTime time LocalTime.of(14, 30, 0); // 解析字符串 LocalDate date LocalDate.parse(2024-08-20); LocalTime timeParsed LocalTime.parse(14:30:00); // 日期运算 LocalDate nextWeek today.plusWeeks(1); LocalDate lastMonth today.minusMonths(1); LocalDate nextBirthday birthday.plusYears(1); // 格式化 DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy年MM月dd日 HH:mm:ss); String formatted current.format(formatter); // 2024年08月20日 14:30:00 LocalDateTime parsed LocalDateTime.parse(2024年08月20日 14:30:00, formatter); // 时间差计算 LocalDate start LocalDate.of(2024, 1, 1); LocalDate end LocalDate.of(2024, 12, 31); Period period Period.between(start, end); System.out.println(period.getMonths()); // 11 System.out.println(period.getDays()); // 30 LocalTime t1 LocalTime.of(10, 0); LocalTime t2 LocalTime.of(12, 30); Duration duration Duration.between(t1, t2); System.out.println(duration.toMinutes()); // 150 // 时区处理 ZonedDateTime zdt ZonedDateTime.now(ZoneId.of(Asia/Shanghai)); ZonedDateTime utc zdt.withZoneSameInstant(ZoneId.of(UTC));旧 API 与新 API 互转java// Date → Instant → LocalDateTime Date date new Date(); Instant instant date.toInstant(); LocalDateTime localDateTime instant.atZone(ZoneId.systemDefault()).toLocalDateTime(); // LocalDateTime → Date LocalDateTime ldt LocalDateTime.now(); Date newDate Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());六、数学与高精度java.math1.BigInteger任意精度的整数javaBigInteger a new BigInteger(12345678901234567890); BigInteger b BigInteger.valueOf(100); BigInteger sum a.add(b); BigInteger product a.multiply(b); BigInteger quotient a.divide(b); BigInteger remainder a.mod(b); BigInteger pow a.pow(3); int compare a.compareTo(b); // 正数、0、负数2.BigDecimal高精度小数金额推荐java// 使用字符串构造避免精度丢失 BigDecimal price new BigDecimal(19.99); BigDecimal taxRate new BigDecimal(0.08); BigDecimal tax price.multiply(taxRate); BigDecimal total price.add(tax); // 四舍五入 BigDecimal rounded total.setScale(2, RoundingMode.HALF_UP); // 比较使用 compareTo不要用 equals if (price.compareTo(BigDecimal.ZERO) 0) { System.out.println(价格为正); }七、网络编程java.netjava// 通过 URL 读取网页内容 URL url new URL(https://www.example.com); try (BufferedReader reader new BufferedReader( new InputStreamReader(url.openStream(), StandardCharsets.UTF_8))) { String line; while ((line reader.readLine()) ! null) { System.out.println(line); } } // Socket 编程客户端 try (Socket socket new Socket(localhost, 8080); PrintWriter out new PrintWriter(socket.getOutputStream(), true); BufferedReader in new BufferedReader(new InputStreamReader(socket.getInputStream()))) { out.println(Hello Server); String response in.readLine(); System.out.println(Server response: response); }八、函数式接口与java.util.function配合 Lambda 表达式和 Stream API 使用接口抽象方法说明FunctionT, RR apply(T t)输入 T输出 RPredicateTboolean test(T t)条件判断返回 booleanConsumerTvoid accept(T t)消费数据无返回值SupplierTT get()供给数据无输入UnaryOperatorTT apply(T t)输入输出类型相同BiFunctionT, U, RR apply(T t, U u)两个输入一个输出java// 使用示例 ListString names Arrays.asList(Alice, Bob, Charlie); PredicateString longName s - s.length() 3; names.stream().filter(longName).forEach(System.out::println);九、并发编程java.util.concurrent常用组件类/接口用途ExecutorService线程池管理Executors.newFixedThreadPool(n)ThreadPoolExecutor可配置的线程池实现ConcurrentHashMap线程安全的 HashMapCopyOnWriteArrayList读多写少的线程安全 ListBlockingQueue阻塞队列ArrayBlockingQueue,LinkedBlockingQueueCountDownLatch等待多个线程完成Semaphore控制并发访问数量AtomicInteger/AtomicLong原子操作的数值类型javaExecutorService executor Executors.newFixedThreadPool(10); executor.submit(() - { System.out.println(Task executed); }); executor.shutdown();十、总结速查表功能领域核心类/接口基础核心Object,String,StringBuilder,System,Math集合框架ListArrayList,SetHashSet,MapHashMap集合工具Collections,Arrays输入输出I/OFile,FileInputStream,FileReader,BufferedReader,FilesNIO日期时间LocalDate,LocalTime,LocalDateTime,DateTimeFormatter高精度数学BigInteger,BigDecimal函数式接口Function,Predicate,Consumer,Supplier并发编程ExecutorService,ConcurrentHashMap,AtomicInteger网络URL,Socket,ServerSocket十一、一句话记忆Java 的常用 API 围绕三大基石展开java.lang提供语言核心能力java.util是数据结构的宝库java.io是文件与网络通信的桥梁而java.time是处理日期时间的现代方案java.util.stream则赋予集合函数式编程的灵魂。掌握这些常用 API 是高效使用 Java 的前提。建议开发中多用 IDE 的自动补全并常查官方文档Java SE Documentation同时留意不同 JDK 版本间的 API 变化。