学Java学到step-17,很多朋友跑来问我同一个问题:代码里的报错看不太懂,是英语太差吗?其实不是,多数情况下你只是不认识那几十个固定的技术单词。比如看到implements不知道它是实现某个接口的意思,看到synchronized拼都拼不出来,更别说把AbstractQueuedSynchronizer拆成抽象队列同步器了。这一篇Java编程语言单词汇总,我专门按实际场景分类来讲。
和背单词书不同的是,我不打算从A到Z罗列,而是按照你实际遇到它们的场景来分类:先解决语法关键字,再搞定面向对象、集合框架、异常调试、面试竞赛,最后是看企业项目时的高频业务词。适合刚入门Java、准备Java面试或者正在刷蓝桥杯的同学,把这篇文章当成一份能随手查的单词清单,而不是一本需要从头啃到尾的词典。
个人经验先说一句:Java的英文词汇量真没有想象中大。你在代码里看到的标识符、类名、报错信息,翻来覆去就是那几百个单词的排列组合,高频的核心词可能不到一百个。把这一百个词按场景吃透,比背一千个生词有用得多。
1. 从Hello World开始:语法关键字里的高频单词
这一章的内容是代码第一屏就会碰到的词。不用每个都背,但下面这几组必须烂熟于心。
1.1 访问控制符:public、private、protected
public本意是“公共的”,修饰类、方法、字段时表示所有地方都能访问。private是“私有的”,只能在自己类的内部访问。protected是最容易让人误解的一个词,它并不是比public更安全,而是“包内可见,加子类可见”。在Java里还有一种没有修饰符的状态,叫package-private,package是“包”,合起来就是“包私有”,意思是同一个包内才能访问。
为什么需要这些词?英文原意直接对应Java语义:public、private、protected控制的是“访问范围”。面试里常考的问题“protected和public的区别是什么”,按这个思路答就不会乱:
- public:谁都能用。
- private:只有我自己能用。
- protected:同一个包里的朋友和我的子类能用。
- package-private(不写修饰符):同一个包里的朋友能用。
1.2 static和final:一对容易用混的修饰词
static本意是“静止的、静态的”。在Java里表示这个成员属于类本身,不依赖任何对象,所以static方法可以用类名直接调用,不需要先new一个对象。很多人问为什么main方法要写成public static void main,static的原因就是:JVM启动时还没有任何对象,必须让main方法不依赖对象就能被调用。
final本意是“最终的、不可改变的”。final class不能被继承,final method不能被重写,final variable只能赋值一次。常量定义的经典写法static final int MAX_SIZE = 100;,static管“类级别只有一份”,final管“值不能变”,两个词的英文含义合起来就是“静态的、最终的值”。
1.3 void、return、new、this、super这些“小词”别小看
void原意“空的”,方法声明void就是“不返回任何值”。return是“返回”,return x;就是把x作为结果交给调用者。new是“新建”,new一个对象等于在堆内存里创建一个实例。this是“这个”,指向当前对象;super是“上级、父类”,用来访问父类成员。这几个词都很小,但拼写错误率极高。return被写成retrun、reutrn,interface被拆成interfa ce,synchronized拼不完整,都是我在答疑里见过不止一次的。
| 单词 | 英文含义 | Java场景 |
|---|---|---|
| public | 公共的 | 任意位置可访问 |
| private | 私有的 | 当前类内部可访问 |
| protected | 受保护的 | 同包加子类可访问 |
| static | 静态的 | 属于类,不依赖对象 |
| final | 最终的 | 不可重新赋值,不可继承或重写 |
| void | 空的 | 方法无返回值 |
| return | 返回 | 把结果交给调用者 |
| new | 新的 | 创建对象实例 |
| this | 这个 | 当前对象的引用 |
| super | 上级 | 父类对象的引用 |
提示:Java的关键字都是小写,也不能用作标识符。如果变量命名时想用class、public、static这些词,IDE会直接报错,因为它们是语言预先保留的“单词”。
2. 面向对象英语:类、对象、继承、多态的单词原型
面向对象是Java的核心,这一章的词在简历上、面试里几乎是必考的。
2.1 class、object、instance、field、method、constructor
class英文原意是“类别、班级”。在Java里它是描述一类事物的模板,所以写class Student就是定义一个“学生类别”。object原意“物体、目标”,在Java里叫对象,是所有具体数据的载体。instance是“实例、例子”,对象和实例经常混着说,其实是一个意思:类是图纸,对象是造出来的那台机器,instance是这台机器在内存里的具体存在。
field原意“田地”,在Java里是类的属性。也有人叫attribute(属性)或property(性质),字段的英文词义强调“数据长在类这块地上”。method原意“方法、手段”,在Java里是类能执行的动作。constructor原意“建造者”,是创建对象时自动执行的那段初始化代码,它是new后面真正干活的函数。构造方法没有返回值类型,这一点新手很容易疑惑:它本身就是“造对象”的,造出来的对象就是返回值,没有必要再声明一次类型。
2.2 encapsulation、inheritance、polymorphism三座大山
encapsulation是封装,词根capsule是“胶囊”,encapsulation就是把药装进胶囊里的动作。Java里把数据和方法包进类里面,外部只能通过公开方法访问,放在private里的数据就像胶囊里的药粉,看不见也碰不到。inheritance是继承,用extends落实,“子类自动获得父类非私有成员”这件事就叫继承。polymorphism是多态,poly-是“多”,morph是“形态”,合起来就是“多种形态”。同一个父类引用指向不同子类对象,调用同一个方法会表现出不同行为,这是面试最常考的概念之一。
我自己的理解是,面向对象三支柱可以直接用英文词义去背:encapsulation是把细节装进胶囊,inheritance是儿子继承爹的东西,polymorphism是一个动作在不同对象身上长成不同样子。
2.3 abstract、interface、extends、implements
abstract是“抽象的”,在Java里表示只定规范、不写具体实现。interface是“接口”,本意是“界面、交汇处”,电脑上的USB口就是interface,两个设备通过这个口交换数据,Java里的interface同样只是“约定”,不负责具体实现。extends是“延伸”,类继承类用extends,意思是新类“延伸”父类的功能。implements是“实现、落实”,类实现接口用implements,意思是把接口里约定的方法逐个写出来。
有人会混淆extends和implements,分开记就行:extends像你继承了父母的房子,可以直接住;implements像你接了外包合同,活必须自己干。继承是“拿现成的”,实现是“履约”。这个区分在写代码时非常重要,认错一个关键字,编译都过不了。
3. 集合框架里的类名,是一串会说英文的数据结构说明书
进了业务代码阶段,集合框架是天天见的。很多初学者复制粘贴ArrayList、HashMap用得很溜,却不知道这些类名本身就是英文单词,而且名字直接透露了底层数据结构。
3.1 Collection、List、Set、Map:容器四件套的语义分工
Collection是“集合、收藏品”,是Java里所有单列集合的顶级接口。List是“列表”,强调有序、可重复,所以List的实现类都有索引。Set是“集合”,数学里的集合不允许有重复元素,Java的Set也是一样。Map是“地图、映射”,像地图上的“地名对应位置”一样,存的是key-value键值对。
面试中常问“为什么Map不继承Collection”,用词义回答非常清晰:Collection里装的是一个个孤独的元素,Map里装的是成双成对的映射关系,把一对数据塞进单列集合就破坏了语义。它俩都叫“集合”,但不是一回事。
3.2 实现类命名的规律:Array、Linked、Hash、Tree
类名 = 前缀描述结构 + 接口名。看到ArrayList就知道它是“基于数组的列表”,数组在内存里连续排列,所以随机访问快。LinkedList是“用链表串起来的列表”,链表靠指针一个个连下去,所以插入删除快。HashSet、HashMap里的Hash指哈希表,按哈希值散列存放,所以它们不保证顺序。TreeSet、TreeMap里的Tree指树形结构,树可以按规则排列,所以它们可以按自然顺序或自定义比较器排序。
这个规律解决了一个很实际的困惑:面试问“HashMap和TreeMap有什么区别”,不需要背什么长篇大论,先说名字——HashMap是哈希散列存储,无序;TreeMap是红黑树存储,有序。底层原理的名字已经写在类名里了。
3.3 Comparable和Comparator,两个“比较词”的分工
Comparable和Comparator长得太像了,是面试低分重灾区。区别就在后缀。-able结尾表示“可…的”,所以Comparable是“自己具备比较能力”,类实现Comparable接口后,对象自己能和别人比,方法是compareTo。-or结尾表示“做…的人或工具”,所以Comparator是“外部的比较工具”,由第三方提供一个规则,方法是compare。
- 让元素实现Comparable:元素的类里写compareTo。
- 给排序方法传一个Comparator:单独写一个类或Lambda表达式的compare。
Arrays.sort和Collections.sort这两个排序工具类名也值得记:Arrays是数组的工具箱,Collections是集合的工具箱,都是静态工具方法的集散地。StringBuilder里的Builder是“建造者”,用来高效拼接字符串。Iterator是“迭代器”,来自iterate(重复、迭代),作用就是挨个遍历容器里的元素。热搜里“java排序”“蓝桥杯算法题目”相关场景,基本都绕不开这几个名字。
4. 把红色报错当英语阅读题:异常与调试相关单词
看到红色报错就慌是新手常态。其实Java的报错信息是最标准的英语,每个异常名都能拆成几个常见单词,读懂它们比背异常类列表有用得多。
4.1 Exception、Error、RuntimeException:异常体系的三个关键名词
Exception是“例外”,程序里的意外情况。Error是“错误”,通常是JVM层面的严重问题,程序自身一般处理不了。RuntimeException是“运行期异常”,Runtime是“运行时”,这类异常属于unchecked exception,编译器不强制你处理。
常见异常名拆开看全是基础词汇:
- NullPointerException:Null(空)+ Pointer(指针)+ Exception(异常),空指针异常,指访问了一个没有指向对象的引用。
- ArrayIndexOutOfBoundsException:Array(数组)+ Index(索引)+ Out of Bounds(超出界限),数组索引越界。这正是不少人搜过的“java中数组越界异常”。
- NumberFormatException:Number(数字)+ Format(格式)+ Exception,数字格式转换失败。
- ClassNotFoundException:Class(类)+ Not Found(没找到),加载类时找不到对应类。
4.2 throw、throws、try、catch、finally这组动作词
try是“尝试”,把可能出问题的代码放进去试;catch是“抓住”,捕获并处理异常;finally是“最终”,无论有没有异常都会执行,常用于关闭资源。throw是“抛出”,动作发生在代码里,后面跟异常对象;throws是“声明抛出”,写在方法签名后面,后面跟异常类型。throw new IOException()和public void read() throws IOException,一个在方法体内,一个在方法名旁边。
注意:finally里的代码即使碰到return也会执行,除非杀进程。这是面试必问的隐藏点,它背后的语义恰恰是“最终”两个字——无论中途怎么走,最后一步都要做。
4.3 编译和调试阶段的用词:compile、debug、breakpoint、stack trace
compile是“编译”,把.java变成.class。debug是“除虫”,传说早期计算机真的飞进虫子导致故障,从此debug就是排除代码问题。IDE里最常见的几个调试动作:breakpoint是断点,step over是单步跳过(不进入方法内部),step into是单步进入(进入方法内部),stack trace是堆栈踪迹。看报错时那一串“at 类名.方法名(文件:行号)”就是stack trace,它告诉你程序是从哪条路走到报错位置的。
这里有个实用心得:读报错先看第一行异常类型,再看最后一处“at”指向的代码,八成问题就在那。中间的调用链只是案发现场的路径,不用逐行紧张。
5. 面试与蓝桥杯都要眼熟的高频缩写:JVM、GC、DFS、DP
到了面试准备和竞赛刷题阶段,单词的重点从“完整单词”变成了“缩写和术语”。面试常被调侃要背的八股文,本质上就是这些术语的中文版,理解英文原词,八股也背得快。
5.1 JDK、JRE、JVM,环境配置里的三件套
JDK是Java Development Kit,开发工具包,包含编译器、运行时、类库。JRE是Java Runtime Environment,运行环境,只负责能跑起来。JVM是Java Virtual Machine,虚拟机,是Java跨平台的基础。装Java时配置环境变量,配的就是JDK里的bin目录,bin是binary(二进制)的缩写,里面放着javac、java这些可执行程序。
区分三者的土办法:JVM是发动机,JRE是发动机加上驾驶室,JDK是整车还附带了维修工具包。开发用JDK,只运行装JRE也够。GC是Garbage Collection,垃圾回收。Garbage是“垃圾”,Collection是“收集”,JVM自动回收不再使用的对象内存。面试问“GC什么时候触发、哪些对象会被回收”,理解“垃圾”这个词就能推理出答案:没有任何引用指向的对象,就是等待收集的垃圾。
5.2 Thread、Runnable、Synchronized、Volatile、Deadlock
Thread是“线”,线程就是程序里一条独立的执行线索。Runnable是可运行的,-able后缀又出现了,表示“能被运行的”,所以Runnable是一个只有run方法的接口。Synchronized是“同步的”,同一时刻只允许一个线程进入临界区。Volatile是“易变的”,告诉JVM这个变量随时可能被多个线程改,不要使用本地缓存,每次都从主内存读。Deadlock是“死锁”,Dead是死,Lock是锁,两个线程互相持有对方需要的锁,谁都等不到。
这一组词里,synchronized是拼写重灾区,单词长、拼写不符合发音直觉。我建议动手多写几遍,面试让手写单例模式时,这个关键词几乎必出。
5.3 蓝桥杯场景的缩写:DFS、BFS、DP、Greedy、Backtracking
参加蓝桥杯这类竞赛时,算法词英文含义就是算法思想本身:
- DFS:Depth First Search,深度优先搜索。Depth是深度,First是第一或优先,Search是搜索。
- BFS:Breadth First Search,广度优先搜索。Breadth是宽度。
- DP:Dynamic Programming,动态规划。Dynamic是动态的,这里的Programming不是写代码,而是“规划”。
- Greedy:贪心算法,每一步都选当前看起来最优的解。
- Backtracking:回溯算法,走一步发现不对就退回上一步换条路。
做数字类题目时,DFS/BFS常用于搜索与枚举,DP常用于最优化问题,Greedy用于有最优子结构的场景。看到题目类型能马上反应出缩写,解题效率会高很多。
5.4 Generic、Reflection、Serialization、Annotation几个进阶术语
Generic是泛型,词根gen有“种类”的意思,把类型本身也变成参数。Reflection是反射,像照镜子一样让程序在运行期看到自己的结构。Serialization是序列化,把对象变成字节流,便于传输和存储。Annotation是注解,给代码贴“便签”,框架通过读注解来了解代码意图。这几个词在面试中常被连着问,理解了英文原意,至少不会在概念上犯迷糊。
6. 企业项目里的“业务英语”:Controller到Consistency
如果已经过了基础语法这关,开始接触企业项目、Spring MVC、微服务,又会遇到一批新的高频词。这一批词不需要背单词书,结合项目结构看两遍就能记住。
6.1 分层架构常用词:Controller、Service、DAO/Repository、Entity
一个典型后端项目从入口到数据库,基本是Controller → Service → DAO/Repository → Entity这套结构。Controller是“控制器”,负责接收请求和返回响应;Service是“服务层”,放业务逻辑;DAO是Data Access Object,数据访问对象;Repository是“仓库”,Spring Data里更常用;Entity是“实体”,对应数据库表中的一行记录。
看到新的类名,先想它属于哪一层,职责就猜得差不多。比如UserController一定跟用户接口有关,UserService一定跟用户业务逻辑有关,UserMapper(Mapper是“映射器”)一定跟数据库操作有关。这一套词背下来,看Spring Boot项目的目录结构基本不会晕。热搜里“controller层如何防护爬虫”本质是给接口层加校验和限流逻辑,Controller的职责搞清楚了,这类问题也容易定位。
6.2 事务、一致性、权限:Transaction、Consistency、Permission
Transaction是“事务”,一组操作要么全成功,要么全回滚。Consistency是“一致性”,比如“java怎么保证数据一致性”,核心就是事务、锁、同步这些机制。Permission是“权限”,per-有“贯穿、完全”的意思,mission是“派遣”,合起来是“被允许做的事”。行级权限叫Row-level Permission,控制用户只能看到某些行的数据。
这类词建议直接用英文原意理解,而不是背中文翻译。记住transaction是“一笔交易的所有环节”,consistent是“数据到处都一样”,permission是“谁被允许干什么”,再看框架的具体实现就不会觉得玄。
6.3 环境与部署:Path、Classpath、Jar、Container
Path在环境变量配置里等于“搜索路径”,系统在Path列出的目录里找命令。配Java环境变量,就是把JDK的bin目录加进Path,这样你在任意目录敲javac或java,系统都能找到可执行程序。Classpath是类路径,JVM在Classpath里找.class文件。Jar是Java ARchive的缩写,把一组.class和配置文件打成一个包。Container是“容器”,把应用和依赖一起打包成可移植的单元。Gateway是“网关”,请求进入系统的大门。
新手配环境变量最容易犯的错是只配了Path没配JAVA_HOME,结果很多工具找不到JDK。JAVA_HOME就是一个约定好的环境变量名,指向JDK安装目录,Tomcat、Maven这些工具都靠它定位Java。现代构建工具Maven、Gradle会自动管理Classpath,多数情况下不用手配,但面试问起来要能说出它是“类文件搜索路径”。
到这里,这份Java编程语言单词汇总也就说得差不多了。我最开始学Java时也抄过一份单词表,抄完就忘。后来改成“代码阅读障碍清单”:每遇到一个不认识又高频的单词,就写进一个文件,附上出现位置和翻译,每周翻一遍。三个月后,源码注释、报错信息、IDE提示基本都能流畅读下来。step-17到这里,step-18我们继续。