一、Java中的命名规范

好的命名能体现出代码的特征,含义或者是用途,让阅读者可以根据名称的含义快速厘清程序的脉络。不同语言中采用的命名形式大相径庭,Java中常用到的命名形式共有三种,既首字母大写的UpperCamelCase,首字母小写的lowerCamelCase以及全部大写的并用下划线分割单词的UPPER_CAMEL_UNSER_SCORE。通常约定,类一般采用大驼峰命名,方法和局部变量使用小驼峰命名,而大写下划线命名通常是常量和枚举中使用。

类型

约束


项目名

全部小写,多个单词用中划线分隔‘-’

spring-cloud

包名

全部小写

com.alibaba.fastjson

类名

单词首字母大写

Feature

变量名

首字母小写,多个单词组成时,除首个单词,其他单词首字母都要大写

userName,password

常量名

全部大写,多个单词,用‘-’分隔

CACHE_EXPIRED_TIME

方法名

首字母小写,多个单词组成时,除首个单词,其他单词首字母都要大写

read(),readObj()

二、包命名

包名统一使用小写点分隔符之间有且仅有一个自然语义的英文单词或者多个单词自然连接到一块(如 springframework,deepspace不需要使用任何分割)。包名统一使用单数形式,如果类命有复数含义,则可以使用复数形式。

包名的构成可以分为以下几四部分【前缀】 【发起者名】【项目名】【模块名】

三、类命名

类名使用大驼峰命名形式,类命通常时名词或名词短语,接口名除了用名词和名词短语以外,还可以使用形容词或形容词短语,如Cloneable,Callable等,表示实现该接口的类有某种功能或能力。对于测试类则以它要测试的类开头,以Test结尾,如HashMapTest。

对于一些特殊特有名词缩写也可以使用全大写命名,比如XMLHttpRequest,不过笔者认为缩写三个字母以内都大写,超过三个字母则按照要给单词算。这个没有标准如阿里巴巴中fastjson用JSONObject作为类命,而google则使用JsonObjectRequest命名,对于这种特殊的缩写,原则是统一就好。

属性

约束


抽象类

Abstract或者Base开头

BaseUserService,AbstractTraceInterceptor

枚举类

Enum 作为后缀

GenderEnum

工具类

Utils 作为后缀

StringUtils

异常类

Exception 作为后缀

CustomerException

接口实现类

接口名+Impl

UserServiceImpl

领域模型相关

/DO/DTO/VO/DAO

UserDAO,UserDTO

设计模式相关

Builder,Factory,Template

ThreadFactory,redisTemplate

测试类

Test 作为后缀

UserServiceTest,表示是测试类

MVC分层

Controller,Service,ServiceImpl,DAO作为后缀

UserController

处理特定功能

Handler,Predicate,Validator

表示处理器,校验器

四、方法

方法命名采用小驼峰的形式,首字小写,往后的每个单词首字母都要大写。 和类名不同的是,方法命名一般为动词或动词短语,与参数或参数名共同组成动宾短语,即动词 + 名词。一个好的函数名一般能通过名字直接获知该函数实现什么样的功能。

 

4.1 返回真伪值的方法

位置

单词

意义


前缀

is

对象是否符合期待的状态

isVaild

前缀

can

对象是否能执行所期待的动作

canRemove

前缀

should

调用方法执行某个命令或方法,好还是不会,应不应该

shouldMigrate

前缀

has

是否持有所期待的对象

hasObservers

前缀

needs

调用方,是否需要执行某个方法或者命令

needsMigrate

 

4.2 用来检查的方法

单词

意义


ensure

检查是否为期待的状态,不是则抛出异常或者返回error code

ensureCapactiy

validate

检查是否为正确状态

validateParams

check

检查是否为期待状态

checkInput

 

4.3 按需求才执行的方法

位置

单词

意义

 

后缀

IfNeeded

需要的时候执行,不需要的时候什么都不做

drawIfNeeded

前缀

might

同上

mightCreate

前缀

try

尝试执行

tryCreate

后缀

OrDefault

尝试执行,失败时返回默认值

getOrDefault

后缀

OrElse

尝试执行,失败时返回实际参数中指定的值

getOrElse

前缀

force

强制执行

forceCreate,forceStop

 

4.4 异步相关方法

位置

单词

意义


前缀

blocking

线程阻塞方法

blockingGetUser

后缀

InBackground

在后台执行

doInBackground

后缀

Async

异步执行方法

sendASync

后缀

Sync

同步执行方法

sendSync

前缀 or 单独

schedule

Job和Task放入队列

scheule,scheuleJob

前缀 or 单独

post

同上

postJob

前缀 or 单独

execute

执行任务

execute,executeTask

前缀 or 单独

start

同上

start,startJob

前缀 or 单独

cancel

停止任务

cancel,cancelJob

前缀 or 单独

stop

同上

stop,stopJob

 

4.5 回调方法

位置

单词

意义


前缀

on

事件发生时执行

onCompleted

前缀

before

事件发生之前执行

beforeUpdate

前缀

pre

同上

preUpdate

前缀

will

同上

willUpdate

前缀

after

事件发生之后执行

afterUpdate

前缀

post

同上

postUpdate

前缀

did

同上

didUpdate

前缀

should

确认事件是否可以发送执行

shouldUpdate

 

4.6 操作对象生命周期的方法

单词

意义


init

初始化

init

pause

暂停

onPause,pause

stop

停止

onStop,stop

abandon

销毁,禁止

abandon

destroy

销毁

destroy

dispose

同上

dispose

 

4.7 与集合操作相关的方法

单词

意义


contains

是否持有指定对象

contains

add

添加

addJob

append

追加

appendJob

insert

插入

insertJob

put

添加

putJob

remove

删除

removeJob

enqueue

添加到列队

enqueueJob

dequeue

从队列移除

dequeueJob

push

添加到栈

pushJob

pop

从栈移除

popJob

peek

从栈头取出但不移除

peekJob

find

寻找

findById

 

4.8 与数据相关的方法

单词

意义


create

新创建

createAccount

from

从什么读取

fromConfig

to

转换

toString

update

更新

updateAccount

load

加载

loadConfig

fetch

远程读取

fetchConfig

delete

删除

deleteAccount

remove

删除

removeAccount

save

保存

saveAccount

commit

提交

commitChange

clear

清除

clearCache

 

4.9 成对出现的动词

单词

意义

get 获取

set 设置

add 增加

remove 删除

create 创建

destory 移除

start 启动

stop 停止

open 打开

close 关闭

read 读取

write 写入

load 载入

save 保存

begin 开始

end 结束

import 导入

export 导出

bind 绑定

unbind 解绑

split 分割

merge 合并

 

 

view 查看

browse 浏览

edit 编辑

modify 修改

select 选取

mark 标记

copy 复制

paste 粘贴

undo 撤销

redo 重做

insert 插入

delete 删除

add 加入

append 添加

clear 清除

 

index 索引

sort 排序

find 查找

search 搜索

increase 增加

decrease 减少

play 播放

pause 暂停

 

 

launch 启动

run 运行

compile 编译

execute 执行

debug 调试

trace 跟踪

observe 观察

listen 监听

build 构建

publish 发布

input 输入

output 输出

encode 编码

decode 解码

compress 压缩

decompress 解压缩

pack 打包

unpack

parse 解析

emit 生成

connect 连接

disconnect 断开连接

send 发送

receive 接收

 

 

downlaod 下载

upload 上传

refresh 刷新

synchronize 同步

update 更新

revert 复原

lock 锁定

unlock 解锁

checkOut 签出

checkIn 签入

submit 提交

commit 提交

push 推

pull 拉

expand 展开

collapse 折叠

begin开始

end 结束

start 开始

finish 完成

enter 进入

exit 退出

abort 放弃

quit 离开

 

通用命名规则

  1. 尽量不要使用拼音;杜绝拼音和英文混用。对于一些通用的表示或者难以用英文描述的可以采用拼音,一旦采用拼音就坚决不能和英文混用。
    正例: BeiJing, HangZhou
    反例: validateCanShu
  2. 命名过程中尽量不要出现特殊的字符,常量除外。
  3. 尽量不要和jdk或者框架中已存在的类重名,也不能使用java中的关键字命名。
  4. 妙用介词,如for(可以用同音的4代替), to(可用同音的2代替), from, with,of等。
    如类名采用User4RedisDO,方法名getUserInfoFromRedis,convertJson2Map等