Java 知识体系

一、Java 语言基础

这是所有 Java 程序的基石。

  1. 基础语法
    • 数据类型
      • 基本数据类型:byte, short, int, long, float, double, char, boolean
      • 引用数据类型:类、接口、数组、枚举等
    • 变量与常量final 关键字
    • 运算符:算术、关系、逻辑、位、赋值、条件(三元)、instanceof 等
    • 流程控制if-else, switch-case, for, while, do-while, break, continue, return
  2. 面向对象编程 (OOP)
    • 四大特性
      • 封装:通过访问控制符(private, protected, public, 默认)隐藏实现细节,提供公共方法访问。
      • 继承extends 关键字,实现代码复用。单继承,但可多层继承。
      • 多态
        • 编译时多态:方法重载(Overload)
        • 运行时多态:方法重写(Override),基于继承和接口实现,通过父类/接口引用指向子类对象。
      • 抽象abstract 类和接口(interface)用于定义规范。
    • 类与对象:类的定义、对象的创建(new)、构造方法、this 关键字。
    • 方法:方法的定义、参数传递(值传递)、递归。
  3. 关键字和核心概念
    • static: 静态变量、静态方法、静态代码块。
    • final: 修饰变量(常量)、方法(不可重写)、类(不可继承)。
    • thissuper: 访问当前对象和父类对象。
    • packageimport: 包机制,用于管理类和解决命名冲突。

二、异常处理

Java 提供了强大的异常处理机制来增强程序的健壮性。

  1. 异常体系结构
    • Throwable -> Error (系统错误,不可处理) 和 Exception (异常,可处理)。
    • Exception -> RuntimeException (运行时异常/非受检异常) 和 非运行时异常 (受检异常,Checked Exception)。
  2. 处理机制
    • try-catch-finally: 捕获并处理异常。
    • throws: 声明方法可能抛出的异常,交给调用者处理。
    • throw: 主动抛出一个异常对象。
  3. 自定义异常:继承 ExceptionRuntimeException 来创建自定义异常类。

三、集合框架 (Java Collections Framework)

用于存储和操作数据组,是 Java 中最重要和常用的库之一。

  1. 核心接口
    • Collection: 所有集合类的根接口。
      • List: 有序、可重复。 -> ArrayList, LinkedList, Vector
      • Set: 无序、不可重复。 -> HashSet, LinkedHashSet, TreeSet
    • Map: 键值对存储。 -> HashMap, LinkedHashMap, TreeMap, Hashtable
  2. 实现类比较
    • ArrayList vs LinkedList: 数组实现 vs 链表实现,随机访问快 vs 增删快。
    • HashSet vs TreeSet: 哈希表实现(无序) vs 红黑树实现(有序)。
    • HashMap vs Hashtable: 线程不安全 vs 线程安全;允许 null key/value vs 不允许。
    • HashMap vs ConcurrentHashMap: 非线程安全 vs 分段锁/ CAS 实现的线程安全。
  3. 工具类
    • Collections: 提供排序、查找、同步化等静态方法。
    • Arrays: 用于操作数组的工具类。

四、泛型 (Generics)

提供编译时类型安全检查,并消除强制类型转换。

  1. 泛型类/接口/方法class Box<T> {...}, public <T> T getData(T data) {...}
  2. 类型通配符? (无界), ? extends T (上界), ? super T (下界)。用于增加 API 的灵活性,遵循 PECS (Producer-Extends, Consumer-Super) 原则。

五、输入输出 (I/O)

Java I/O 系统提供了读写数据的多种方式。

  1. **流 (Stream)**:
    • 字节流InputStream / OutputStream (处理所有类型数据,如图片、视频)。
      • 常用实现:FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream
    • 字符流Reader / Writer (专门处理文本数据,解决编码问题)。
      • 常用实现:FileReader, FileWriter, BufferedReader, BufferedWriter, InputStreamReader (桥梁,将字节流转换为字符流)
  2. **NIO (New I/O)**:
    • 核心概念:Channel, Buffer, Selector
    • 提供了非阻塞、高性能的 I/O 操作方式。

六、多线程 (Concurrency)

Java 内置了对多线程编程的支持。

  1. 线程创建
    • 继承 Thread 类。
    • 实现 Runnable 接口(更推荐,因为可以避免单继承的限制)。
    • 实现 Callable 接口(可以返回结果和抛出异常)。
  2. 线程生命周期:新建 (New)、就绪 (Runnable)、运行 (Running)、阻塞 (Blocked)、等待 (Waiting)、超时等待 (Timed Waiting)、终止 (Terminated)。
  3. 线程同步
    • synchronized 关键字:同步方法、同步代码块。
    • Lock 接口ReentrantLock 等,提供了比 synchronized 更灵活的锁操作。
  4. 线程通信
    • wait(), notify(), notifyAll() (必须在同步代码块中使用)。
  5. 线程池
    • ExecutorService 框架:通过 Executors 工厂类创建 (newFixedThreadPool, newCachedThreadPool 等)。
    • 核心参数:核心线程数、最大线程数、存活时间、工作队列、拒绝策略。
    • 优势:降低资源消耗、提高响应速度、便于线程管理。
  6. **并发工具类 (java.util.concurrent)**:
    • AtomicInteger 等原子类:保证操作的原子性。
    • CountDownLatch, CyclicBarrier, Semaphore: 常用的同步辅助类。
    • ConcurrentHashMap, CopyOnWriteArrayList: 线程安全的集合。

七、Java 8+ 新特性 (非常重要)

现代 Java 开发的必备知识。

  1. Lambda 表达式(parameters) -> expression(parameters) -> { statements; },用于简化匿名内部类的书写。
  2. 函数式接口:只包含一个抽象方法的接口,如 Runnable, Callable,以及新引入的 Supplier<T>, Consumer<T>, Function<T,R>, Predicate<T>。用 @FunctionalInterface 注解标识。
  3. Stream API
    • 用于对集合进行函数式、声明式的处理(过滤、映射、排序、归约等)。
    • 操作分为中间操作 (filter, map, sorted, distinct) 和终端操作 (forEach, collect, count, reduce)。
  4. Optional 类:用于避免 NullPointerException 的容器类。
  5. 新的日期时间 API (java.time 包):LocalDate, LocalTime, LocalDateTime, ZonedDateTime, DateTimeFormatter 等,解决了旧 DateCalendar 类的所有缺陷。
  6. 接口的默认方法和静态方法:允许在接口中提供方法实现。
  7. **模块化系统 (Java 9)**:通过 module-info.java 文件定义模块和其依赖关系。

八、反射 (Reflection)

允许程序在运行时检查和操作类、方法、字段等信息。

  1. 核心类Class, Field, Method, Constructor
  2. 用途:动态代理、框架开发(框架通过反射配置和加载用户类)、注解处理等。

九、注解 (Annotation)

为代码提供元数据信息。

  1. 内置注解@Override, @Deprecated, @SuppressWarnings, @FunctionalInterface
  2. 元注解:用于定义注解的注解,如 @Target, @Retention, @Documented, @Inherited
  3. 自定义注解:使用 @interface 关键字定义。
  4. 注解处理:通过反射机制在运行时读取和处理注解。

十、网络编程

  1. 基于 TCP:使用 SocketServerSocket 类。
  2. 基于 UDP:使用 DatagramSocketDatagramPacket 类。

十一、JVM 基础 (了解)

虽然不是语言特性,但对理解 Java 至关重要。

  1. 内存区域:堆 (Heap)、方法区 (Metaspace)、虚拟机栈、本地方法栈、程序计数器。
  2. **垃圾回收 (GC)**:如何判断对象可回收(引用计数法、可达性分析法),常见的垃圾回收算法(标记-清除、复制、标记-整理),以及常见的垃圾收集器(Serial, Parallel, CMS, G1, ZGC)。
  3. 类加载机制:加载、验证、准备、解析、初始化。类加载器(双亲委派模型)。

总结

要扎实掌握 Java,建议按照以下路径学习:

  1. 夯实基础:语言基础、OOP、异常、集合。
  2. 深入特性:泛型、I/O、多线程。
  3. 拥抱现代:熟练掌握 Java 8+ 的 Lambda、Stream API 和新日期时间 API。
  4. 理解原理:适当了解 JVM 内存模型和 GC 机制,这对写出高性能、健壮的代码和排查问题极有帮助。
  5. 实践应用:通过大量编码练习来巩固理论知识,尤其是集合、多线程和 Stream API 的使用。