Java类名中的有效字符

Zac*_*ach 68 java unicode class invalid-characters naming-conventions

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

Jas*_*hen 57

你几乎可以拥有任何角色,包括大多数Unicode角色!确切的定义在Java语言规范的3.8节:标识符中.

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

可以从整个Unicode字符集中绘制字母和数字,...这允许程序员在其程序中使用以其本机语言编写的标识符.

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

但是,请看这个问题是否应该这样做.

  • *"......包括大多数Unicode字符"* - 我一直很喜欢Java.您可以逐字地使用***`π`***作为pi的变量名. (3认同)

Iva*_*nic 16

每种编程语言都有自己的规则和约定,适用于您允许使用的各种名称,Java编程语言也不例外.命名变量的规则和约定可归纳如下:

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

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

  • 如果您选择的名称只包含一个单词,则以全小写字母拼写该单词.如果它由多个单词组成,则将每个后续单词的首字母大写.名称gearRatio和currentGear是此约定的主要示例.如果您的变量存储一个常量值,例如static final int NUM_GEARS = 6,约定会略有变化,将每个字母大写并用后突字符分隔后续单词.按照惯例,下划线字符从未在别处使用过.

来自官方Java教程.

  • 操作系统询问的是类名而不是变量名! (4认同)

Gar*_*our 10

继前面的答案之后,值得注意的是:

  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++

class Employee:IPayable // C#

class Employee实现Payable // Java

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

私人双_salary;

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

私人双薪_;

  • “许多项目使用在字段名称前放置下划线的约定”......哪种语言?Java 还是 C++? (2认同)

Eri*_*F89 5

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

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

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