如果你正在学 Java或者已经学了一阵子突然发现“这个类我见过、那个关键字我天天写但让我说它到底叫什么、解决什么问题”时卡壳了那这篇词汇汇总就是给你准备的。我一直觉得学编程语言不能只靠“敲代码手感”词汇量决定了你的天花板。你看官方文档、逛技术社区、跟同事评审代码、面试时回答原理题本质上都是在做“术语翻译”。Java 本身是一门关键字不算多、但周边术语极其庞大的编程语言从语法关键字到面向对象词汇从集合框架到 JVM 底层再到 Spring 这种框架生态每个阶段都有必须掌握的高频词。Step 21 刚好是打基础走向进阶的过渡点在这个位置做一次词汇盘点能帮你把之前散装的知识串成网络。下面这份清单不是我随便抄来的 API 列表而是我实际教学和开发中反复用到、反复解释、反复被问的词汇。我按“语法骨架—面向对象—API—工程化—面试进阶”五个维度拆开每个词都配了场景和记忆点尽量少讲干巴巴的术语。1. 先搞清楚一件事词汇汇总到底在汇总什么很多初学者看到“单词汇总”四个字第一反应是背单词表把 Java 关键字背下来就完事。但实际工作中真正让你卡壳的往往不是public、class这种关键字而是下面这几种情况看 JDK 官方文档时generic、covariant、wildcard这些词看不懂API 再熟悉也白搭跟同事讨论代码他说“这个类应该用 composition 而不是 inheritance”你两脸茫然面试官问“HashMap 在 resizing 的时候会不会出现 infinite loop”你听得懂每个单词连不成句调 Bug 时日志里报ConcurrentModificationException你知道是并发修改却说不清背后的 fail-fast 机制。所以这篇单词汇总不是简单罗列“Java 有哪些关键字”而是帮你建立一张词汇网络每个词都属于哪个知识域、和哪些词是“一家人”、出现时一般代表什么问题。学完这一篇你至少能做到——别人提到一个术语你能快速定位到它所在的“知识坐标”。我自己带人的习惯是让初学者先按“域”记词而不是按字母表记词。比如这一周只收集面向对象相关的词汇下一周只收集集合框架相关的词汇然后写一段代码把这些词全部用上。这比每天背二十个孤立单词有效得多。2. Java 关键字语法骨架上的钉子必须脱口而出2.1 每天都在写、却没有细想过的一批关键Java 关键字一共 50 来个严格说还要带上true、false、null这三个字面常量其中使用频率最高的一批你一定闭着眼都能写出来public、private、protected、class、extends、implements、interface、new、this、super、static、final、abstract、return、void、int、boolean、try、catch、finally、throw、throws、package、import。但“会写”不等于“理解”。我经常在课堂上问一个问题static到底修饰的是什么很多人只说得出“静态方法不需要 new 就能调用”但说不全背后的三个层次。static表示成员属于“类本身”而不是“某个对象实例”所以它在内存中只有一份所有实例共享正因为如此静态方法里不能直接访问实例变量因为静态方法执行时可能还没有任何实例存在。理解到这一层你才算真正“拥有”了这个单词。再比如final。这个关键字在不同位置含义完全不同我列个表帮你区分修饰目标含义典型场景修饰变量变量只能赋值一次之后不能改定义常量、防止方法参数被意外修改修饰方法方法不能被重写工具类里的核心算法不希望子类篡改修饰类类不能被继承String、Integer 等基础类都是 final 的还有this和super。this指向当前对象主要用来区分成员变量和局部变量同名的情况super指向父类对象用来调用父类的构造器或方法。记住一个口诀this管自己super管爸爸。2.2 低频关键字面试和源码里全是它们有些关键字你可能一天都写不到一次但阅读框架源码、看并发编程内容时几乎绕不开volatile并发编程三兄弟之一保证变量的可见性禁止指令重排序。简单说一个线程改了值其他线程能立刻看到。但它不保证原子性所以i这种操作即使加了 volatile 也不安全。transient序列化时忽略该字段。比如用户密码、缓存对象这种不需要持久化的字段加上它就不会被写进文件或网络流。synchronized内置锁的关键字可以修饰方法或代码块保证同一时刻只有一个线程进入临界区。native声明这个方法由 JVM 之外的本地代码实现Java 本身只给接口。看 Object 源码时你会见到native修饰的hashCode()和clone()。assert断言默认关闭一般不在生产环境用但在测试代码里很常见。strictfp这个老古董现在基本见不到了强制浮点数运算遵循 IEEE 754 标准。Java 17 以后它变成了无操作关键字知道有这么回事就行。我建议你写一个小程序把static、final、this、super、try、catch、finally全部用上不用太复杂能表达清楚语义即可。写完之后你会对这些词的“手感”有明显的提升。2.3 关键字记忆法按角色分组我把关键字分成几组方便你联想记忆访问控制组public、protected、private。还有一个默认的“包私有”没有关键字不写就是。类与对象组class、interface、enum、recordJava 16 正式版、new、this、super、instanceof。继承与实现组extends、implements、abstract。成员修饰组static、final、volatile、transient、synchronized、native。流程控制组if、else、switch、case、default、for、while、do、break、continue、return。异常处理组try、catch、finally、throw、throws。模块与包组package、import、module、requires、exports。分组记忆的好处是面试问到“Java 有哪些关键字”时你不会只想起五六个而是能按类别脱口而出直接秒杀这种基础题。3. 面向对象核心词汇类、接口、多态的完整术语链3.1 从 Object 到 instance基础概念必须拎清Java 是面向对象的编程语言所以“类与对象”相关词汇是整个术语体系的地基。最基础的一组词是Class类是对一类事物的抽象描述。可以理解成“设计图纸”。Object对象也叫实例是根据图纸造出来的具体个体。注意Object同时是 Java 所有类的祖先类。Instance实例和 Object 在大多数场景下是同义词。面试时你会听到“创建实例”“instance of 判断”这种说法。Field/Property/Attribute字段/属性类的成员变量。Method方法类的行为。Constructor构造器创建对象时调用的特殊方法名字和类名相同没有返回值。我见过不少初学者混淆Object obj new Object()这句话里的三个 Object。第一个Object是变量的“声明类型”中间的new Object()是“实际创建的对象”括号是构造器调用。理解了这句话就理解了“引用类型”和“对象”的区别——引用只是遥控器对象才是电视机。3.2 继承体系extends、implements、override、overload 别搞混面向对象三大特性是 Encapsulation封装、Inheritance继承、Polymorphism多态英文词汇必须熟。与继承相关的还有一组高频词extends关键字类继承类接口继承接口。implements关键字类实现接口。override重写子类重新定义父类的方法方法签名必须一致运行时多态的基础。overload重载同一个类里方法名相同、参数列表不同编译期就决定调用哪个。super调用父类成员的关键字。protected受保护的子类可以访问跨包不行。这里最常被问的区分题就是“override 和 overload 的区别”。我总结一句话重写是父子类之间的事重载是同一个类内部的事重写看运行时重载看编译期。你把这个区别记住面试基础题基本不会丢分。3.3 抽象、接口与多态interface、abstract、cast 的协作逻辑abstract修饰的类是抽象类不能直接 new只能被继承interface是接口Java 8 以后可以有 default 方法接口里的抽象方法由实现类完成。两者的选择原则我用一句话概括能用接口表达“能做什么”就优先接口多个类之间复用代码逻辑才考虑抽象类。多态的英文是 Polymorphism实现多态需要三个条件继承、重写、父类引用指向子类对象。代码里最常见的就是Animal a new Dog(); a.speak(); // 实际调用的是 Dog 的 speak这就是运行时多态。与它配合的还有类型转换cast。向上转型upcasting自动发生向下转型downcasting需要强转强转之前最好用instanceof判断否则可能抛ClassCastException。我给学生讲多态时喜欢用遥控器的类比你有的是一个“Animal 遥控器”它指向的却是“Dog 对象”。按 speak 键时电视Dog用自己的方式响。这就是多态的意义——代码可以写得很通用运行时才决定具体行为。4. 集合框架词汇天天打交道的 List、Set、Map4.1 接口与实现一套必须倒背如流的对应关系Java 集合框架是词汇量最大的区域之一也是面试重灾区。顶层接口就三个Collection、List、Set还有独立的MapMap 并不继承 Collection这点很多人搞错。常见的实现类词汇ArrayList基于动态数组查询快插入删除慢尾部除外。LinkedList基于双向链表插入删除快查询慢。HashSet基于 HashMap元素无序、唯一。TreeSet基于红黑树元素有序、唯一。HashMap基于哈希表键值对无序。TreeMap基于红黑树按键排序。LinkedHashMap维护插入顺序的 HashMap常用于 LRU 缓存。我建议你把“接口—实现类—底层结构”做成一张表自己默写一遍。因为面试官经常从“ArrayList 和 LinkedList 的区别”问到“HashMap 的底层原理”你如果连这些类名都说不全后面就没法聊了。4.2 泛型与迭代generics、Iterator、Comparable 的配合泛型的英文是 Generics它解决的是“类型安全”问题。比如ListString表示这个列表只能放字符串编译期就帮你拦住错误类型。泛型相关的高频术语还有type parameter类型参数就是尖括号里的T、E、K、V。wildcard通配符?表示未知类型。upper bound上界? extends Number。lower bound下界? super Integer。type erasure类型擦除泛型的信息在编译后被抹掉运行时拿不到。迭代相关的词汇同样重要Iterator是迭代器Iterable是“可迭代的”接口for-each循环本质就是语法糖。还有一个高频异常叫ConcurrentModificationException它的成因是遍历集合时修改了集合结构比如边遍历边 remove。想安全删除用Iterator.remove()或者 Java 8 的removeIf()。4.3 排序与比较Comparable、Comparator 一对“难兄难弟”这两个词几乎是 Java 面试必问而且极容易混。Comparable自然排序接口类自身实现它重写compareTo表示“我比自己大还是小”。比如Integer实现了 Comparable所以数字能直接排。Comparator比较器接口外部实现重写compare表示“你帮我判断两个对象谁大谁小”。适合不想改动类本身的场景。// 自然排序让 Student 实现 Comparable class Student implements ComparableStudent { int score; Override public int compareTo(Student o) { return this.score - o.score; } } // 比较器按姓名排序不改 Student ListStudent list ...; list.sort(Comparator.comparing(s - s.name));记忆技巧Comparable是“自己跟别人比”Comparator是“第三方裁判来比”。你把这个比喻记住再也不会搞混。5. IO、并发与函数式词汇进阶代码里的常客5.1 输入输出流词汇Stream 的两副面孔IO 相关词汇里最容易让人迷惑的是Stream这个词它有两副完全不同的面孔。第一副面孔是java.io里的字节流比如InputStream、OutputStream、FileInputStream、BufferedReader。这些词代表“数据管道”按方向分输入输出按单位分字节和字符。InputStream是字节输入流Reader是字符输入流两个体系通过InputStreamReader桥接。第二副面孔是 Java 8 引入的java.util.stream它不是 IO 流而是“集合操作的函数式流水线”。stream()把一个集合变成流然后可以用filter、map、collect等操作。这里的核心词汇filter过滤留下满足条件的元素。map映射把元素转换成另一种形式。flatMap扁平化映射把嵌套结构展平。reduce归约把流中的所有元素汇总成一个结果。collect收集把流变回集合。Optional容器类优雅地处理空值避免NullPointerException。我经常说看到Stream先判断它是 IO 还是集合流不然会晕很久。5.2 并发编程词汇thread、lock、synchronized 的协作并发这块词汇量不大但每个词都重。核心词汇包括Thread线程Java 中通过继承Thread或实现Runnable创建。Runnable可运行的任务接口。Callable带返回值的任务接口配合Future使用。synchronized内置锁。volatile可见性保证。Lock显式锁接口ReentrantLock是它的实现。deadlock死锁两个线程互相持有对方等待的锁。thread-safe线程安全多线程下行为正确。ThreadPoolExecutor线程池实现类核心参数有 corePoolSize、maximumPoolSize、workQueue。初学者最容易混淆的是Runnable和Callable。一句话区分Runnable的run()没有返回值也不能抛异常Callable的call()有返回值能抛异常所以更适合需要结果的任务。5.3 函数式编程关键词lambda、method reference、predicateJava 8 是划时代的版本它带来的函数式风格词汇已经成为日常。关键词如下lambda expressionLambda 表达式本质是匿名函数可以用来替代简单的匿名内部类。functional interface函数式接口只有一个抽象方法的接口如Predicate、Function、Consumer、Supplier。Predicate断言接收一个参数返回 boolean。FunctionT, R接收 T返回 R。Consumer消费者接收参数无返回值。Supplier供应商无参数返回一个值。method reference方法引用用::简化 Lambda比如System.out::println。一个新程序员看 Lambda 表达式的代码会觉得“乱”因为它把“遍历—判断—处理”压缩到了一行。但实际开发里list.stream().filter(x - x 5).collect(Collectors.toList())读起来就像一句英语把列表变成流过滤大于 5 的收集成列表。6. JVM 与工程化词汇读懂报错和文档的关键6.1 从 javac 到 JVM源码怎么变成可运行的程序写 Java 必须懂几个“编译运行链条”上的词JDKJava Development KitJava 开发工具包包含编译器javac、调试器jdb、各种工具以及 JRE。JREJava Runtime EnvironmentJava 运行环境只负责运行不能编译。JVMJava Virtual MachineJava 虚拟机执行字节码的核心。bytecode字节码javac编译.java文件后生成的.class文件内容JVM 执行的就是它。classpath类路径告诉 JVM 去哪里找.class文件和依赖库。JITJust-In-Time Compilation即时编译JVM 把热点代码编译成机器码提升性能。GCGarbage Collection垃圾回收自动回收不再使用的对象内存。那句最经典的“Java 一次编译到处运行”靠的就是字节码加 JVM。你用 Windows 编译出的.class文件放到 Linux 上的 JRE 里一样能跑因为 JVM 屏蔽了底层系统差异。6.2 JVM 内存与调优词汇heap、stack、GC 是面试三兄弟当面试聊到 JVM 时以下词汇必须能说出关系heap堆所有对象实例都分配在这里GC 的主要活动区域。stack虚拟机栈每个线程一个存储局部变量、操作数栈、方法调用信息。method area方法区存储类信息、常量、静态变量。Java 8 之后被metaspace元空间取代。metaspace元空间存放类元数据使用本地内存。OutOfMemoryError堆内存耗尽时抛的错误常见于java heap space。StackOverflowError栈溢出递归调用太深时出现。G1、CMS、ZGC垃圾收集器名称G1 是 JDK 9 默认ZGC 主打低延迟。Minor GC/Major GC/Full GC按代际划分的 GC 类型。我实际调优过几次 Java 服务最常看的指标就是堆内存使用率和 GC 停顿时间。新手不用急着背垃圾收集器算法先把“堆、栈、方法区”这三个内存区域的关系理清楚很多线上问题你就能看懂日志了。6.3 构建工具与工程化词汇Maven、Gradle 离不了到了项目阶段你每天都会和构建工具打交道Maven最常用的构建工具用pom.xml管理项目配置。Gradle另一个构建工具用 Groovy/Kotlin DSL 写构建脚本Android 项目常用。dependency依赖也就是你引用的第三方库。repository仓库依赖从仓库下载。中央仓库是 Maven Central国内常用阿里云镜像。artifact构建产物通常指 jar 包或 war 包。jarJava Archive打包后的二进制文件里面包含.class文件和相关资源。warWeb Application ArchiveWeb 应用的打包格式部署到 Tomcat 用。pom.xmlMaven 的项目对象模型文件声明坐标、依赖、插件。groupId/artifactId/version坐标三要素唯一定位一个依赖。新手最容易栽的坑是“依赖冲突”和“包没下载下来”。看到ClassNotFoundException或NoSuchMethodError先检查依赖版本和打包产物多半是坐标版本不一致或者 jar 包没有打进去。7. 面试与周常交流高频词从重灾区话题里摘词7.1 集合框架与并发面试词汇HashMap 底层、CAS、AQS我做技术面试时Java 基础问答里绕不开以下几组词load factor负载因子HashMap 默认 0.75触发扩容的阈值。capacity初始容量HashMap 默认 16。resize扩容当元素数量超过 capacity × load factor 时数组长度翻倍需要重新散列。treeify树化当链表长度超过 8 并且数组长度超过 64 时链表转红黑树。CASCompare And Swap比较并交换无锁并发的基础靠硬件指令保证原子性。ABA problemCAS 的一个经典问题值从 A 变成 B 又变回 A导致 CAS 误判。AQSAbstractQueuedSynchronizerJUC 锁的核心抽象类ReentrantLock、Semaphore 都基于它。happens-beforeJMM 中保证线程可见性的规则。JMMJava Memory ModelJava 内存模型。这些词不是背定义就够的建议配合源码去理解。比如HashMap的put流程网上无数文章但你要能自己说出来计算 hash、定位桶、判断空、判断类型、链表追加还是树化、超过阈值扩容。能说清楚这个流程说明你的原理关基本过了。7.2 框架词汇Spring 生态里的核心名词Spring 是 Java 企业级开发的事实标准相关词汇你早晚要面对IoCInversion of Control控制反转对象的创建和管理交给容器。DIDependency Injection依赖注入IoC 的一种实现方式通过构造器、Setter 或字段注入依赖。BeanSpring 容器管理的对象。AOPAspect Oriented Programming面向切面编程用于日志、事务、权限等横切逻辑。AutoConfiguration自动配置Spring Boot 的核心机制。StarterSpring Boot 的起步依赖引入一个 starter 就引入一组相关依赖。Tomcat最常用的内嵌 Servlet 容器。如果你面试的是 Spring 岗位词汇的“体系感”比零散知识点更重要。面试官问“谈谈你对 IoC 的理解”你不能只答“控制反转”要能展开原来对象自己 new现在交给容器创建你只管声明依赖容器在运行时给你注入好处是解耦、方便替换实现。7.3 数据库与中间件词汇面试串场必备很多 Java 岗位面试还会带上数据库和中间件时间有限我挑高频的列JDBCJava 数据库连接标准接口。MyBatis/JPAORM 框架一个偏 SQL 控制一个偏对象映射。connection pool连接池如 HikariCP、Druid。transaction事务一组操作要么全部成功要么全部回滚。Redis缓存中间件常用来做缓存、分布式锁。MQMessage Queue消息队列如 RabbitMQ、Kafka。idempotent幂等同一个请求执行多次和执行一次结果相同。我记得有个学员去面试被问“为什么接口要做幂等”他当时连这个词都没听懂直接凉了。幂等是分布式系统里的高频概念建议新手早一点接触这个词不用深挖知道含义就行。8. 我背 Java 词汇用的一套土办法最后分享一点个人经验。我刚开始学 Java 时也买过词汇书也试过用手机 App 打卡背单词但效果都不好。原因很简单编程词汇脱离代码语境就是死词。后来我摸索出一套土办法分享给你参考第一以例子为单位记词。不单独背filter而是背list.stream().filter(x - x 0)这个表达式看到 filter 的条件、返回类型词义自然就记住了。词汇在代码里有自己的“生态位”离开生态位去背诵事倍功半。第二隔段时间做一次主题复盘。比如学了集合框架就在周末把 Collection、List、Set、Map、ArrayList、LinkedList、HashMap、TreeMap 全部画在一张纸上写上底层结构、适用场景、常用方法各一个然后自问自答。这个动作花不了二十分钟但比刷十道题都管用。第三利用报错信息学词。ConcurrentModificationException、ClassCastException、NullPointerException每个异常都是最好的“生词卡片”。遇到一个就查一下它是哪个环节出的错、背后的机制词是什么。报错信息学到的词因为你亲身踩过坑记忆牢固程度远超书本。第四也是最重要的尝试给别人讲一遍。你能把一个术语用自己的话说明白才叫真正理解。我带的学员里凡是能流畅讲清“HashMap 为什么不是线程安全”“volatile 和 synchronized 有什么区别”的人基本都能在面试中稳定发挥。Step 21 的词汇盘点到这里就告一段落了。学 Java 是一个长期过程术语会越攒越多但核心的、高频的、底层的就是上面这些。把这批词先吃透后面看 Spring 源码、读并发文档、聊微服务技术你的思路会明显清晰不少。如果哪一类词汇你觉得还不够细评论区告诉我我根据实际项目经验再展开写。
阅读完成 · 觉得有帮助?