首页 / Java 入门教程 / 标识符与关键字

Java 入门教程

标识符与关键字

本教程共 100 篇 · 第 10 篇 · 更新于 2026-08-05 · 约 4 分钟阅读

JavaJava 入门教程标识符identifier关键字keyword命名规范

10. 标识符与关键字

本节目标:理解标识符就是各种「名字」,记住起名必须遵守的硬规则,以及公认的命名约定,并认识那些被 Java 占用了的关键字。

名字也需要规矩

前面写了那么多代码,你一定注意到了:类要起名(Hello)、变量要起名(age)、方法也要起名(main)。

在 Java 里,这些名字统一叫做「标识符」(identifier)。凡是需要你亲自起名的地方,都受同一套规则管。

标识符的规则分两层:一层是硬规则,违反了编译器直接报错;另一层是约定,不报错,但大家都这么写,你跟着写别人才看得懂。

硬规则:必须遵守

起标识符,这四条是底线,错一条都编译不过。

第一,第一个字符必须是字母、下划线 _ 或美元符 $。不能是数字。

第二,第一个字符之后,可以跟任意数量的字母、数字、下划线、美元符。

第三,Java 区分大小写ageAge 是两个不同的标识符。

第四,关键字不能当标识符(关键字清单见后文)。

看几个例子就清楚了:

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 引入)

两个特殊保留字

表里有两位很特殊:gotoconst。它们是「保留字」——现在 Java 没用上,但也不许你当标识符,留着将来可能用。

还有三个你天天见的家伙:truefalsenull。它们不是关键字,叫「字面量」。但同样不能当标识符用——你不可能起个变量叫 true

Note

实际写代码时,几乎不会「不小心」用到关键字当名字,因为 IDE 会把关键字标成另一种颜色,一眼就能看出来。真要撞上了,改个名就好。

冷知识:标识符可以是中文

Java 用的是 Unicode 字符集,理论上只要是中国字、日本字、甚至表情符号,只要符合「字母开头」的规则,都能当标识符。

int 年龄 = 18;          // 能编译,真的
System.out.println(年龄);
```bash

这段代码完全合法。但**强烈不建议**你这么写。中文标识符在团队协作、跨平台工具链里容易出各种幺蛾子,而且和大家的习惯格格不入。

把它当个冷知识知道就行,实际项目里老老实实用英文。

## 同一作用域不能重名

还有一条隐含规则:在**同一个作用域**里,两个标识符不能一样。比如一个方法里不能声明两个同名的局部变量:

```java
public void test() {
    int score = 90;
    int score = 80;   // 编译报错:score 已经定义过了
}

这条不是「关键字」问题,而是编译器要保证每个名字能唯一对应到一个东西。具体的作用域概念,到面向对象部分会讲清楚。

小结

标识符是类名、变量名、方法名的统称。硬规则:字母/_/$ 开头、后续可跟数字、区分大小写、不能用关键字。

软约定:类名大驼峰、方法变量小驼峰、常量全大写下划线、包名全小写。名字要起得有意义。

关键字是 Java 占用的保留字,不能当名字;gotoconst 是保留字,truefalsenull 是字面量,同样不能用作标识符。