算机运行使用二进制机器语言,不管什么编程语言,最终都是要翻译成机器语言的。编程语言使用英语表达,是路径依赖的原因,命名一定要规范,杜绝拼音(多音字伤人啊拼音有时候有歧义),一定要用英文。注释和命名是一个程序员的逼格,不能偷懒。在多人项目中,建议偷偷学习一下同事的编码规范

好的命名能体现出代码的特征,含义或者是用途,让阅读者可以根据名称的含义快速厘清程序的脉络。不同语言中采用的命名形式大相径庭。

一、Java中常用到的命名形式共有三种

既首字母大写的UpperCamelCase,首字母小写的lowerCamelCase以及全部大写的并用下划线分割单词的UPPERCAMELUNSER_SCORE。

通常约定,类一般采用大驼峰命名,方法和局部变量使用小驼峰命名,而大写下划线命名通常是常量和枚举中使用。

类型(名) 约束
项目 全部小写多个单词用中划线分隔‘-’ spring-cloud
全部小写 com.alibaba.fastjson
单词首字母大写 Feature,FieldDeserializer
变量 首字母小写多个单词组成时,除首个单词其他单词首字母都要大写 password, userName
常量 全部大写,多个单词,用'_'分隔 CACHEEXPIREDTIME
方法 同变量 read(), getById(Long id)

二,包命名

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

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

前缀 含义
indi或onem indi.发起者名.项目名.模块名.…… 个体项目个人发起,但非自己独自完成可公开或私有项目,copyright主要属于发起者。
pers pers.个人名.项目名.模块名.…… 个人项目指个人发起,独自完成,可分享的项目copyright主要属于个人
priv priv.个人名.项目名.模块名.…… 私有项目,指个人发起,独自完成非公开的私人使用的项目,copyright属于个人。
team team.团队名.项目名.模块名.…… 团队项目,指由团队发起并由该团队开发的项目copyright属于该团队所有
顶级域名 com.公司名.项目名.模块名.…… 公司项目copyright由项目发起的公司所有

三,类命名

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

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

属性(类) 约束
抽象 Abstract 或Base 开头 BaseUserService
枚举 Enum 作为后缀 OSType
工具 Utils作为后缀 StringUtils
异常 Exception结尾 RuntimeException
接口实现 接口名+ Impl UserServiceImpl
领域模型相 /DO/DTO/VO/DAO 正例:UserDAO反例:UserDao
设计模式相关 Builder,Factory等 当使用到设计模式时要使用对应的设计模式作为后缀如ThreadFactory
处理特定功能 Handler,PredicateValidator 表示处理器,校验器,断言这些类工厂还有配套的方法名如handle,predicate,validate
测试 Test后缀 UserServiceTest表示用来测试UserService类的
MVC分层 Controller,ServiceServiceImpl,DAO后缀 UserManageControllerUserManageDAO

四,方法

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

4.1 返回真伪值的方法

注:pre- prefix前缀,suf- suffix后缀,alo-alone 单独使用

位置 单词 意义
pre is 对象是否符合期待的状态 isValid
pre can 对象能否执行所期待的动作 canRemove
pre should 调用方执行某个命令或方法是好还是不好应不应该,或者说推荐还是不推荐 shouldMigrate
pre has 对象是否持有所期待的数据和属性 hasObservers
pre needs 调用方是否需要执行某个命令或方法 needsMigrate

4.2 用来检查的方法

单词 意义
ensure 检查是否为期待的状态不是则抛出异常或返回error code ensureCapacity
validate 检查是否为正确的状态不是则抛出异常或返回error code validateInputs

4.3 按需求才执行的方法

位置 单词 意义
suf IfNeeded 需要的时候执行不需要则什么都不做 drawIfNeeded
pre might 同上 mightCreate
pre try 尝试执行失败时抛出异常或是返回errorcode tryCreate
suf OrDefault 尝试执行失败时返回默认值 getOrDefault
suf OrElse 尝试执行失败时返回实际参数中指定的值 getOrElse
pre force 强制尝试执行error抛出异常或是返回值 forceCreate, forceStop

4.4 异步相关方法

位置 单词 意义
pre blocking 线程阻塞方法 blockingGetUser
suf InBackground 执行在后台线程 doInBackground
suf Async 异步方法 sendAsync
suf Sync 同步方法 sendSync
pre/alo schedule Job和Task放入队列 schedule, scheduleJob
pre/alo post 同上 postJob
pre/alo execute 执行异步或同步方法 execute,executeTask
pre/alo start 同上 star,tstartJob
pre/alo cancel 停止异步方法 cance,cancelJob
pre/alo stop 同上 stop,stopJob

4.5 回调方法

位置 单词 意义
pre on 事件发生时执行 onCompleted
pre before 事件发生前执行 beforeUpdate
pre pre 同上 preUpdate
pre will 同上 willUpdate
pre after 事件发生后执行 afterUpdate
pre post 同上 postUpdate
pre did 同上 didUpdate
pre should 确认事件是否可以执行 shouldUpdate

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

单词 意义
initialize 初始化或延迟初始化使用 initialize
pause 暂停 onPause , pause
stop 停止 onStop, stop
abandon 销毁的替代 abandon
destroy 同上 destroy
dispose 同上 dispose

4.7 与集合操作相关的方法

单词 意义
contains 是包含指定对象相同的对象 contains
add 添加 addJob
append 添加 appendJob
insert 插入到下标n insertJob
put 添加与key对应的元素 putJob
remove 移除元素 removeJob
enqueue 添加到队列的最末位 enqueueJob
dequeue 从队列中头部取出并移除 dequeueJob
push 添加到栈头 pushJob
pop 从栈头取出并移除 popJob
peek 从栈头取出但不移除 peekJob
find 寻找符合条件的某物 findById

4.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

4.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 聚集

五,变量&常量命名

5.1 变量命名

变量是指在程序运行中可以改变其值的量,包括成员变量和局部变量。变量名由多单词组成时,第一个单词的首字母小写,其后单词的首字母大写,俗称骆驼式命名法(也称驼峰命名法),如 computedValues,index、变量命名时,尽量简短且能清楚的表达变量的作用,命名体现具体的业务含义即可。

变量名不应以下划线或美元符号开头,尽管这在语法上是允许的。变量名应简短且富于描述。变量名的选用应该易于记忆,即,能够指出其用途。尽量避免单个字符的变量名,除非是一次性的临时变量。pojo中的布尔变量,都不要加is(数据库中的布尔字段全都要加 is_ 前缀)。

5.2 常量命名

常量命名CONSTANT_CASE,一般采用全部大写(作为方法参数时除外),单词间用下划线分割。那么什么是常量呢?

常量是在作用域内保持不变的值,一般使用final进行修饰。一般分为三种,全局常量(public static final修饰),类内常量(private static final 修饰)以及局部常量(方法内,或者参数中的常量),局部常量比较特殊,通常采用小驼峰命名即可。

  1. /**
  2. * 一个demo
  3. *
  4. * @author Jann Lee
  5. * @date 2019-12-07 00:25
  6. **/
  7. publicclassHelloWorld{
  8. /**
  9. * 局部常量(正例)
  10. */
  11. publicstaticfinallong USER_MESSAGE_CACHE_EXPIRE_TIME =3600;
  12. /**
  13. * 局部常量(反例,命名不清晰)
  14. */
  15. publicstaticfinallong MESSAGE_CACHE_TIME =3600;
  16. /**
  17. * 全局常量
  18. */
  19. privatestaticfinalString ERROR_MESSAGE =" error message";
  20. /**
  21. * 成员变量
  22. */
  23. privateint currentUserId;
  24. /**
  25. * 控制台打印 {@code message} 信息
  26. *
  27. * @param message 消息体,局部常量
  28. */
  29. publicvoid sayHello(finalString message){
  30. System.out.println("Hello world!");
  31. }
  32. }

常量一般都有自己的业务含义,不要害怕长度过长而进行省略或者缩写。如,用户消息缓存过期时间的表示,那种方式更佳清晰,交给你来评判。

通用命名规则

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

六,代码注解

20 天学会 Java - 注释详解​www.zhihu.com/education/video-course/1483149993460109313?section_id=1483150013564399616正在上传…重新上传取消

6.1 注解的原则

好的命名增加代码阅读性,代码的命名往往有严格的限制。而注解不同,程序员往往可以自由发挥,单并不意味着可以为所欲为之胡作非为。优雅的注解通常要满足三要素。

  1. Nothing is strange 没有注解的代码对于阅读者非常不友好,哪怕代码写的在清除,阅读者至少从心理上会有抵触,更何况代码中往往有许多复杂的逻辑,所以一定要写注解,不仅要记录代码的逻辑,还有说清楚修改的逻辑。
  2. Less is more 从代码维护角度来讲,代码中的注解一定是精华中的精华。合理清晰的命名能让代码易于理解,对于逻辑简单且命名规范,能够清楚表达代码功能的代码不需要注解。滥用注解会增加额外的负担,更何况大部分都是废话。
  1. // 根据id获取信息【废话注解】
  2. getMessageById(id)
  1. Advance with the time 注解应该随着代码的变动而改变,注解表达的信息要与代码中完全一致。通常情况下修改代码后一定要修改注解。

6.2 注解格式

注解大体上可以分为两种,一种是javadoc注解,另一种是简单注解。javadoc注解可以生成JavaAPI为外部用户提供有效的支持javadoc注解通常在使用IDEA,或者Eclipse等开发工具时都可以自动生成,也支持自定义的注解模板,仅需要对对应的字段进行解释。参与同一项目开发的同学,尽量设置成相同的注解模板。

a. 包注解

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

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

b. 类注接

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

  1. /**
  2. * Copyright (C), 2019-2020, Jann balabala...
  3. *
  4. * 类的介绍:这是一个用来做什么事情的类,有哪些功能,用到的技术.....
  5. *
  6. * @author 类创建者姓名 保持对齐
  7. * @date 创建日期 保持对齐
  8. * @version 版本号 保持对齐
  9. */

c. 属性注解

在每个属性前面必须加上属性注释,通常有一下两种形式,至于怎么选择,你高兴就好,不过一个项目中要保持统一。

  1. /** 提示信息 */
  2. privateString userName;
  3. /**
  4. * 密码
  5. */
  6. privateString password;

d. 方法注释

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

  1. /**
  2. * 方法的详细说明,能干嘛,怎么实现的,注意事项...
  3. *
  4. * @param xxx 参数1的使用说明, 能否为null
  5. * @return 返回结果的说明, 不同情况下会返回怎样的结果
  6. * @throws 异常类型 注明从此类方法中抛出异常的说明
  7. */

e. 构造方法注释

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

  1. /**
  2. * 构造方法的详细说明
  3. *
  4. * @param xxx 参数1的使用说明, 能否为null
  5. * @throws 异常类型 注明从此类方法中抛出异常的说明
  6. */

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

  1. 枚举类的各个属性值都要使用注解,枚举可以理解为是常量,通常不会发生改变,通常会被在多个地方引用,对枚举的修改和添加属性通常会带来很大的影响。
  2. 保持排版整洁,不要使用行尾注释;双斜杠和星号之后要用1个空格分隔。
  3. int id =1;// 反例:不要使用行尾注释
  4. //反例:换行符与注释之间没有缩进
  5. int age =18;
  6. // 正例:姓名
  7. String name;
  8. /**
  9. * 1. 多行注释
  10. *
  11. * 2. 对于不同的逻辑说明,可以用空行分隔
  12. */

总结

无论是命名和注解,他们的目的都是为了让代码和工程师进行对话,增强代码的可读性,可维护性。优秀的代码往往能够见名知意,注解往往是对命名的补充和完善。命名太南了!

Java 自学免费加油站

Java基础语法-面向对象-集合-IO-线程与并发-异常-网络编程
java基础传送门:Java基础入门视频教程,零基础小白自学Java必备教程

​​

Java进阶
java进阶13天:Java13天进阶教程,深入学习Java编程核心思想
API: Java基础教程2020新版JDK8日期API解析

​​

技术框架 Spring:Java进阶教程spring框架,深入浅出讲解细致
SpringMVC+mybatis:Springmvc+Mybatis由浅入深全套视频教程
mybatis plus:MybatisPlus深入浅出教程,快速上手Mybatis-Plus
spring data:java进阶教程数据层全栈方案Spring Data高级应用

​​

分布式架构
Zookeeper+Dubbo:Dubbo快速入门,Java分布式框架必会的教程
Springcloud:SpringCloud从小白到精通教程
Skywalking:java基础教程全面的深入学习Skywalking
服务器中间件
Rabbitmq:RabbitMQ全套教程,RabbitMQ消息中间件到实战面试
Rocketmq:RocketMQ系统精讲,电商分布式消息中间件,硬核揭秘双十一
Kafka:Kafka深入浅出,快速玩转分布式发布订阅消息系统
Redis:Redis入门到精通,Java企业级解决方案必看
MongoDB:java必备基础教程-MongoDB基础入门到高级进阶
Apollo分布式:轻松入门Apollo分布式配置中心-服务中间件
服务器技术
Tomcat:Java进阶教程Tomcat核心原理解析
容器技术
Docker:Docker容器化技术,从零学会Docker教程
Kubernetes:Kubernetes(K8S)超快速入门教程

​​

练手项目合集
1.传智健康项目https://www.bilibili.com/video/BV1Bo4y117zVa
2.iHRM 人力资源管理系统https://www.bilibili.com/video/BV18A411L7UXa
3.Java项目《万信金融》企业级开发实战https://www.bilibili.com/video/BV1Ub4y1f7rka
4.好客租房项目https://www.bilibili.com/video/BV1sZ4y1F7PDa
5.品优购V1.3.1项目实战https://www.bilibili.com/video/BV1mi4y1L7Hta
6.Java大型分布式微服务闪聚支付项目https://www.bilibili.com/video/BV17v411V79c/a
7.Java集信达短信平台实战https://www.bilibili.com/video/BV1J

​​

面试题:
深入解读阿里等一线大厂java面试必考HashMap技术点
Java面试热点问题,synchronized原理剖析与优化
Java面试热门内容精讲之——并发编程volatile
MySQL优化教程,超详细的MySQL数据库优化,Java面试热点必考问题

觉得有帮助可以抓紧收藏,说不定啥时候失效了


值得收藏的Java 命名规范参考!相关推荐

  1. 命名参数_告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,命名已经成为我工作中的拦路虎,夸张点可以说是编程5分钟,命名两小时! 每个公司都有不同的标准,目的是为了保持统一,减少沟 ...

  2. java包名命名规则_告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,命名已经成为我工作中的拦路虎,夸张点可以说是编程5分钟,命名两小时! 每个公司都有不同的标准,目的是为了保持统一,减少沟 ...

  3. 告别编码5分钟,命名2小时!史上超全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,命名已经成为我工作中的拦路虎,夸张点可以说是编程5分钟,命名两小时! 每个公司都有不同的标准,目的是为了保持统一,减少沟 ...

  4. 告别编码5分钟,命名2小时!史上最全的Java命名规范参考!

    简洁清爽的代码风格应该是大多数工程师所期待的.在工作中笔者常常因为起名字而纠结,夸张点可以说是编程5分钟,命名两小时!究竟为什么命名成为了工作中的拦路虎. 每个公司都有不同的标准,目的是为了保持统一, ...

  5. Java命名规范参考!

    目录 Java中的命名规范 包命名 类命名 方法 返回真伪值的方法 用来检查的方法 按需求才执行的方法 异步相关方法 回调方法 操作对象生命周期的方法 与集合操作相关的方法 与数据相关的方法 成对出现 ...

  6. 前端命名规范_值得收藏的前端命名规范

    不知道大家有没有这样一个苦恼,在开发过程中经常为了起一个css名,文件名,组件名而苦恼 起的高大上点害怕连自己都看不懂,起的太简单又显得自己很不专业 下面我们就来解决这个问题 布局使用语义化标签 对于 ...

  7. 「 Java开发规范 」10人小团队Java开发规范参考这篇就够了

    <菜鸟程序员成长计划>之团队高效合作[开发规范篇] 1.「 Java开发规范 」10人小团队Java开发规范参考这篇就够了! 2.「 前端开发规范 」10人小团队前端开发规范参考这篇就够了 ...

  8. Java 命名规范(非常全)

    欢迎关注方志朋的博客,回复"666"获面试宝典 在本文中,将从大到小,从外到内,总结Java编程中的命名规范.文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方 ...

  9. Java 命名规范(非常全面)

    来源:https://www.ramostear.com/blog/2020/03/20/2vxdaqjq.html 最近发现很多初级程序员写代码时很不规范,比如方法名 类名 等,如果遇到有代码洁癖的 ...

最新文章

  1. 腾讯的Tendis能否干掉Redis,用了什么牛逼的技术呢?
  2. 最新公开的华为认证通关秘籍来了
  3. HashTable已经被淘汰了,不要在代码中再使用它
  4. fiddler 之 返回数据乱码解决方法
  5. 机器学习入门书籍导读-高等数学上
  6. JVM中的垃圾收集算法和Heap分区简记
  7. 科普:算法岗是什么?我适不适合算法岗?选什么方向的算法岗?
  8. 【学术相关】研究生通常都有怎样的作息时间呢?
  9. javafx 示例_示例介绍:JavaFX 8打印
  10. C error :Run-Time Check Failure #2 - Stack around the variable 'b' was corrupted.
  11. OpenSSH 密钥管理:RSA/DSA 认证(转载)
  12. python动态创建字典_如何在Python中创建动态命名字典?
  13. openresty查看log
  14. 华云天下荣膺“2021年度十佳呼叫中心硬件及软件设备供应商”
  15. Linux学习笔记之秋水BBR一键部署
  16. win7电脑怎样修改环境变量
  17. git submodule update --init时报错:Failed to recurse into submodule path third_party/protobuf
  18. 搜狗拼音输入法自定义格式的时间和日期并快捷键触发
  19. 回撤率 python_【Python量化】O(n)复杂度实现最大回撤的计算
  20. Ensemble Learning(集成学习--AdaBoost,GBDT,Xgboost等)

热门文章

  1. ArcGIS矢量化并进行拓扑检查
  2. gaussdb200 常用函数
  3. harmonyos 2.0体验,Harmonyos 2.0
  4. Mysql+Canal1.1.5+Es实现数据同步
  5. 架构设计:不存在放之四海皆准的解决方案
  6. 传奇黑客用一台手机换了跑车
  7. 天气预报文字版微信_早起微信励志语录 微信群里的带励志语录的天气预报在哪找...
  8. 软考系统集成项目管理工程师视频教程(下)-乔俊峰-专题视频课程
  9. Windows专用网络链接实现局域网文件共享
  10. 安势信息入选 SegmentFault思否「2022 中国新锐技术先锋企业」