1 包(Package)
-
全部小写字母:包名应该全部使用小写字母,避免使用大写字母或下划线。
-
使用逆域名:通常采用公司或组织的域名的逆序作为包名的前缀。
例如 com.google.maps.navigation,com 是常见的顶级域名后缀,表示商业组织;google 是公司名称,逆序后放在前面;maps 表明这是与地图相关的功能;navigation 进一步明确是地图导航方面的应用。
-
点分隔符:点分隔符之间有且仅有一个自然语义的英语单词。例如com.example.project.utils,而不是com.exampleproject.utils。
-
单数形式:包名统一使用单数形式,例如 com.company.service.user,而不是 com.company.service.users。
2 类(Class)
-
大驼峰式命名:类名使用 UpperCamelCase 风格,即首字母大写,且每个单词的首字母大写。
-
避免缩写:除非是广为人知的缩写,例如 URL/XML 等。
此外,抽象类可以使用 Abstract 或 Base 开头,异常类可以使用 Exception 结尾,测试类可以使用 Test 结尾。
3 接口(Interface)
-
大驼峰式命名:与类名的命名规则相同,
-
使用形容词或动作相关的名称:接口通常表示一种能力或行为,因此可以使用形容词或动词相关的名称来描述。例如,
Runnable
表示可运行的,Cloneable
表示可克隆的。 -
接口和实现类之间的规则:
实现类后缀:实现类可以使用 Impl 后缀与接口区分,例如 CacheServiceImpl 实现 CacheService 接口。
抽象类实现接口:抽象类可以实现接口,例如 AbstractTranslator 实现 Translatable 接口。
4 方法(Method)
-
小驼峰式命名:可以包含多个单词,第一个单词的首字母小写,其他单词的首字母大写,例如 actionPerformed()。
-
使用动词开头:方法名应该清晰地表达该方法的行为或操作。例如,
printInfo
表示打印信息,saveData
表示保存数据。 -
Service/DAO(Data Access Object)层的方法命名规约:
获取单个对象:使用 get 前缀,例如 getUser()。
获取多个对象:使用 list 前缀,复数结尾,例如 listUsers()。
获取统计值:使用 count 前缀,例如 countUsers()。
插入操作:使用 save 或 insert 前缀,例如 saveUser()。
删除操作:使用 remove 或 delete 前缀,例如 removeUser()。
修改操作:使用 update 前缀,例如 updateUser()。
5 字段(Field)和变量(Variable)
-
小驼峰式命名:可以包含多个单词,第一个单词的首字母小写,其他单词的首字母大写,例如 firstName。
-
避免使用单个字符作为变量名:除非是在循环中使用的临时变量,如
i
、j
用于表示循环索引。 -
数组表示:类型与中括号紧挨相连来表示数组,例如 int[] arrayDemo。
-
避免重名:避免在子类和父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名。
-
布尔类型:POJO (Plain Old Java Object,简单的 Java 对象)类中的布尔类型变量不要加 is 前缀,主要是为了避免在对象序列化和反序列化过程中出现问题。
6 常量(Constant)
-
全部大写:常量名的所有字母都应该大写,单词之间用下划线
_
分隔。例如,MAX_VALUE
、DEFAULT_SIZE
。 -
数字允许:可以包含数字,但不能以数字开头。
7 枚举(Enum)
-
大驼峰命名法:和类名的命名规则相同。枚举中的常量通常全部大写,单词之间用下划线分隔。例如:
public enum Weekday {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}
8 总结
-
命名规范:代码中的命名均不能以下划线或美元符号开始或结束。
-
自解释命名:使用尽量完整的单词组合来表达自定义编程元素。
-
类型名词后置:在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
-
具有描述性:应该能够清晰地表达该命名的主要功能或用途。例如,FileReader 表示用于读取文件的类。