Java类名称中的有效字符


72

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


1
Java中可能存在合法标识符的重复,因为docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1表示:class Identifier。这是旧的方式,但其他的方式更upvoted和更普遍的:同样为方法,变量等
西罗桑蒂利郝海东冠状病六四事件法轮功

Answers:


60

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

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

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

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

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


3
“ ...包括大多数Unicode字符” -我一直很喜欢Java。您可以从字面上π用作pi的变量名。
jww

14

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

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

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

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

摘自Java官方教程


7
操作人员正在询问类名而不是变量名!
electronicix384128

10

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

  1. Java允许在符号名称中使用任何Unicode货币符号,因此以下各项均适用:

$ var1£var2€var3

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

  1. 许多C#和C ++程序员都采用将“ I”放在接口(C ++中的纯虚拟类)前面的约定。在Java中,这不是必需的,因此也不需要这样做,因为当某些东西是接口时,Implements关键字可以使它非常清楚。

比较:

员工类别:公共IPayable // C ++

员工类别:IPayable // C#

Employee类实现Payable // Java

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

私人双薪水;

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

私人双薪


2
“许多项目使用在字段名称前加下划线的约定” ..哪种语言?Java还是C ++?
佩里耶

4

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

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

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


2

我想补充一下bosnic的答案,即任何有效的货币字符对于Java中的标识符都是合法的。这是合法的标识符,this和€也是如此。但是,我不知道如何编辑他或她的答案,因此我被迫发布此琐碎的附加内容。


1

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

  • Java类名通常以大写字母开头。
  • Java类名称不能以数字开头。
  • 如果类名中有多个单词,例如“ MyClassName”,则每个单词应以大写字母开头。例如-“ MyClassName”。此命名约定基于CamelCase Type。


0

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

AvgTemp,计数a4,$ test,this_is_ok

无效的变量名称包括:

2count,高温,不行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.