命名惯例分为两大类:字面的(typographical)和语法的(grammatical)。
1、字面的命名惯例比较少,但也涉及包,类,方法,域和类型变量。
- 包的名称应该是层次状的,用句号分隔每个部分。任何将在你的组织之外使用的包,其名称都应该以你的组织的Internet域名开头,并且将顶级域名放在前面,例如com.sun ,gov.nsa。标准类库和一些可选的包,其名称以java和javax开头,这属于这一规则的例外。
- 类和接口的名称,包括枚举和注解类型的名称,都应该包括一个或者多个单词,每个单词的首字母大写,例如Timer和TimerTask。应该尽量避免用缩写,除非是一些首字母缩写和一些通用的缩写,比如max和min。
- 方法和域的名称与类和接口的名称一样,都遵守相同的字面惯例,只不过方法或者域的名称的第一个字母应该小写,例如remove,ensureCapacity。
- 唯一的例外是“常量域”,它的名称应该包含一个或者多个大写的单词,中间用下划线隔开,例如VALUES,NEGATIVE_INFINITY。常量域是静态final域,它的值是不可变的。
- 类型参数名称通常由单个字母组成。这个字母通常是以下五种类型之一:T代表任意的类型 , E表示集合的元素类型 , K和V表示映射的键和值的类型 , X表示异常的类型。任何类型的序列可以是T,U,V或者T1,T2,T3。
2、语法命名惯例比字面惯例更加灵活,也更有争议。
- 对于包而言,没有语法命名惯例。类(包括枚举类型)通常用一个名词或者名词短语命名,例如Timer、BufferedWriter或者ChessPiece。接口的命名与类相似,或者以"-able"或"-ible"结尾的形容词,如Runnable。由于注解类型有那么多用处,因此没有单独安排词类。名词、动词、介词和形容词都很常用,例如BindingAnnotation、Inject。
- 执行某个动作的方法,常用一个动词或动词短语,如append或drawImage。
- 对于返回boolean类型的方法,名字常以“is"开头,很少用has,后加一个名词或形容词或短语,或者任何具有形容词功能的单词或短语,如isDigit,isProblemPrime。
- 如果返回的被调用对象的一个非boolean的函数或者属性,则常用一个名词/短语,或以"get"开头的动词短语。
- 如果方法所在的类是一个Bean,则强制要求以get开头。如果类包含对属性操作,常用setAttribute或getAttribute格式命名。
- 转换对象类型的方法,如果返回不同类型的独立的对象,则称为toType 。
- 如果返回一个视图,则用asType, 如果返回与被调用对象同值的原语类型,称为typeValue静态工厂的方法,常用valueOf或getInstance。