Java类名中的有效字符

时间:2008-09-15 18:35:04

标签: java class unicode naming-conventions invalid-characters

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

8 个答案:

答案 0 :(得分:56)

你几乎可以拥有任何角色,包括大多数Unicode角色!确切的定义在the Java Language Specification under section 3.8: Identifiers

  

标识符 Java letters Java digits 的无限长度序列,第一个必须是 Java信。 ...

     

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

     

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

但是,请参阅this question是否应该这样做。

答案 1 :(得分:16)

  

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

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

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

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

  •   

来自the official Java Tutorial

答案 2 :(得分:10)

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

  1. Java允许符号名称中的任何Unicode货币符号,因此以下内容都可以使用:
  2.   

    $ VAR1   £VAR2   €VAR3

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

    1. 许多C#和C ++程序员采用在接口前面放置'I'的惯例(在C ++中也称为纯虚拟类)。这在Java中不是必需的,因此也没有完成,因为implements关键字在某些东西是接口时非常清楚。
    2. 比较

        

      类Employee:public IPayable // C ++

        

      类员工:IPayable // C#

        

      类Employee实现Payable // Java

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

        private double _salary;

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

          

        私人双薪_;

答案 3 :(得分:4)

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

“标识符是Java字母和Java数字的无限长度序列, 第一个必须是Java字母。 [...]'Java letter'是Character.isJavaIdentifierStart(int)方法返回true的字符。 “Java letter-or-digit”是Character.isJavaIdentifierPart(int)方法返回true的字符。“

这有希望回答你的第二个问题。关于你的第一个问题;我已经被老师和(据我记忆所知)Java编译器教过,Java类名称应该是以大写字母A-Z开头的标识符,但我找不到任何可靠的来源。使用OpenJDK进行尝试时,在使用小写字母或甚至$ -sign开始类名时没有警告。当使用$ -sign时,如果从bash shell编译,则必须将其转义。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

  

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

AvgTemp,计数a4,$ test,this_is_ok

无效的变量名称包括:

2count,high-temp,Not / ok