关于Java SE (Java Platform, Standard Edition) 的详细总结:

Java SE 核心技术与平台总结

Java SE 是 Java 平台的基础,为开发和部署桌面、服务器环境和嵌入式环境中的应用程序提供了核心 API 和运行环境。它是构建 Java EE (Enterprise Edition) 和 Java ME (Micro Edition) 应用的基础。

1. Java 语言基础

  • 面向对象编程 (OOP): Java 是纯粹的面向对象语言(除基本数据类型外),核心概念包括:
    • 类 (Class)对象 (Object):类是对象的蓝图,对象是类的实例。
    • 封装 (Encapsulation): 将数据(属性)和操作数据的方法(行为)捆绑在一起,并通过访问修饰符 (public, private, protected, default) 控制对内部实现的访问。
    • 继承 (Inheritance): 子类 (extends) 可以继承父类的属性和方法,实现代码复用和层次化设计。
    • 多态 (Polymorphism): 同一个接口或父类引用可以指向不同的子类对象,调用相同的方法名表现出不同的行为(主要通过方法重写 @Override 实现)。
  • 基本数据类型: byte, short, int, long, float, double, char, boolean。以及对应的包装类 (Byte, Short 等),用于在需要对象的地方(如集合)表示基本类型值。
  • 变量与常量: 变量用于存储数据,常量 (final) 一旦赋值不可更改。
  • 运算符: 算术 (+, -, *, /, %)、关系 (>, <, ==, !=)、逻辑 (&&, ||, !)、位 (&, |, ^, ~, <<, >>, >>>)、赋值 (=, +=)、条件 (?:)、instanceof 等。
  • 控制流: if-else, switch-case, for, while, do-while, break, continue, return
  • 数组 (Array): 固定大小的同类型数据集合。支持一维和多维数组。
  • 字符串 (String): 不可变字符序列。StringBuilderStringBuffer 用于可变字符串操作(后者线程安全)。
  • 注释: //, /* ... */, /** ... */ (Javadoc)。

2. 面向对象高级特性

  • 抽象类 (Abstract Class): 不能被实例化,可能包含抽象方法(只有声明,没有实现),需要子类实现。用于定义通用模板。
  • 接口 (Interface): Java 7 之前只能定义抽象方法和常量。Java 8 引入 default 方法(有默认实现)和 static 方法。Java 9 引入 private 方法。用于定义行为契约,支持多重继承(类只能单继承)。
  • 内部类 (Inner Class): 定义在另一个类内部的类,包括成员内部类、局部内部类、匿名内部类、静态嵌套类。用于逻辑分组、隐藏实现、实现回调等。
  • 枚举 (Enum): 表示一组固定的常量(如星期、状态)。类型安全,可添加方法和字段。
  • 注解 (Annotation): 提供元数据信息,用于编译检查(如 @Override)、框架配置(如 Spring)、代码生成(如 Lombok)等。可自定义注解。

3. 异常处理

  • 概念: 处理程序运行时发生的错误或异常情况。
  • 体系结构: Throwable 是所有错误 (Error) 和异常 (Exception) 的基类。
    • Error: 严重问题,通常不可恢复(如 OutOfMemoryError),应用程序不应捕获。
    • Exception: 程序本身可能处理的问题。分为 受检异常 (Checked Exception) (如 IOException, SQLException,必须处理或声明抛出) 和 非受检异常 (Unchecked Exception / RuntimeException) (如 NullPointerException, ArrayIndexOutOfBoundsException,通常由编程错误导致,不强制处理)。
  • 处理机制:
    • try-catch-finally: try 块包含可能抛出异常的代码,catch 块捕获并处理特定类型异常,finally 块无论是否发生异常都会执行(常用于资源释放)。
    • throws: 在方法签名中声明该方法可能抛出的受检异常,将异常处理责任交给调用者。
    • throw: 主动抛出一个异常对象。

4. 集合框架 (Collections Framework)

  • 核心接口: Collection (根接口), List (有序、可重复), Set (无序、唯一), Queue (队列), Deque (双端队列), Map (键值对映射,独立于 Collection 接口)。
  • 常用实现类:
    • List: ArrayList (基于数组,随机访问快,增删慢), LinkedList (基于链表,增删快,随机访问慢), Vector (线程安全版的 ArrayList, 较老), Stack (Vector 子类)。
    • Set: HashSet (基于 HashMap,无序), LinkedHashSet (维护插入顺序), TreeSet (基于红黑树,有序)。
    • Queue/Deque: LinkedList (也实现了 Deque), PriorityQueue (优先级队列), ArrayDeque (数组实现的双端队列)。
    • Map: HashMap (基于哈希表,键无序), LinkedHashMap (维护键的插入或访问顺序), TreeMap (基于红黑树,键有序), Hashtable (线程安全版的 HashMap, 较老), Properties (Hashtable 子类,常用于配置文件)。
  • 工具类: Collections (提供排序、同步包装等静态方法), Arrays (操作数组的工具类)。

5. 输入/输出 (I/O)

  • 核心概念: 流 (Stream) 代表数据的流动,分为 字节流 (InputStream, OutputStream) 和 字符流 (Reader, Writer)。
  • 节点流: 直接与特定数据源/目的地交互,如 FileInputStream, FileOutputStream, FileReader, FileWriter
  • 处理流/包装流: 对节点流或其他处理流进行包装,提供增强功能(如缓冲、转换、序列化等),如 BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter, InputStreamReader (字节转字符), OutputStreamWriter (字符转字节), ObjectInputStream, ObjectOutputStream (对象序列化/反序列化)。
  • NIO (New I/O): Java 1.4 引入,提供基于通道 (Channel) 和缓冲区 (Buffer) 的非阻塞或高效 I/O 操作。核心组件包括 Buffer, Channel, Selector, Charset

6. 多线程 (Multithreading)

  • 概念: 允许程序同时执行多个任务(线程)。
  • 创建线程:
    • 继承 Thread 类,重写 run() 方法。
    • 实现 Runnable 接口,实现 run() 方法,然后将 Runnable 对象传递给 Thread 构造函数(更推荐,避免单继承限制)。
  • 线程生命周期: 新建 (New)、就绪 (Runnable)、运行 (Running)、阻塞 (Blocked/Waiting/Timed_Waiting)、终止 (Terminated)。
  • 线程同步: 解决多线程访问共享资源时的并发问题。
    • synchronized 关键字: 修饰方法或代码块,保证同一时刻只有一个线程执行。
    • Lock 接口: ReentrantLock 等,提供更灵活的锁操作(如尝试获取锁、可中断锁)。
  • 线程通信: wait(), notify(), notifyAll() (需在 synchronized 块内调用)。
  • 线程池 (Executor Framework): Java 5 引入,有效管理线程资源。核心接口 Executor, ExecutorService。常用实现 ThreadPoolExecutor, ScheduledThreadPoolExecutor。工具类 Executors 提供创建线程池的工厂方法(需注意潜在风险)。
  • 原子变量 (java.util.concurrent.atomic):AtomicInteger,提供线程安全的无锁原子操作。
  • 并发集合 (java.util.concurrent):ConcurrentHashMap, CopyOnWriteArrayList,提供线程安全的集合实现。

7. 泛型 (Generics)

  • 目的: 提供类型安全性和消除强制类型转换。
  • 核心: 在类、接口、方法上使用类型参数(如 class Box<T>)。在创建实例或调用方法时指定具体类型(如 Box<Integer> intBox = new Box<>();)。
  • 类型通配符: ? (未知类型), ? extends T (上界,T 或其子类), ? super T (下界,T 或其父类)。用于增强 API 的灵活性。
  • 类型擦除: Java 泛型在编译时进行类型检查,运行时类型信息会被擦除(替换为原始类型或边界)。

8. 反射 (Reflection)

  • 概念: 允许程序在运行时检查和修改类、对象、方法、字段等结构信息。
  • 核心类: Class, Field, Method, Constructor
  • 应用场景: 框架开发(如 Spring 依赖注入)、动态代理、IDE 调试、测试工具等。
  • 性能考虑: 反射操作通常比直接调用慢,应谨慎使用。

9. 注解处理

  • 编译时处理: 通过注解处理器 (AbstractProcessor) 在编译时扫描和处理注解,生成代码、报告错误等(如 Lombok)。
  • 运行时处理: 通过反射 API 在运行时获取注解信息(如 Spring MVC 的 @RequestMapping)。

10. Lambda 表达式与函数式编程 (Java 8+)

  • Lambda 表达式: 简洁地表示匿名函数(一段可传递的代码)。语法:(parameters) -> expression(parameters) -> { statements; }
  • 函数式接口 (Functional Interface): 只包含一个抽象方法的接口。可以使用 @FunctionalInterface 注解标记。Java 内置常用函数式接口:Predicate<T>, Consumer<T>, Function<T,R>, Supplier<T>, Runnable 等。
  • 方法引用: 语法糖,用于直接引用已有方法。格式:类名::方法名对象::实例方法名
  • 流 API (Stream API): 对集合进行复杂操作(过滤、映射、归约、收集等)的强大工具。支持顺序流和并行流。操作分为 中间操作 (返回新流,如 filter, map, sorted) 和 终止操作 (产生结果或副作用,如 forEach, collect, reduce)。

11. JDBC (Java Database Connectivity)

  • 目的: 提供独立于特定数据库的统一 API,用于连接和操作关系型数据库。
  • 核心接口: DriverManager, Connection, Statement, PreparedStatement (预编译,防SQL注入), CallableStatement (调用存储过程), ResultSet
  • 基本步骤:
    1. 加载数据库驱动 (Class.forName() 或自动加载)。
    2. 建立连接 (DriverManager.getConnection(url, user, password))。
    3. 创建语句对象 (createStatement, prepareStatement, prepareCall)。
    4. 执行 SQL (executeQuery, executeUpdate, execute)。
    5. 处理结果集 (ResultSet)。
    6. 关闭资源 (close() 方法,通常使用 try-with-resources 自动关闭)。
  • 连接池: 管理数据库连接,提高性能。常用库如 HikariCP, Apache DBCP, C3P0。

12. 模块化系统 (Java Platform Module System - JPMS, Java 9+)

  • 目的: 解决“JAR地狱”、增强封装性、改进依赖管理和运行时配置。
  • 核心: 模块 (module) 是代码和数据的自描述集合。模块声明文件 (module-info.java) 定义了模块名、依赖 (requires)、导出的包 (exports)、使用的服务 (uses)、提供的服务 (provides ... with ...)。
  • 强封装: 未显式导出的包对其他模块不可见(即使 public)。

13. 其他重要特性与工具

  • 日期时间 API (java.time, Java 8+): 替代老旧的 DateCalendar,提供不可变、线程安全的日期时间处理类(LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration 等)。
  • Optional 类 (Java 8+): 用于包装可能为 null 的对象,避免空指针异常,显式处理可能的缺失值。
  • Try-with-Resources (Java 7+): 自动关闭实现了 AutoCloseable 接口的资源(如 InputStream, Connection),简化资源管理代码。
  • Javadoc: 从源代码注释生成 API 文档的工具。
  • JVM (Java Virtual Machine): Java 程序的运行环境。负责加载字节码 (.class)、验证、解释/编译执行 (JIT)、内存管理(堆、栈、方法区/元空间)、垃圾回收 (GC)。
  • Java 开发工具包 (JDK): 包含开发 Java 程序所需的工具(编译器 javac、打包工具 jar、文档生成器 javadoc、调试器 jdb 等)和 JRE。
  • Java 运行时环境 (JRE): 包含运行 Java 程序所需的 JVM 和核心类库。

总结

Java SE 提供了一个强大、稳定、安全且跨平台的开发环境。它涵盖了从语言基础、面向对象、异常处理、集合、I/O、多线程、泛型、反射等核心编程概念,到数据库连接 (JDBC)、函数式编程 (Lambda, Stream)、模块化等高级特性。理解并掌握 Java SE 的核心技术栈是成为一名合格 Java 开发者的基石。随着 Java 的持续演进(通常每 6 个月发布一个特性版本),新的特性和改进不断被引入,开发者需要保持学习。

更多推荐