《Java 编程入门》前言

交代本书的读者对象、前置知识、六部分结构与章节依赖,列出 JDK 25、Maven 和终端的环境清单与真实版本输出,说明代码、输出、省略号和命令的书写约定,以及三种阅读路径、验证代码的具体方法、版本不一致时的排查顺序与本书刻意不覆盖的范围。

这本书写给谁

这本书写给三类人。

第一类:会别的语言,但没系统学过 Java。 你可能写 Python、JavaScript、Go,能看懂类和对象,但 Java 的类型系统、泛型、受检异常、集合框架让你觉得别扭。这本书从工具链开始,把 Java 的「默认习惯」一条条讲清楚,而不是假设你已经知道。

第二类:学过 Java 语法,但没写过完整项目。 你能写 for 循环、能看懂 class,但面对一个空目录时不知道先建什么文件、pom.xml 怎么写、包怎么分、测试放哪里。这本书用一个贯穿项目把这些「工程动作」串起来。

第三类:从 C/C++ 转过来。 你熟悉内存和指针,但 Java 的引用语义、垃圾回收、泛型擦除、受检异常会让你不断踩坑。书里会专门标注这些「看起来像 C++、其实不一样」的地方。

如果你完全没写过代码,这本书的节奏可能偏快。建议先补一门语言的变量、循环、函数和数组,再回来读。

前置知识

只需要两件事:

  1. 会用命令行。 知道 cd、ls、mkdir,知道什么是环境变量,能看懂 command not found 和 No such file or directory。
  2. 写过至少一门语言的完整程序。 知道函数、数组、循环、条件判断,最好写过一个几百行的脚本或小项目。

不需要提前会 Maven、Git、Linux 或 Spring。Maven 在第 2、3 章讲,Git 不在本书范围,Linux 只在部署相关章节出现。

本书结构

全书 61 篇,分六个部分:

部分章节解决的问题
一、起步1–3Java 是什么、工具链怎么装、第一个程序怎么跑
二、语言基础4–6类型、控制流、方法,能写命令分发
三、面向对象7–9类、接口、record、enum、sealed,能表达领域模型
四、集合与泛型10–12容器、泛型、Stream,能做搜索与统计
五、异常、IO 与常用库13–15错误处理、文件读写、时间与正则
六、工程与交付16–18测试、打包、完整项目

章节之间有依赖,具体关系写在目录篇的「六个部分之间的依赖关系」里。简单说:第 8 章之前是语法,第 10 章之后开始拼装,第 18 章是总装。 跳章可以,但不要跳过第 8、9、10、13 章直接看第 18 章。

环境清单

本书的写作与验证环境:

项版本说明
操作系统macOS 26.3(arm64)Linux 上命令基本一致;Windows 需替换路径分隔符
JDKTemurin 25.0.5+8(LTS)JAVA_HOME=~/.jdks/jdk-25.0.5+8/Contents/Home
Maven3.9.12mvn -version 应显示 Java 25
终端zshbash 也可,环境变量写法相同
编码UTF-8JDK 18 起默认 UTF-8,但仍建议显式指定

检查命令:

java -version
javac -version
mvn -version

本机真实输出(节选):

openjdk version "25.0.5" 2026-10-20 LTS
OpenJDK Runtime Environment Temurin-25.0.5+8 (build 25.0.5+8-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.5+8 (build 25.0.5+8-LTS, mixed mode, sharing)

javac 25.0.5

Apache Maven 3.9.12
Java version: 25.0.5, vendor: Eclipse Adoptium, runtime: /Users/bingrong.yan/.jdks/jdk-25.0.5+8/Contents/Home

三条命令都要能跑通,并且 mvn -version 里的 Java version 要和 java -version 一致。不一致时,先检查 JAVA_HOME 和 PATH,不要急着往下读。

安装 JDK 25

macOS 用 Homebrew:

brew install --cask temurin@25

或者从 Adoptium 下载 tar.gz,解压到用户目录:

mkdir -p ~/.jdks
curl -L -o /tmp/temurin25.tar.gz \
  "https://api.adoptium.net/v3/binary/latest/25/ga/mac/aarch64/jdk/hotspot/normal/eclipse"
tar -xzf /tmp/temurin25.tar.gz -C ~/.jdks

解压后把 JAVA_HOME 指向 Contents/Home。Linux 用对应的 linux/x64 或 linux/aarch64 包;Windows 用 .zip 并设置系统环境变量。

安装 Maven

macOS:

brew install maven

或者下载二进制包,解压后把 bin 加进 PATH。Maven 本身不绑定 JDK,它用 JAVA_HOME 指向的 JDK 运行;所以先装 JDK,再装 Maven。

代码约定

包名。 贯穿项目用 com.plume.library。书中片段如果只展示一个类,可能省略包声明;完整示例会写全。

类名。 领域对象用名词(Book、Member、Loan),服务用 XxxService,仓储用 XxxRepository,异常用 XxxException。接口和实现分开命名:LibraryRepository 是接口,InMemoryLibraryRepository 是实现。

文件名。 一个公开类一个文件,文件名与类名一致。这是 Java 的硬性要求,不是风格建议。

代码块。 完整可编译的代码会标 java;命令行标 bash;终端输出标 text;pom.xml 标 xml;SQL 标 sql。代码块里的 ... 表示省略,直接复制会编译失败。

输出。 代码块之后紧跟的 text 块是真实输出;如果是为了说明结构而简化的,会在前文写「示意」。不要把示意输出当成实测结果,两者的可信度不同。

异常。 书中的异常栈只保留关键行,用 ... 省略框架内部帧。完整栈在你自己的机器上可能更长。

版本标注。 凡是 JDK 21 与 25 行为不同的地方,会写成「JDK 21:……;JDK 25:……」。没有标注的,表示两个版本行为一致。

怎么验证代码

三个层次,按需要选择。

单文件:javac + java

适合一个完整类:

javac -d /tmp/java_check LibraryApp.java
java -cp /tmp/java_check LibraryApp

-d 指定输出目录,避免 .class 散落在源码旁边。类有包声明时,java 要写全限定名:

java -cp /tmp/java_check com.plume.library.LibraryApp

片段:jshell

适合验证一两行表达式或一个小方法:

jshell
jshell> List.of(3, 1, 2).stream().sorted().toList()
$1 ==> [1, 2, 3]

jshell 不需要 main,也不需要建文件,但它的片段是语句级的,不能验证包结构和模块。

工程:mvn test

适合验证整个项目:

mvn -q test

-q 只输出错误和测试摘要。想看完整生命周期,去掉 -q。第一次运行会下载依赖,之后会用本地缓存。

三种阅读路径

系统学(约 8 周)。 按 1→18 章顺序读,每周 2–3 章,每章代码手敲一遍。第 8 周把 library 重写一遍,不看答案。

快速过(约 3 周)。 第 1–3 章用两天跑通工具链;第 4–6 章只读小结和示例;第 7–12 章正常读;第 13–18 章重点跟项目。适合已经会一门语言、要在一两周内接手 Java 项目的人。

查漏补缺(按需)。 直接看目录篇的章节表,按关键词跳。每节末尾有小结和前后导航,跳读不会迷路。高频入口:泛型看第 11 章,集合看第 10 章,异常看第 13 章,测试看第 16 章,打包看第 17 章。

关于版本与错误

本书以 JDK 25 LTS 为主线,JDK 21 LTS 为对照。JDK 26、27 是特性版本,书中只在附录 C 提到,不作为主线。

如果你在 JDK 21 上运行卷一代码,绝大多数示例可以直接跑;用到 25 独有语法的地方会标注。编译目标默认 21,pom.xml 里通过 maven.compiler.release 固定。

书中难免有错误。发现代码跑不通时,按这个顺序排查:

  1. 确认 java -version、javac -version、mvn -version 三者一致。
  2. 确认代码块里的 ... 已经替换成真实内容。
  3. 看本节末尾的「常见错误」和附录 D。
  4. 用 jshell 把可疑片段单独跑一遍,缩小范围。
  5. 还不行,就把完整报错和最小复现代码记下来,再查官方文档。

Java 的报错信息通常很具体,尤其是编译错误:它会告诉你文件、行号、符号和期望类型。先读报错,再改代码,比凭感觉试错快得多。

从哪开始

如果你已经装好 JDK 25 和 Maven,直接跳到第 1 章;如果还没装,先按上面的环境清单做完。第 1 章不讲语法,讲 Java 为什么存在、跨平台的边界在哪——这些背景会帮你理解后面很多「为什么要这样设计」。

准备好了,就从 1.1 Java 解决了什么问题 开始。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「java」更多文章

  1. 《Netty 高性能网络编程》15.3 linkd-v2 验收与复盘
  2. 《Netty 高性能网络编程》15.2 限流、超时与降级
  3. 《Netty 高性能网络编程》15.1 网关路由与转发