• 1、java.lang

    在Java中,java.lang 包是Java的核心包,它包含了Java编程语言的核心类和一些基本接口。这个包中的类被自动导入到Java程序的每个文件中,因此你不需要显式地导入它们。这使得它们可以直接使用,无需任何导入语句。

    java.lang 包中的一些核心类和接口包括:

    1. Object‌ 类:这是Java中所有类的根类。它提供了所有Java类共有的方法,如 toString()equals()hashCode()getClass()notify()notifyAll(), 和 wait() 等。

    2. String‌ 类:用于表示字符串。这是Java中最常用的类之一,用于处理文本数据。

    3. Math‌ 类:提供了一系列的静态方法用于执行基本数学运算,如三角函数、指数、对数等。

    4. System‌ 类:提供了一些有用的类字段和方法。例如,System.out 用于标准输出,System.in 用于标准输入,System.exit() 用于退出程序等。

    5. Thread‌ 类:用于创建和管理线程。Java程序可以创建多个线程来同时执行多个任务。

    6. Runtime‌ 类:提供与Java运行时环境交互的方法,例如运行外部命令或程序。

    7. ClassLoader‌ 类:负责动态加载类到Java虚拟机中。

    8. Exception‌ 和 ‌Error‌ 类:这是所有异常的基类。异常处理是Java中处理运行时错误和异常情况的一种机制。

    9. Boolean‌, ‌Character‌, ‌Integer‌, ‌Long‌, ‌Float‌, ‌Double‌ 等包装类:这些类将基本数据类型(如int, long, float等)封装为对象,使得这些基本类型可以具有对象的方法和属性。

    10. Wrapper‌ 类(如 BooleanInteger 等):提供了基本数据类型与其对应的对象类型之间的转换功能。

    使用 java.lang 包中的类和接口,你可以构建功能强大的Java应用程序。这些类和方法提供了构建应用程序所需的基础设施和功能。例如,你可以使用 String 类来处理文本数据,使用 Math 类来进行数学计算,或者使用 System 类来与外部系统交互等。

    由于 java.lang 包中的类被自动导入,因此你可以直接使用这些类而不需要显式地导入它们。例如,你可以直接使用 String 类而不需要写 import java.lang.String;。这是Java设计的一个便利特性,使得编程更加简单和直观。



  • 2、java.util


    java.util 是 Java 核心类库中最重要的包之一,全称为 Java Utility(Java 工具包),提供了大量通用的工具类、集合框架、日期时间处理、随机数生成、属性配置、观察者模式实现等基础功能,是 Java 开发中高频使用的核心包。

    一、核心定位与设计目标

    • 解决日常开发中的通用问题,避免重复造轮子;

    • 提供高效、可靠的基础数据结构(集合)和工具方法;

    • 遵循 Java 面向对象设计原则,兼顾易用性和性能。

    二、java.util 核心子模块 / 关键类

    1. 集合框架(Collections Framework)

    这是 java.util 最核心的部分,定义了处理对象集合的标准接口和实现类,分为 Collection 和 Map 两大体系:

    体系核心接口主要实现类核心特点
    CollectionList(有序可重复)ArrayListLinkedListArrayList:数组实现,查询快;LinkedList:链表实现,增删快

    Set(无序不可重复)HashSetTreeSetHashSet:哈希表实现,查询 O (1);TreeSet:红黑树,有序(自然排序 / 自定义)

    Queue(队列)LinkedListPriorityQueuePriorityQueue:优先级队列,基于堆实现
    MapMap(键值对)HashMapTreeMapHashtableHashMap:非线程安全,高效;Hashtable:线程安全,性能差;TreeMap:有序键

    辅助工具类

    • Collections:提供集合的静态工具方法(排序 sort()、线程安全包装 synchronizedList()、空集合 emptyList() 等);

    • Arrays:处理数组的工具方法(排序 sort()、转集合 asList()、填充 fill() 等)。

    2. 日期与时间(旧版,JDK 8 后推荐 java.time

    JDK 8 之前的日期时间类,存在线程不安全、设计不统一等问题,但仍有大量遗留代码使用:

    • Date:表示特定的瞬间(精确到毫秒),核心方法已过时;

    • Calendar:替代 Date 的日期时间操作类(如获取年 / 月 / 日、加减时间);

    • SimpleDateFormat:格式化 / 解析 Date(线程不安全,需注意);

    • TimeZone:处理时区相关操作。

    3. 随机数生成

    • Random:生成伪随机数(int、long、double 等),线程安全但高并发下性能差;

    • ThreadLocalRandom(JDK 7+):线程隔离的随机数生成器,性能优于 Random

    • UUID:生成唯一标识符(如 UUID.randomUUID() 生成 32 位唯一字符串)。

    4. 属性配置

    • Properties:继承自 Hashtable,用于处理键值对形式的配置文件(如 .properties 文件),支持从流加载 / 存储配置;

    • 示例:

      Properties props = new Properties(); props.load(new FileInputStream("config.properties")); // 加载配置 String value = props.getProperty("key"); // 获取值

    5. 观察者模式

    • Observer(接口)和 Observable(类):实现观察者模式,被观察者(Observable)状态变化时通知所有观察者(Observer);

    • 注意:JDK 9 中已标记为过时,推荐使用 java.util.concurrent 或自定义观察者模式。

    6. 其他常用工具类

    类名核心功能
    Scanner读取控制台 / 文件输入(如 new Scanner(System.in) 读取用户输入)
    Optional(JDK 8+)解决空指针问题,包装可能为 null 的对象
    Timer/TimerTask定时任务调度(简单场景,复杂场景推荐 ScheduledExecutorService
    BitSet位操作工具,高效存储布尔值(按位存储,节省内存)
    Locale处理语言 / 地区相关设置(如格式化数字、日期)

    三、使用注意事项

    1. 线程安全ArrayListHashMap 等核心集合类非线程安全,多线程场景需使用 Collections.synchronizedXXX() 或 java.util.concurrent 下的并发集合(如 ConcurrentHashMap);

    2. 空指针:JDK 8+ 推荐使用 Optional 替代 null 判断,避免 NullPointerException

    3. 日期时间:尽量使用 java.time(JDK 8+)替代 Date/Calendar,前者线程安全、API 更友好;

    4. 集合判空:避免直接用 list == null,推荐 CollectionUtils.isEmpty(list)(Apache Commons)或 list == null || list.isEmpty()

    5. 性能ArrayList 适合查询,LinkedList 适合频繁增删;HashSet 查找效率远高于 TreeSet(除非需要有序)。

    四、示例:核心类使用

    {1ADD4C60-C1A0-480C-8AC9-C6B5AC424DC3}.png

    总结

    java.util 是 Java 开发的基础工具包,核心价值在于提供标准化的集合框架和通用工具方法,掌握其核心类的使用场景和注意事项,能显著提升开发效率和代码质量。对于 JDK 8+ 及以上版本,需结合 java.util.concurrent(并发)、java.time(日期)等包,弥补 java.util 的部分不足。



  • 3、‌java.io


    java.io 是 Java 核心类库中负责输入 / 输出(I/O)操作的基础包,全称为 Java Input/Output,提供了一套完整的 API 用于处理文件、流(字节流 / 字符流)、管道、序列化等底层 I/O 操作,是 Java 处理数据读写的核心工具。

    一、核心定位与设计思想

    • 核心目标:统一处理不同数据源的读写(文件、内存、网络、控制台等);

    • 设计模式:基于「流(Stream)」的抽象模型,将数据读写抽象为 “水流”—— 数据从源(输入流)流向目的地(输出流);

    • 核心分类:按数据单位分为「字节流」和「字符流」,按功能分为「节点流」(直接操作数据源)和「处理流」(包装节点流增强功能)。

    二、java.io 核心体系

    1. 核心分类维度

    分类维度具体类型处理数据核心抽象类适用场景
    数据单位字节流二进制数据(任意文件:图片、视频、文本)InputStream/OutputStream非文本文件、底层字节操作

    字符流字符数据(文本文件)Reader/Writer文本读写(自动处理编码)
    功能角色节点流(基础流)直接对接数据源FileInputStreamFileReader基础读写(文件、内存、管道)

    处理流(包装流)增强节点流功能BufferedInputStreamObjectInputStream缓冲、编码转换、对象序列化

    2. 核心抽象类(所有流的父类)

    类型输入抽象类输出抽象类核心方法
    字节流InputStreamOutputStream输入:read()(读字节 / 字节数组);输出:write()(写字节 / 字节数组)、flush()
    字符流ReaderWriter输入:read()(读字符 / 字符数组);输出:write()(写字符 / 字符串)、flush()

    注意:所有流都实现了 Closeable 接口,使用后必须关闭(释放资源),推荐用 try-with-resources 自动关闭。

    3. 常用实现类

    (1)节点流(直接操作数据源)
    类型输入实现类输出实现类功能说明
    字节流FileInputStreamFileOutputStream读写文件(二进制 / 文本,字节级)

    ByteArrayInputStreamByteArrayOutputStream读写内存字节数组(模拟文件,无需 IO 操作)

    PipedInputStreamPipedOutputStream管道流,实现线程间通信
    字符流FileReaderFileWriter读写文本文件(字符级,默认编码)

    CharArrayReaderCharArrayWriter读写内存字符数组

    StringReaderStringWriter读写字符串
    (2)处理流(包装节点流,增强功能)
    类型输入实现类输出实现类核心功能
    缓冲流BufferedInputStreamBufferedOutputStream字节缓冲流(减少 IO 次数,提升性能)

    BufferedReaderBufferedWriter字符缓冲流(支持 readLine() 读整行、newLine() 换行)
    编码转换InputStreamReaderOutputStreamWriter字节流转字符流(指定编码,如 UTF-8、GBK)
    对象流ObjectInputStreamObjectOutputStream对象序列化 / 反序列化(需实现 Serializable 接口)
    打印流-PrintStream/PrintWriter格式化输出(System.out 就是 PrintStream,支持 print()/println()

    4. 其他核心类

    类名核心功能
    File操作文件 / 目录(创建、删除、判断是否存在、获取路径等),不处理文件内容
    RandomAccessFile随机读写文件(支持文件指针,可只修改文件部分内容)
    FileDescriptor文件描述符,底层对接操作系统文件句柄
    FilterInputStream/FilterOutputStream处理流的父类,所有包装流都继承此类

    三、核心使用场景与示例

    1. 文本文件读写(字符流 + 缓冲流)

    {383555AA-1148-4EF0-813A-38BBB239D65C}.png


    2. 二进制文件复制(字节流 + 缓冲流)

    {2B538D7F-AA6B-495D-BDEB-E4A5D9443A24}.png

    3. 对象序列化 / 反序列化

    {18D3A345-490B-4C4C-8FC4-1BCB896AF711}.png


    4. File 类操作文件 / 目录

    {E07DD59F-CCB9-4F3B-934F-5C044B0EC8FE}.png


    四、使用注意事项

    1. 流的关闭

      • 所有流使用后必须关闭,推荐 try-with-resources(JDK 7+)自动关闭(实现 AutoCloseable 接口的类均可);

      • 关闭顺序:先关输出流,再关输入流;先关处理流,再关节点流(try-with-resources 会自动按声明逆序关闭)。

    2. 编码问题

      • FileReader/FileWriter 使用系统默认编码,跨平台易乱码,推荐用 InputStreamReader/OutputStreamWriter 指定编码:

    // 指定 UTF-8 编码读写 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt"), "UTF-8"));

    1. 缓冲流的性能

      • 读写大文件时必须使用缓冲流(BufferedXXX),减少磁盘 IO 次数(单字节读写性能极差);

      • 输出缓冲流需调用 flush() 强制刷出缓冲区数据(或关闭流时自动刷出)。

    2. 对象序列化

      • 类必须实现 Serializable 接口(标记接口,无方法);

      • 敏感字段可加 transient 关键字,避免序列化;

      • 建议显式声明 serialVersionUID,避免类结构变化导致反序列化失败。

    3. JDK 7+ 新特性

      • Files/Pathsjava.nio.file)是新一代 IO API,更简洁高效,推荐替代 java.io 处理文件操作;

      • 示例:Files.copy(Paths.get("source.jpg"), Paths.get("target.jpg"))

    五、java.io vs java.nio

    特性java.iojava.nio(JDK 1.4+)
    模型流模型(阻塞式)缓冲区模型 + 通道(Channel),支持非阻塞 IO
    性能适合小文件 / 简单场景大文件 / 高并发场景性能更优
    核心 APIStream、Reader/WriterChannel、Buffer、Selector
    易用性简单直观稍复杂,但功能更强大

    总结

    java.io 是 Java 传统 IO 操作的核心,基于流模型实现了完整的文件、内存、管道等数据源的读写能力。核心要点:

    • 字节流处理二进制数据,字符流处理文本(注意编码);

    • 缓冲流提升性能,处理流增强功能;

    • 务必关闭流,推荐 try-with-resources;

    • 复杂场景(高并发、大文件)推荐使用 java.nio.file 替代。

    掌握 java.io 的核心流体系和使用规范,是处理 Java 数据读写的基础,也是理解后续 NIO、网络编程(java.net)的关键。