JAVA Coding 规范

Coding 规范

文章目录

    • Coding 规范
    • 一.文件规范
      • 1.1 声明
      • 1.2 缩进
      • 1.3 空行
      • 1.4 空格
      • 1.5 对齐
      • 1.6 小括号
      • 1.7 花括号
      • 1.8 代码长度
    • 二.命名规范
      • 2.1 命名总则
      • 2.2 命名空间
      • 2.3 类与接口
      • 2.4 方法命名
      • 2.5 属性命名
      • 2.6 常量命名
      • 2.7 变量命名
    • 三.语句规范
      • 3.1 语句总则
      • 3.2 循环语句
      • 3.3 Switch-case
    • 四.编码格式
    • 五.开发技巧

一.文件规范

1.1 声明

每行只能声明一个变量,如:

// indentation level int level;

// size of table
int size;

禁止

int level, size;

1.2 缩进

  • 每个缩进单位为4个英文空格,不要在代码中使用Tab字符,可以在开发工具中将tab键设置为4个字符,idea设置方式如下

在这里插入图片描述

  • 按层级缩进,缩进层级不能超过5层,否则需要拆分函数

1.3 空行

使用一个空行情况:

  • 两个方法之间
  • 方法内的局部变量和方法的第一条语句之间
  • 块注释或单行注释之前
  • 一个方法内的两个逻辑段之间,用以提高可读性

两个空行使用情况:

  • 一个源文件的两个片段(section)之间
  • 类声明和接口声明之间

1.4 空格

需要增加空格的地方有:

情形** 示例**
在大多数运算符之前和之后if (a + b > c)
“(” 的前面例如:if ((a > b) && (c > d)) 不要写成 if((a>b)&&(c> d))
|, &,||,&& 前后if ((a > b) && (c > d))
“=” 前后a = 100;
三元操作符 ? : 的前后maxValue = a>b ? a : b;
函数调用的各个参数之间getData(param1, param2, param3);
比较符前后a > b
case 的后面case “none”
语句表达式之间for (expr1; expr2; expr3)

1.5 对齐

  1. 当方法参数过多时当在每个参数后(逗号后)换行并对齐。
  2. 当控制或循环中的条件比较长时当换行(操作符前)、对齐并注释各条件。
  3. 变量定义最好通过添加空格形成对齐,同一类型的变量应放在一起。

1.6 小括号

  • 多个条件判断时,推荐增加小括号增加可读性

例如:

if (((a - b) << 2) > ((c - d) >> 4)) {
// do…
}

  • 尽量不要在返回语句中使用()

1.7 花括号

  • {} 中的语句应该单独作为一行左

  • 括号"{“当紧跟其语句后(即:在它后面换行),右括号”}"永远单独作为一行且与其匹配行对齐,并尽量在其后说明其匹配的功能模块。如:

    public String getFirstNode (List<String> nodeList) {if (nodeList != null && nodeList.size() > 0) {return nodeList.get(0);} else {return null;}
    }
    

1.8 代码长度

  1. 单个方法的有效代码长度当尽量控制在100行以内(不包括注释行)
  2. 单个类的长度包括注释行不超过1500行。

二.命名规范

Pascal命名法:每个单词的首字母都大写。如:BackColor

Camel 命名法(驼峰命名法):首字母小写,后面每个单词的首字母都大写。如:backColor

Underline 命名法(下划线命名法):单词中间用下划线分割。如:string user_name;

2.1 命名总则

  1. 使用可以准确说明变量/字段/类/接口/包等的完整的英文描述符。例如,采用类似firstName,listAllUsers这样的名字,严禁使用汉语拼音及不相关单词命名。
  2. 采用该领域的术语。如果用户称他们的"客户" (clients) 为"顾客" (customers),那么就采用术语 Customer 来命名这个类,而不用 Client。
  3. 尽量少用缩写,但如果一定要使用,当使用公共缩写和习惯缩写等,如实现(implement)可缩写成impl,严禁滥用缩写。
  4. 避免使用长名字(最好不超过 25 个字母)。
  5. 避免使用相似或者仅在大小写上有区别的名字。
  6. 避免使用数字,如:map2map。
  7. 命名时应使用复数来表示它们代表多值,如:orderItems。

2.2 命名空间

  1. Java文件名所有单词首字母大写。
  2. 包名一般以项目或模块名命名,少用缩写和长名,一律小写。
  3. 不要用java, javax作为自定义包的前缀

2.3 类与接口

  • 类的名字必须由大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母,一般使用名词命名。
  • 接口的第一个字符用"I"开头,Service结尾,实现类的命名统一以"ServiceImpl"结尾。

2.4 方法命名

  1. 方法命名多为动词结构

  2. 采用有符合问题域意义的单词或单词组合。第一个单词常用一个动词,采用小写,后续的每个单词采用首字母大写,其余小写(特殊字除外如URL),没有特别理由不用下划线作为分隔符

  3. 在Java中对属性方法命名遵循JavaBean的标准:
    getter,setter方法:最好使用@Data注解

  4. 构造方法的命名与类名一致

  5. 取值使用get前缀,设值使用set前缀,判断类使用is(has)前缀,查询类使用query或find前缀(不建议get),修改类使用modify前缀(不建议update),删除类使用delete前缀。例:

    getName() 
    setSarry() 
    isLogon() 
    queryUserCount()                                                       
    modifyUserInfo() 
    deleteUser()findByXXX()//获取单条记录的
    listByXXX()//获取List集合的
    pageXXX()//分页查询的
    

2.5 属性命名

  1. javabean属性命名尽量使用常规的驼峰式命名规则
  2. 属性名第一个单词尽量避免使用一个字母:如eBook, eMail。
  3. boolean属性名避免使用 “is” 开头的名称,因为javabean规范的boolean取值操作是isXXX

2.6 常量命名

  1. 采用完整的英文大写单词,在词与词之间用下划线连接,如:DEFAULT_VALUE
  2. 命名尽量简短,不要超过16个字符
  3. 同一组的常量可以用常量类封装在一起,便于引用和维护

2.7 变量命名

  1. 变量的命名包括实例变量,静态变量,函数参数的命名。

  2. 变量的名字必须小写字母开头,后面的单词用大写字母开头,其余小写(特殊单词除外,如URL)

  3. 对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用strXXX,boolean使用isXXX,hasXXX等等。

  4. 命名尽量简短,不要超过16个字符

  5. 除了生命周期很短的临时变量外,避免采用单字符作为变量名,实例变量的命名不要用单字符。常用的单字符变量如整型用 i、j、 k、 m、 n字符型用c、d、 e,坐标用x、y、z。

  6. 不要用a、b、c、i、j、n等没有意义的变量命名;

  7. 不要怕麻烦,要使用带有意义的单词命名,如:userListSize、rowLength等来命名。

  8. 集合命名

    • 用名词加集合名称的方式来命名,第一个单词首字母小写,如:

      List<User> userList = new ArrayList<User>(); 
      Map<String, User> userMap = new HashMap<String, User>();           
      
    • 禁止使用单个字母如l,m来命名。

三.语句规范

3.1 语句总则

  1. 统一使用IDEA格式化工具进行格式化,默认快捷键:Ctrl+ALT+L

  2. 尽量避免强制类型转换。如果不得不做类型转换,尽量用显式方式。

  3. If else 中的业务代码行数太长,否则就要考虑用函数封装

  4. 避免在表达式中用赋值语句

  5. 避免对浮点类型做等于或不等于判断

  6. 杜绝魔法数字, for循环的最大数等也要用变量代替,以便知道是什么含义

  7. 对象比较运算,常量放在前面,比如"aaa".equals(str)

  8. Boolean的"假"判断格式:if(false==isMax) 而不用if(!isMax),因为非符号"!"不清晰

  9. 如果一段带有业务逻辑的代码超过两次用到,就将其封装成一个方法

  10. 单个循环也要用{}

  11. 每个变量仅有一个唯一的用途

  12. 单个函数执行单个功能并与其命名相符

  13. 常数变量声明为final

  14. 每个if-else if-else语句都有最后一个else以确保处理了全集

  15. 对于流操作代码的异常捕获有finally操作以关闭流对象,比如:

    /** 
    * desktop的Ajax删除处理 
    * @return null */ 
    public String ajaxDelete() {                                               PrintWriter out = null; try { out = response.getWriter(); deleteModel(); out.write("{success:true}"); } catch (Exception e) { if (out != null) { out.write("{success:false}"); } } finally { if (out != null) { out.close(); } } return null; 
    }
    
  16. 对同步对象的遍历访问必须进行代码同步处理

  17. 在对Map对象使用迭代遍历过程中保证没有做增减元素操作

  18. If else判断语句避免头重脚轻,比如if的代码段过大,else的代码很短,这时候要调整结构

  19. 每一行最多包含一条语句。

3.2 循环语句

  1. 务必检查,杜绝死循环
  2. 即使循环体只有一条语句,也要用花括号括起
  3. 尽量不用空语句,特殊情况用到空语句,写好注释,告诉读者这不是bug
  4. 循环中禁止使用访问数据库的操作,循环内部如果需与数据库交互,而应提前一次性读取出。(重点注意)

3.3 Switch-case

  1. 语句switch中的每个case各占一行。

  2. 所有的非空 case 语句必须用 break; 语句结束。例:

    switch (score) {                                                           case 1: str = "good"; break; case 2: str = "bad"; break; default: str = "nothing"; break; 
    }
    
  3. 语句switch中的case按字母顺序排列。

  4. 为所有switch语句提供default分支。

四.编码格式

  1. 一个程序文件最好不要超过1000行
  2. 尽可能缩小对象的作用域,这样对象的可见范围和生存期也都会尽可能地小
  3. 一个方法所完成的功能要单一,不同的功能封装为不同的方法.
  4. 如果对象在某个特定范围内必须被清理(而不是作为垃圾被回收),请使用带有finally子句的try块,在finally子句中进行清理。
  5. 在处理可变String的时候要必须使用StringBuffer类,可变范围在5次以内可以使用String
  6. 使用java标准库提供的容器。优先选择ArrayList来处理顺序结构,选择HashSet来处理集合,选择HashMap来处理关联数组,选择linkedList来处理堆栈和队列。当使用前三个的时候,应该把他们向上转型为List、Set和Map,这样就可以在必要的时候以其它方式实现
  7. 如果数组的长度将来可能突破现有定义,就用ArryList。
  8. 尽量使用"private"、"protected"关键字,这样对改动影响最小,必要时再定义为public。
  9. 采用类而不是对象引用静态变量和方法
  10. 使用Boolean必须采用Boolean.TRUE/Boolean.FALSE进行构造
    Boolean.valueof(true|false|y|n|Y|N)的形式进行构造
  11. 方法参数尽量控制在5个以内,参数过多可封装成对象,以提高程序的可读性和可扩展性,参数分隔符后保持一个空格。
  12. 禁用System.out.println()进行调试信息的输出,而采用统一slf4j

五.开发技巧

  1. 当API会面对不可知的调用者时,方法需要对输入参数进行校验,如不符合则抛出IllegalArgumentException 。
  2. 在数组中的元素(如String [1]),如果不再使用需要设为NULL,避免内存泄漏。因此直接用Collections类而不要使用数组。
  3. 在不需要封闭修改的时候,尽量使用protected 而不是 private,方便子类重载。
  4. 变量,参数和返回值定义尽量基于接口而不是具体实现类,如Map map = new HashMap();
  5. 和金额相关时,使用BigDecimal,而不是float
  6. 异常要么处理,要么抛出,不允许空的catch块。
  7. 重载方法必须使用@Override,可避免父类方法改变时导致重载函数失效。
  8. 不需要关心的warning信息可以用@SuppressWarnings(“unused”), @SuppressWarnings(“unchecked”), @SuppressWarnings(“serial”) 注释。
  9. 如果方法返回值类型是集合(List,Map,Set….)或数组,且记录为空的时候,返回空的集合或数组,不要返回Null。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速入门Web开发(中)后端开发(有重点)

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 CSDN 图片导入做的不是很好&#xff0c;因此如果有没有…

“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟

ADCIRC是新一代海洋水动力计算模型&#xff0c;它采用了非结构三角形网格广义波动连续方程的设计&#xff0c;在提高计算精确度的同时还减小了计算时间。被广泛应用于&#xff1a;模拟潮汐和风驱动的循环、预测风暴潮和洪水和近岸海上作业等。 除此之外&#xff0c;ADCIRC也是…

Maven的基础使用

1 Maven概述 引入案例&#xff1a;idea创建javaWeb项目&#xff0c;如何打包并发布tomcat上去&#xff0c;以便于客户端访问&#xff1f; 方案一&#xff1a;DOS命令完成打包&#xff0c;操作性不方便&#xff0c;代码频繁修改&#xff0c;频繁使用命令打包一阶段可以打包&am…

IDEA 中的奇技淫巧

IDEA 中的奇技淫巧 书签 在使用ctrlalt方向键跳转时&#xff0c;或者追踪代码时&#xff0c;经常遇到的情况是层级太多&#xff0c;找不到代码的初始位置&#xff0c;入口。可以通过书签的形式去打上一个标记&#xff0c;后续可以直接跳转到书签位置。 标记书签&#xff1a;c…

面试:Redis(缓存穿透、缓存击穿、缓存雪崩、双写一致、Redis的持久化、Redis的过期策略、Redis的数据淘汰策略、Redis的分布式锁、Redis的集群方案、Redis网络模型)

目录 一、缓存穿透 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 二、缓存击穿 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 三、缓存雪崩 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 3、解决方案三&#xff1a; 4、解决方案四&#…

C#窗体控件ColorDialog

介绍 可以获取颜色&#xff0c;然后对其他控件的颜色属性进行设置。 构造方式 直接把ColorDialog控件拖动到Form窗口。 常用属性 AllowFullOpen 可以控制是否使用自定义颜色&#xff0c;true表示可使用&#xff0c;否&#xff0c;表示不可使用。 AnyColor 如果为tr…

Unity 问题之 开发应用在设备上运行闪屏花屏问题的分析处理

Unity 问题之 开发应用在设备上运行闪屏花屏问题的分析处理 目录 Unity 问题之 开发应用在设备上运行闪屏花屏问题的分析处理 一、简单介绍 二、问题现象 三、问题分析 四、使用空后处理&#xff0c;解决闪屏花屏的显示问题 五、空后处理完整代码 一、简单介绍 Unity 在…

面试:Redis

目录 一、缓存穿透 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 二、缓存击穿 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 三、缓存雪崩 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 3、解决方案三&#xff1a; 4、解决方案四&#x…

【每日算法】理论:深度学习基础 刷题:KMP算法思想

上期文章 【每日算法】理论&#xff1a;常见网络架构 刷题&#xff1a;力扣字符串回顾 文章目录 上期文章一、上期问题二、本期理论问题1、注意力机制2、BatchNorm 和 LayerNorm 的区别3、Bert 的参数量是怎么决定的。4、为什么现在的大语言模型都采用Decoder only架构&#x…

第二篇:Python环境搭建:从初学者到专家

Python环境搭建&#xff1a;从初学者到专家 在编程的世界里&#xff0c;准备好一个高效而舒适的开发环境是走向成功的第一步。在这篇博客文章中&#xff0c;我们将一起探索如何为Python编程搭建一个理想的环境。无论你是完全的新手还是希望提升现有的技能&#xff0c;本文都会…

【Python 对接QQ的接口】简单用接口查询【等级/昵称/头像/Q龄/当天在线时长/下一个等级升级需多少天】

文章日期&#xff1a;2024.04.28 使用工具&#xff1a;Python 类型&#xff1a;QQ接口 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff09;&…

第10章 项目管理基础知识

一、项目概述 &#xff08;一&#xff09;项目 在既定的项目资源要求和约束下&#xff0c;为实现特定目标而相互联系的一次性活动&#xff08;资源任务&#xff09;。世界上没有两个完全相同的项目项目有资源约束&#xff0c;一定的目的&#xff0c;是一次性。 &#xff08;…

金属冶炼及压延加工制造数字孪生可视化平台,推进行业数字化转型

金属冶炼及压延加工制造数字孪生可视化平台&#xff0c;推进行业数字化转型。随着科技的不断进步和工业的快速发展&#xff0c;金属冶炼及压延加工行业正面临着前所未有的挑战和机遇&#xff0c;数字化转型成为了行业发展的必然趋势。在这个过程中&#xff0c;数字孪生可视化平…

OSPF大作业

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;r4为ISP上只配ip&#xff0c;r3与其他设备之间只使用公有IP 2&#xff0c;r3-r5/6/7为MGRE环境&#xff0c;r3为中心 3&#xff0c;整个OSPF的ip地址基于172.16.0.0/16划分 所以设备都可以访问r4的环回 4减少LSA的数量加快…

CSS实现jd的商品列表,附完整代码!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

vue2如何创建一个项目?

目录 1. 安装环境&#xff1a; 2. 安装Vue CLI 3. 创建新项目 4. 选择配置 5. 安装依赖并运行 6. 开始开发 7. 构建项目 8. 预览生产环境构建 首先创建一个vue2项目&#xff0c;你可以通过以下步骤进行&#xff1a; 1. 安装环境&#xff1a; 保证自己的电脑已经安装N…

Jetpack Compose简介

文章目录 Jetpack Compose简介概述声明式UI和命令式UIJetpack Compose和Android View对比Compose API设计原则一切皆为函数组合优于继承单一数据源 Jetpack Compose和Android View关系使用ComposesetContent()源码ComposablePreview Jetpack Compose简介 概述 Jetpack Compos…

ElasticSearch教程入门到精通——第五部分(基于ELK技术栈elasticsearch 7.x+8.x新特性)

ElasticSearch教程入门到精通——第五部分&#xff08;基于ELK技术栈elasticsearch 7.x8.x新特性&#xff09; 1. Elasticsearch集成1.1 框架集成-SpringData-整体介绍1.2 Spring Data Elasticsearch 介绍1.3 框架集成-SpringData-代码功能集成1.3.1 创建Maven项目1.3.2 修改po…

持续记录|UNIAPP适配APP遇到的问题以及解决方案

在使用UNIAPP开发APP的时候遇到的一些奇奇怪怪问题记录 组件样式丢失 问题&#xff1a;组件引入界面中&#xff0c;在小程序和H5环境下样式正常&#xff0c;而在APP中却出现高度异常问题 解决&#xff1a;增加view标签将组件包裹起来即可正常显示 解决前&#xff1a; 解决后…

笔记:编写程序,绘制一个展示支付宝月账单报告的饼图,

文章目录 前言一、饼图是什么&#xff1f;二、分析题目三、编写代码总结 前言 编写程序&#xff0c;绘制一个展示支付宝月账单报告的饼图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pyplot 模块&#xff1b; &#xff08;2&#xff09;…