Java命名规范

Java命名规范

文中部分内容来自网络摘抄,如有侵权联系删除

1.1 项目命名规范:

全部小写,多个单词用 - 隔开

1.2 包命名规范:

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

推荐使用公司或机构的顶级域名为包名的前缀,目的是保证各公司/机构内所使用的包名的唯一性

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词,不要多个英语单词拼接成一个,包名统一使用单数形式。如果类名有复数含义,类名可以使用复数形式。

1.3 类命名规范:

类型方式推荐
类名首字母大写驼峰式
抽象类首字母大写驼峰式使用 Abstract 或 Base 开头。
测试类首字母大写驼峰式以它要测试的类的名称开始,以 Test 结尾。
异常类首字母大写驼峰式使用Exception 结尾。
接口实现类首字母大写驼峰式实现类用 接口名 + Impl 的后缀与接口区别。
实体类首字母大写驼峰式无后缀名
工具类首字母大写驼峰式Utils作为后缀
枚举首字母大写驼峰式Enum作为后缀

1.4 类成员命名规范:

成员名方式推荐
POJO 类中布尔类型的变量首字母小写驼峰式不要加 is ,否则部分框架解析会引起序列化错误
常量全部大写多个单词之间用_隔开,长度不限
方法名首字母小写驼峰式

1.5 配置文件命名规范:

xml文件命名
全部小写,-符号是其xml的用途说明,类似applicationContext属习惯命名。 比如springmvc-servlet.xml、workdesk-manager.xml、workdesk-servlet.xml、applicationContext-basic.xml等
xml里的内容多个字符间以-隔开,比如param-name,filter-mapping等

普通文件命名(jsp,js,img等)
和java普通变量规范相同

属性文件properties

以下划线隔开:errors_zh_CN.properties,hibernate_test.properties

1.6 注解规范:

包注解 包注解在工作中往往比较特殊,通过包注解可以快速知悉当前包下代码是用来实现哪些功能,强烈建议工作中加上,尤其是对于一些比较复杂的包,包注解一般在包的根目录下,名称统一为package名-info.java

/** 
* 落地也质量检测 
* 1. 用来解决什么问题 
* 对广告主投放的广告落地页进行性能检测,模拟不同的系统,如Android,IOS等; 模拟不同的网络:2G,3G,4G,wifi等 
* 2. 如何实现 
* 基于chrome浏览器,用chromedriver驱动浏览器,设置对应的网络,OS参数,获取到浏览器返回结果。 
* 注意:网络环境配置信息{@link cn.mycookies.landingpagecheck.meta.NetWorkSpeedEnum}目前使用是常规速度,可以根据实际情况进行调整 
* @author cruder 
* @time 2019/12/7 20:3 下午 
*/
package cn.mycookies.landingpagecheck;
public class packageName-info{}

类注解

javadoc注解中,每个类都必须有注解。

/**
*
*类的介绍:这是一个用来做什么事情的类,有哪些功能,用到的技术...
*
*
*@author	类创建者姓名 
*@date		创建日期
*version	版本号
*
*/
public class Demo {}

属性注解

/**注释信息*/
private String 属性名;

/**
* 注释信息
*/
private String 属性名;

方法注释

在每个方法前面必须加上方法注释,对于方法中的每个参数,以及返回值都要有说明。

/**
*方法的详细说明,能干嘛,实现步骤,注意事项
*
*@param xxx 参数1的使用说明,能否为null
*@return 返回结果的说明,不同情况写会返回怎样的结果
*@throws 异常类型 注明从此类方法中抛出异常的说明
*/      
public void methodName(){}

构造方法注释

在每个构造方法前面必须加上注释,注释模板如下:

/**
*构造方法的详细说明
*
*@param xxx 参数1的使用说明,能否为null
*@throws 异常类型 注明从此类方法中抛出异常的说明
*/  
public 类名(参数类型 参数名){}

简单注解

而简单注解往往是需要工程师字节定义,在使用注解时应该注意一下几点:

枚举类的各个属性值都要使用注解

保持排版整洁,不要使用行尾注释;双斜杠和星号之后要用1个空格分隔。


1.7 开发经验推荐:

如果使用到了设计模式,建议在类名中体现出具体模式。

接口类中的方法和属性不要加任何修饰符号 (public 也不要加 ) ,保持代码的简洁性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。

创建统一类型的变量,如工资最高工资最低这类型 通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。 请使用 strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。常用的量词后缀有:First(一组变量中的第一个)、Last(一组变量中的最后一个)、Next(一组变量中的下一个变量)、Prev(一组变量中的上 一个)、Cur(一组变量中的当前变量)。

尽量缩小变量的作用域。

实际应用中:
Service / DAO 层方法命名规约
1 ) 获取单个对象的方法用 get 做前缀。
2 ) 获取多个对象的方法用 list 做前缀。
3 ) 获取统计值的方法用 count 做前缀。
4 ) 插入的方法用 save( 推荐 ) 或 insert 做前缀。
5 ) 删除的方法用 remove( 推荐 ) 或 delete 做前缀。
6 ) 修改的方法用 update 做前缀。
领域模型命名规约
1 ) 数据对象: xxxDO , xxx 即为数据表名。
2 ) 数据传输对象: xxxDTO , xxx 为业务领域相关的名称。
3 ) 展示对象: xxxVO , xxx 一般为网页名称。
4 ) POJO 是 DO / DTO / BO / VO 的统称,禁止命名成 xxxPOJO 。

1.8 方法命名规范:

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

1.8.1 返回真伪值
位置单词意义例子
前置is对象是否符合期待的状态isValid 是否有效
前置can对象能否执行所期待的动态canRemove 是否能执行移除
前置should调用方应不应该去执行这个方法shouldMigrate 应不应该移动
前置has对象是否持有某个数据或属性hasObservers 是否具有观察者
前置needs调用方是否需要执行某个方法needsRemove 是否需要移除
1.8.2 用来检查
单词意义
ensure检查是否为期待的状态,不是则抛出异常或返回error codeensureCapacity
validate检查是否为正确的状态,不是则抛出异常或返回error codevalidatetoInput
1.8.3 按需求才执行
位置单词意义
后置IfNeeded需要的时候执行,不需要则什么都不做drawIfNeeded
前置might需要的时候执行,不需要则什么都不做mightCreate
前置try尝试执行,失败时抛出异常,或是返回errorcodetryCreate
后置OrDefault尝试执行,失败时返回默认值getOrDefault
后置OrElse尝试执行,失败时返回实际参数中指定的值getOrElse
前置force强制尝试执行,error抛出异常或是返回值forceStop
1.8.4 异步相关方法
位置单词意义
前置blocking线程阻塞方法blockingGetUser
后置InBackground执行在后台线程doInBackground
后置Async异步方法sendAsync
后置Sync同步方法sendSync
前置或单独scheduleJob和Task放入队列schedule,scheduleJob
前置或单独postJob和Task放入队列postJob
1.8.5 回调方法
位置单词意义
前置on事件发生时执行onCompleted
前置before事件发生前执行beforeUpdate
前置pre事件发生前执行preUpdate
前置will事件发生前执行willUpdate
前置after事件发生后执行afterUpdate
前置post事件发生后执行postUpdate
前置did事件发生后执行didUpdate
前置should确认事件是否可以执行shouldUpdate
1.8.6 对象生命周期
单词意义
initialize初始化或延迟初始化使用initialize
pause暂停onPause, pause
stop停止onStop, stop
abandon销毁的替代abandon
destroy销毁的替代destroy
dispose销毁的替代dispose
1.8.7 集合操作相关
单词意义
contains是包含指定对象相同的对象contains
add添加addJob
append添加appendJob
insert插入到下标ninsertJob
put添加与key对应的元素putJob
remove移除元素removeJob
enqueue添加到队列的最末位enqueueJob
dequeue从队列中头部取出并移除dequeueJob
push添加到栈头pushJob
pop从栈头取出并移除popJob
peek从栈头取出但不移除peekJob
find寻找符合条件的某物findById
1.8.8 与数据相关
单词意义
create新创建createAccount
new新创建newAccount
from从既有的某物新建,或是从其他的数据新建fromConfig
to转换toString
update更新既有某物updateAccount
load读取loadAccount
fetch远程读取fetchAccount
delete删除deleteAccount
remove删除removeAccount
save保存saveAccount
store保存storeAccount
commit保存commitChange
apply保存或应用applyChange
clear清除或是恢复到初始状态clearAll
reset清除或是恢复到初始状态resetAll
1.8.9 成对的动词
单词意义
get获取set设詈
add增加remove删除
create创建destory移除
start启动stop停止
open打开close关闭
read读取write写入
load 载入save保存
create创建destroy 销毁
begin开始end结束
backup备份restore恢复
import导入export导出
split分割merge合并
inject注入extract提取
attach附着detach脱离
bind绑定separate分离
view查看browse浏览
edit编辑modify修改
select 选取mark标记
copy复制paste粘贴
undo撒销redo重做
insert插入delete移除
add 加入append添加
clean清理clear清除
index索引sort排序
find查找search搜索
increase增加decrease减少
play播放pause暂停
launch启动run运行
compile编译execute执行
debug调试trace跟踪
observe观察listen监听
build构建publish发布
input输入output输出
encode编码decode解码
encrypt加密decrypt解密
compress压缩decompress解压缩
pack打包unpack解包
parse解析emit生成
connect连接disconnect断开
send发送receive接收
download下载upload上传
refresh刷新synchronize同步
update更新revert复原
lock锁定unlock解锁
check out签出check in 签入
submit提交commit交付
push 推pull拉
expand展开collapse折叠
begin起始end结束
start开始finish完成
enter进入exit退出
abort放弃quit离开
obsolete废弃depreciate废旧
collect收集aggregate聚集
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 模块命名、数据库表命名、域模型命名、各分层的类/方法命名、页面的命名; 模块命名: a. 包命名:com.project_name.module_name.action/service/dao/ws; service的实现都置于com.project_name.module_name.service.impl下; b. 接口命名遵守XxxxService,接口实现遵守XxxxServiceImpl; 2. 包的设计、页面的层次结构设计(jsp/css/js等文件的结构); 3. log、异常(声明式异常)的约定设计; 4. 链接、按钮、表单提交的统一方式;通用式Ajax调用与页面跳转统一模型; 5. 响应一个请求的分层结构约定,列举几个示例(常规调用、Ajax调用、WebService调用、提供WebService暴露、硬件设备接口调用); 6. 验证代码质量的约定,如JUnit、EMMA、FindBugs、CheckStyle、PMD的使用;Hudson持续集成需注意的; 7. 压力测试、防内存泄漏测试; 基础CSS:标签的各种状态的样式;表格单双行的样式; 开发一个Action请求的响应: 前置条件:该Action涉及的Entity及EntityName.hbm.xml已经准备好。 步骤: a. 前端页面触发Action的请求; 统一采用全路径请求,URL格式: 1> basePath/web/moduleName/*_ *.action {1}  EntityName,{2}  ActionMethodName 2> basePath/web/moduleName/gotoXxx.action (无需调用Service,直接跳转) 包括jQuery的Ajax方式和非Ajax方式; 包括表单提交; 参数设值的方式: 1> URL参数: basePath/web/moduleName/*_*.action?entity.propertyName=paramValue&paramName=paramValue 2> 或 另外,对于表单的提交,前后台都必须做数据校验,SWDF已提供了此能力,进行简单的配置即可,前台直接提供类似以下代码即可,点此查看前端校验详细规则说明。 前端校验示例; 后台数据校验,点此查看校验详细说明. b. 配置struts-moduleName.xml; 直接跳转示例; 调用Service示例; c. 开发对应的{EntityName}Action类; 该类必须继承com.hikvision.swdf.xx.BaseAction,该Action类有一个关键属性entity,即泛型Entity类的一个实体,该属性默认填充好了请求提交过来的entity对应参数(即entity.propertyName); d. 开发Service接口和Service接口实现,并在Action中通过set方法注入该Service; 接口文件:UserService 接口实现:UserServiceImpl 注入Service e. 开发DAO,DAO继承com.hikvision.xxx.HibernateBaseDAO; 示例 f. 配置applicationContext-*.xml; 配置DAO bean、Service Bean、Action Bean及注入的配置; g. 测试; 备注: 1. Action建议统一遵守通配符的约定,basePath/web/moduleName/*_ *.action {1}  EntityName,{2}  ActionMethodName 2. 统一命名规则:接口类似UserService,接口实现类型UserServiceImpl;(IUserService和UserServiceImpl) 开发一个Action调用关联应用提供的WebService 前置条件:该WebService?WSDL可正常获取 步骤: a. 配置applicationContext-wsclient.xml; Spring管理第三方WebService实例bean Jaxws-client配置代码 b. 生成第三方WebService接口文件;(提供系统自动生成) 自动生成代码 c. 页面调用Action请求,Action中注入WebService实例bean; Action对应方法直接调用第三方WebService的相关方法; d. 测试; 备注: 1. 步骤b,接口文件必须同包名同类名置于src目录下; 开发一个Action调用关联应用开放的HTTP请求 步骤: 1. 页面调用Action请求; 2. Action类相应方法使用封装好的HttpClient相关工具类,准备好HTTP请求的相关参数header参数和body参数并以xml的方式提交HTTP请求; 3. 解析该HTTP请求返回值(XML或JSON); 4. 响应结果; 5. 测试; 备注: 开发一个需要对第三方应用发布的WebService 步骤: a. 开发WebService接口,@WebService进行注解该接口; b. 开发WebService接口实现类,@WebService注解该实现类,并制定endpointInterface; c. 配置applicationContext-ws.xml d. 测试 备注: 开发一个需要对第三方应用发布的RESTful Service 步骤: a. 开发RS接口,提供如下Annotation; b. 开发RS接口实现,并提供如下Annotation; c. 配置applicationContext-rs.xml 备注: 所有Annotation的涵义解释如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值