标识符与关键字
本教程共 100 篇 · 第 10 篇 · 更新于 2026-08-05 · 约 4 分钟阅读
10. 标识符与关键字
本节目标:理解标识符就是各种「名字」,记住起名必须遵守的硬规则,以及公认的命名约定,并认识那些被 Java 占用了的关键字。
名字也需要规矩
前面写了那么多代码,你一定注意到了:类要起名(Hello)、变量要起名(age)、方法也要起名(main)。
在 Java 里,这些名字统一叫做「标识符」(identifier)。凡是需要你亲自起名的地方,都受同一套规则管。
标识符的规则分两层:一层是硬规则,违反了编译器直接报错;另一层是约定,不报错,但大家都这么写,你跟着写别人才看得懂。
硬规则:必须遵守
起标识符,这四条是底线,错一条都编译不过。
第一,第一个字符必须是字母、下划线 _ 或美元符 $。不能是数字。
第二,第一个字符之后,可以跟任意数量的字母、数字、下划线、美元符。
第三,Java 区分大小写。age 和 Age 是两个不同的标识符。
第四,关键字不能当标识符(关键字清单见后文)。
看几个例子就清楚了:
int age; // 合法:字母开头
int _count; // 合法:下划线开头
int $price; // 合法:美元符开头
int age1; // 合法:字母后跟数字
int 1age; // 非法:数字开头
int my-age; // 非法:不能含减号
int int; // 非法:int 是关键字
```bash
> [!WARNING]
> 虽然 `$` 和 `_` 能开头,但日常几乎不用它们给变量起名。`$` 更多是编译器内部生成的名字在用,你自己写代码就老老实实用字母开头。
## 软约定:大家都这么写
硬规则只管「能不能编译」,软约定管的是「好不好读」。Java 社区有几条约定俗成的写法,照着做,别人一看就懂。
| 东西 | 约定 | 例子 |
|------|------|------|
| 类名 | 大驼峰,首字母大写 | `Student`、`HelloWorld` |
| 方法名 | 小驼峰,首字母小写 | `getAge`、`printInfo` |
| 变量名 | 小驼峰,首字母小写 | `userName`、`totalPrice` |
| 常量(static final) | 全大写,下划线分隔 | `MAX_SIZE`、`PI` |
| 包名 | 全小写,点分隔 | `com.example.util` |
大驼峰的意思是:每个单词首字母都大写,像 `HelloWorld`。小驼峰只是把第一个单词的首字母放小写,像 `helloWorld`。
```java
public class StudentScore { // 类名:大驼峰
public static final int MAX_SCORE = 100; // 常量:全大写下划线
private int studentId; // 变量:小驼峰
public void printScore() { // 方法:小驼峰
System.out.println(MAX_SCORE);
}
}
起有意义的名字
规则之外,还有一条朴素的建议:名字要能看懂。
int a; 能编译,但三个月后你不知道 a 是啥。int studentAge; 多打几个字,省下的是日后抓破头的功夫。
Tip别怕名字长。现代 IDE 有自动补全,名字长一点不影响你敲代码速度,却大大提升了可读性。宁可读得懂,不要写得短。
关键字是 Java 的「保留字」
关键字是 Java 语言自己占用的单词,有特殊含义,你不能拿它们当名字。比如 int 表示整数类型,class 表示类,if 表示条件判断。
下面是一份常用关键字速查表,按用途分了类。不用背,混个眼熟,写代码时遇到报错回来查就行:
| 类别 | 关键字 |
|---|---|
| 基本类型 | byte short int long float double char boolean |
| 流程控制 | if else switch case default for while do break continue return |
| 访问修饰 | public protected private |
| 类与对象 | class interface enum extends implements new this super instanceof |
| 修饰符 | static final abstract native synchronized volatile transient strictfp |
| 异常处理 | try catch finally throw throws assert |
| 包相关 | package import |
| 其他 | void var(Java 10 引入) |
两个特殊保留字
表里有两位很特殊:goto 和 const。它们是「保留字」——现在 Java 没用上,但也不许你当标识符,留着将来可能用。
还有三个你天天见的家伙:true、false、null。它们不是关键字,叫「字面量」。但同样不能当标识符用——你不可能起个变量叫 true。
Note实际写代码时,几乎不会「不小心」用到关键字当名字,因为 IDE 会把关键字标成另一种颜色,一眼就能看出来。真要撞上了,改个名就好。
冷知识:标识符可以是中文
Java 用的是 Unicode 字符集,理论上只要是中国字、日本字、甚至表情符号,只要符合「字母开头」的规则,都能当标识符。
int 年龄 = 18; // 能编译,真的
System.out.println(年龄);
```bash
这段代码完全合法。但**强烈不建议**你这么写。中文标识符在团队协作、跨平台工具链里容易出各种幺蛾子,而且和大家的习惯格格不入。
把它当个冷知识知道就行,实际项目里老老实实用英文。
## 同一作用域不能重名
还有一条隐含规则:在**同一个作用域**里,两个标识符不能一样。比如一个方法里不能声明两个同名的局部变量:
```java
public void test() {
int score = 90;
int score = 80; // 编译报错:score 已经定义过了
}
这条不是「关键字」问题,而是编译器要保证每个名字能唯一对应到一个东西。具体的作用域概念,到面向对象部分会讲清楚。
小结
标识符是类名、变量名、方法名的统称。硬规则:字母/_/$ 开头、后续可跟数字、区分大小写、不能用关键字。
软约定:类名大驼峰、方法变量小驼峰、常量全大写下划线、包名全小写。名字要起得有意义。
关键字是 Java 占用的保留字,不能当名字;goto、const 是保留字,true、false、null 是字面量,同样不能用作标识符。