繁体   English   中英

Java class 名称中的有效字符

[英]Valid characters in a Java class name

Java class 名称中哪些字符是有效的? 还有哪些其他规则适用于 Java class 名称(例如,Java ZA2F2ED4F8EBC2CBB1D 名称不能以数字开头?0)

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

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

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

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

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

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

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

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

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

来自 官方 Java 教程

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

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

$var1 £var2 €var3

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

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

相比:

class 员工:public IPayable //C++

class 员工:IPayable //C#

class Employee实现Payable //Java

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

私人双倍工资;

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

私人双薪_;

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

"An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter. [...] A 'Java letter' is a character for which the method Character.isJavaIdentifierStart(int) returns真。“Java 字母或数字”是 Character.isJavaIdentifierPart(int) 方法返回真的字符。

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

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

还有哪些其他规则适用于 Java class 名称(例如,Java ZA2F2ED4F8EBC2CBB1D 名称不能以数字开头?0)

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

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

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

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

AvgTemp,count a4,$test,this_is_ok

无效的变量名称包括:

2计数,高温,不/正常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM