77

Java 类名中哪些字符是有效的?还有哪些其他规则管理 Java 类名(例如,Java 类名不能以数字开头)?

4

8 回答 8

64

您可以拥有几乎任何字符,包括大多数 Unicode 字符!确切的定义在Java 语言规范第 3.8 节:标识符下

标识符Java 字母Java 数字的无限长度序列,其中第一个必须是Java 字母。...

字母和数字可能来自整个 Unicode 字符集,......这允许程序员在他们的程序中使用以他们的母语编写的标识符。

标识符不能与关键字(第 3.9 节)、布尔文字(第 3.10.3 节)或空文字(第 3.10.7 节)具有相同的拼写(Unicode 字符序列),否则会发生编译时错误。

但是,请参阅此问题以了解您是否应该这样做。

于 2008-09-15T18:37:06.583 回答
15

对于允许使用的名称类型,每种编程语言都有自己的一套规则和约定,Java 编程语言也不例外。命名变量的规则和约定可以总结如下:

  • 变量名区分大小写。变量的名称可以是任何合法标识符——长度不限的 Unicode 字母和数字序列,以字母、美元符号“$”或下划线字符“_”开头。但是,惯例是始终以字母开头变量名,而不是“$”或“_”。此外,按照惯例,从不使用美元符号字符。您可能会发现在某些情况下自动生成的名称将包含美元符号,但您的变量名称应始终避免使用它。下划线字符也有类似的约定;虽然以“_”开头的变量名称在技术上是合法的,但不鼓励这种做法。不允许使用空格。

  • 后续字符可以是字母、数字、美元符号或下划线字符。惯例(和常识)也适用于该规则。为变量选择名称时,请使用完整的单词而不是隐晦的缩写。这样做将使您的代码更易于阅读和理解。在许多情况下,它还会使您的代码自我记录;例如,名为 cadence、speed 和 gear 的字段比 s、c 和 g 等缩写版本更直观。另请记住,您选择的名称不能是关键字或保留字。

  • 如果您选择的名称仅包含一个单词,则将该单词拼写为所有小写字母。如果它包含多个单词,则将每个后续单词的第一个字母大写。名称 gearRatio 和 currentGear 是该约定的主要示例。如果您的变量存储一个常量值,例如static final int NUM_GEARS = 6,则约定会略有变化,将每个字母大写并用下划线分隔后续单词。按照惯例,下划线字符从不在其他地方使用。

来自官方 Java 教程

于 2008-09-15T18:41:17.010 回答
11

除了先前的答案,值得注意的是:

  1. Java 允许在符号名称中使用任何 Unicode 货币符号,因此以下所有操作都可以:

$var1 £var2 €var3

我相信货币符号的使用起源于 C/C++,其中由编译器添加到代码中的变量通常以“$”开头。Java 中一个明显的例子是内部类的“.class”文件的名称,按照惯例,其格式为“Outer$Inner.class”

  1. 许多 C# 和 C++ 程序员采用将“I”放在接口(也称为 C++ 中的纯虚拟类)前面的约定。这在 Java 中不是必需的,因此也不需要这样做,因为 implements 关键字可以非常清楚地说明什么时候是接口。

比较:

class Employee : public IPayable //C++

员工类:IPayable //C#

Employee类实现Payable //Java

  1. 许多项目使用在字段名称前放置下划线的约定,以便它们可以很容易地与局部变量和参数区分开来,例如

私人双倍工资;

极少数人在字段名称之后放置下划线,例如

私人双薪_;

于 2008-09-15T19:49:12.247 回答
5

正如 Jason Cohen 所述,Java 语言规范在 3.8 节中定义了合法标识符是什么:

“标识符是 Java 字母和 Java 数字的无限长度序列,其中第一个必须是 Java 字母。[...]‘Java 字母’是 Character.isJavaIdentifierStart(int) 方法返回的字符真。“Java 字母或数字”是 Character.isJavaIdentifierPart(int) 方法返回真的字符。

这希望能回答你的第二个问题。关于你的第一个问题;老师和(据我所知)Java 编译器都教过我,Java 类名应该是一个以大写字母 AZ 开头的标识符,但我找不到任何可靠的来源。在使用 OpenJDK 进行尝试时,以小写字母甚至 $ 符号开头的类名不会出现警告。但是,在使用 $ 符号时,如果您从 bash shell 编译,则必须将其转义。

于 2012-06-26T14:20:21.890 回答
2

我想补充一下 bosnic 的答案,即任何有效的货币字符对于 Java 中的标识符都是合法的。th€is 是合法标识符,€this 和€ 也是如此。但是,我不知道如何编辑他或她的答案,所以我不得不发布这个微不足道的补充。

于 2008-09-15T19:27:18.413 回答
1

还有哪些其他规则管理 Java 类名(例如,Java 类名不能以数字开头)?

  • Java 类名通常以大写字母开头。
  • Java 类名不能以数字开头。
  • 如果类名中有多个单词,例如“MyClassName”,每个单词都应该以大写字母开头。例如-“MyClassName”。此命名约定基于CamelCase类型。
于 2017-02-18T19:19:52.567 回答
0

类名应该是大写形式的名词,每个单词的首字母大写。使用完整的单词——避免使用首字母缩写词和缩写词(除非缩写词比长格式更广泛使用,例如 URL 或 HTML)。可以在此处阅读命名约定:

http://www.oracle.com/technetwork/java/codeconventions-135099.html

于 2015-01-18T15:55:09.270 回答
0

标识符用于类名、方法名和变量名。标识符可以是大写和小写字母、数字或下划线和美元符号字符的任何描述性序列。它们不能以数字开头,以免与数字文字混淆。同样,Java 区分大小写,因此 VALUE 是不同于 Value 的标识符。有效标识符的一些示例是:

AvgTemp ,count a4 ,$test ,this_is_ok

无效的变量名称包括:

2计数,高温,不/正常

于 2016-09-07T13:25:38.373 回答