我的编程空间,编程开发者的网络收藏夹
学习永远不晚

阿里开发手册规范(JAVA)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

阿里开发手册规范(JAVA)

目录

一、编程规约 

(一) 命名规范

(二) 常量定义

(三) 代码格式 

(四) OOP规约

(五) 日期时间

(六) 集合处理 

(七) 并发处理

(八) 控制语句

(九) 注释规约

(十) 前后端规约

二、异常日志 

(一) 错误码

(二) 异常处理

(三) 日志规约 

三、单元测试 

四、安全规约

五、MySQL数据库 

(一) 建表规约

(二) 索引规约 

(三) SQL语句

(四) ORM映射

六、工程结构 

(一) 应用分层

(二) 二方库依赖 

(三) 服务器 

七、设计规约 


一、编程规约 

(一) 命名规范

代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / __name / $name / name_ / name$ / name__ 。

禁止使用拼音和英文混合。反例:DaZhePromotion [打折] / getPingfenByName() [评分] 。

 类名使用大驼峰式命名法;方法名、参数名、成员变量、局部变量都统一使用小驼峰式命名法。

 常量命名全部大写,单词间用下划线隔开;:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME 。

 类型与中括号紧挨相连来表示数组。 :定义整形数组 int[] arrayDemo。 

 boolean类型变量,不要以is开头,避免部分序列化框架出错。反例boolean isExists。

 杜绝完全不规范的缩写,避免望文不知义。 反例:AbstractClass“缩写”成AbsClass;condition“缩写”成 condi。

 对于Service和DAO类,一定是接口,实现需要以Impl的后缀结尾。区别于接口
如:CacheService CacheServiceImpl。

 枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。 

 类接口中属性和方法不要加任何修饰符。

(二) 常量定义

 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。  反例:String key = “id=” + id;

 long和Long初始赋值时,必须使用大写,为了避免和数字1搞混。
:Long a = 2L   反例:Long a = 2l

 不要使用一个常量类维护所有常量,尽可能根据功能进行拆分归类,分开维护。便于理解和维护。

(三) 代码格式 

如果是大括号内为空,则写成{}即可,大括号中间无需换行和空格;如果是非空代码块则:( 1) 左大括号前不换行,左大括号后换行。  (2) 右大括号前换行。  

 左括号与后一个字符之间不出现空格,右括号与前一个字符之间不出现空格
:if (flag == 0)。

 if/for/while/switch/do 等保留字与括号之间都必须加空格。 

 何二目、三目运算符的左右两边都需要加一个空格。 

 注释的双斜线与注释内容之间有且仅有一个空格。 

 方法参数在定义和传入时,多个参数逗号后必须加空格。 :method(“a”, “b”, “c”);

(四) OOP规约

 直接使用类名来访问一个类的静态变量或静态方法。

 所有的覆写方法,必须加@Override注解,可以准确判断是否覆盖成功。

 对外的接口,原则上避免修改,可以增加新接口,过时接口使用@Deprecated注解

 Object的 equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。:"test".equals(object); 

 所有整型包装类对象之间值的比较,全部使用equals方法比较,使用==进行判断的话会有数值范围的限制。

 循环体内字符串拼接,使用StringBuilder的append方法。

 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init方法中。 

 浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals 来判断。 

(五) 日期时间

日期格式化时,传入pattern 中表示年份统一使用小写的y。 

 获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime()。 

(六) 集合处理 

 只要重写equals,就必须重写hashCode。

 判断所有集合内部的元素是否为空,使用isEmpty()方法,而不是size()==0的方式。

 ArrayList的subList方法结果不可转成ArrayList。(subList返回的是ArrayList的内部类,并不是ArrayList,而且是ArrayList的一个视图,对SubList所有的操作都会反映到ArrayList原列表上。)

 使用集合转数组方法,必须使用集合的toArray(T[] array)。

 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator 方式,如果并发操作,需要对Iterator对象加锁。 

 使用工具类Arrays.asList()将数组转换成集合时,不能使用修改集合相关方法,如:add/remove/clear都将抛出UnsupportedOperationException异常。

(七) 并发处理

获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 

 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程,避免过多创建线程、减少创建和销毁线程开销。

 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,Executors返回的线程池对象的缺点是可能会创建大量线程或堆积大量请求,导致OOM。

 并发情况,多考虑锁的性能损耗。能不用锁就不用锁;能锁区块,就不要锁整个方法;能锁对象就别锁类。

 对多个资源、数据库表、对象同时加锁时,需要保持一致的加锁顺序,否则可能会造成死锁。

 如果访问冲突概率不高,推荐使用乐观锁。

 HashMap 在容量不够进行resize时由于高并发可能出现死链,导致CPU飙升,在 开发过程中注意规避此风险。 

 ThreadLocal对象建议使用static修饰

(八) 控制语句

 switch块内,每个case要么通过break/return终止,要么注释说明将执行到哪一个case为止;在一个switch必须包含default,就算是空的。

 当switch 括号内的变量类型为String并且此变量为外部参数时,必须先进行null 判断。

 在 if/else/for/while/do语句中必须使用大括号。 

 在高并发场景中,避免使用”等于”判断作为中断或退出的条件。 反例:判断剩余奖品数量等于 0 时,终止发放奖品,但因为并发处理错误导致奖品数量瞬间变成了负数, 这样的话,活动无法终止。 

(九) 注释规约

类、类属性、类方法的注释必须使用Javadoc规范,使用格式,不得使用 // xxx方式。

所有的抽象方法(包括接口中的方法),必须要用Javadoc注释

所有的类都必须添加创建者和创建日期。 

(十) 前后端规约

 前后端交互的API,需要明确协议、域名、路径、请求方法、请求内容、状态码、响应体。

 前后端数据列表相关的接口返回,如果为空,则返回空数组[]或空集合{}。 

 服务端发生错误时,返回给前端的响应信息必须包含HTTP状态码,errorCode、 errorMessage、用户提示信息四个部分。

二、异常日志 

(一) 错误码

 错误码不体现版本号和错误等级信息。 

 错误码不能直接输出给用户作为提示信息使用。 

(二) 异常处理

 不要捕获继承自RuntimeException的运行时异常,这类异常需要自行检查规避,如:IndexOutOfBoundsException / NullPointerException。

 异常捕获后不要用来做流程控制,条件控制。 

 捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。

 finally块必须对资源对象、流对象进行关闭,有异常也要做try-catch;不要在finally块中使用return。 

(三) 日志规约 

 不要执行使用日志实现类,而应该使用SLF4J的API接口,使用门面模式,容易做到所有类的日志处理方式统一。

 所有日志文件至少保存15天,因为有些异常具备以“周”为频次发生的特点。

 避免重复打印日志,浪费磁盘空间,务必在日志配置文件中设置 additivity=false。 

 日志打印时禁止直接用JSON工具将对象转换成String。

三、单元测试 

 好的单元测试必须遵守 AIR原则,即具有自动化、独立性、可重复执行的特点。

 单元测试是可以重复执行的,不能受到外界环境的影响。 

 保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间 决不能互相调用,也不能依赖执行的先后次序。 

四、安全规约

 隶属于用户个人的页面或者功能必须进行权限控制校验。 

 用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 

 用户输入的 SQL参数严格使用参数绑定或者 METADATA字段值限定,防止 SQL注入, 禁止字符串拼接 SQL访问数据库。 

 表单、AJAX提交必须执行 CSRF安全验证。 

五、MySQL数据库 

(一) 建表规约

 表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint (1表示是,0表示否)。 

 表名字段名必须使用小写字符或数字;禁止出现数字开头,禁止两个下划线之间只有数字。:aliyun_admin,rdc_config,level3_name。

 禁用保留字,如desc、range、match、delayed等。

 表名不使用复数名词。 

 主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。 说明:pk_ 即primary key;uk_ 即 unique key;idx_ 即index的简称。 

小数类型为decimal,禁止使用float和double。 

 如果存储的字符串长度几乎相等,使用 char定长字符串类型。

 varchar为变长字符串,长度不要超过5000,如果存储长度超过该值,使用text,并独立表出来。

 表必备三字段:id, create_time, update_time。 

(二) 索引规约 

 业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。 

 超过三个表禁止 join。需要 join的字段,数据类型保持绝对一致;多表关联查询时, 保证被关联的字段需要有索引。

 在 varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据 实际文本区分度决定索引长度。 

 严禁左模糊或者全模糊。

 利用覆盖索引来进行查询操作,避免回表。 

(三) SQL语句

 不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的标 准统计行数的语法,跟数据库无关,跟NULL和非 NULL无关。 

 当某一列的值全是NULL时,count(col)的返回结果为0,但 sum(col)的返回结果为 NULL,因此使用sum()时需注意NPE问题。 

 in操作能避免则避免,若实在避免不了,需要仔细评估 in后边的集合元素数量,控 制在1000个之内。 

(四) ORM映射

 在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。

 POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行 字段与属性之间的映射。 

 sql.xml配置参数使用:#{},#param# 不要使用${} 此种方式容易出现 SQL注入。

 更新数据表记录时,必须同时更新记录对应的update_time字段值为当前时间。 

六、工程结构 

(一) 应用分层

 分层领域模型规约: 
• DO(Data Object):此对象与数据库表结构一一对应,通过 DAO层向上传输数据源对象。 
• DTO(Data Transfer Object):数据传输对象,Service 或Manager 向外传输的对象。 
• BO(Business Object):业务对象,可以由Service层输出的封装业务逻辑的对象。 
• Query:数据查询对象,各层接收上层的查询请求。注意超过2 个参数的查询封装,禁止使用 Map 类 来传输。 
• VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。 

(二) 二方库依赖 

 二方库版本号命名方式:主版本号.次版本号.修订号。

2 .二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚 举类型或者包含枚举类型的 POJO对象。 

 依赖于一个二方库群时,必须定义一个统一的版本变量,避免版本号不一致。 

 禁止在子项目的 pom依赖中出现相同的 GroupId,相同的 ArtifactId,但是不同的 Version。

(三) 服务器 

 高并发服务器建议调小 TCP协议的 time_wait超时时间。

 给JVM环境参数设置-XX:+HeapDumpOnOutOfMemoryError参数,让JVM碰到OOM 场景时输出dump 信息。

七、设计规约 

 在需求分析阶段,如果与系统交互的User超过一类并且相关的User Case超过5个, 使用用例图来表达更加清晰的结构化需求。 

 如果某个业务对象的状态超过3个,使用状态图来表达并且明确状态变化的各个触发条件。

来源地址:https://blog.csdn.net/weixin_51360584/article/details/128098109

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

阿里开发手册规范(JAVA)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java开发规范

所有的程序开发手册都包含了各种规则。一些习惯自由程序人员可能对这些规则很不适 应,但是在多个开发人员 共同写作的情况下,这些规则是必需的。这不仅仅是为了开 发效率来考虑,而且也是为了后期维护考虑。 命名规范 定义这个规范的目的是让项目中所有
2023-06-03

JAVA开发ORACLE的规范

原文:https://blog.51cto.com/15057847/2650042
JAVA开发ORACLE的规范
2017-08-06

阿里云官方Redis开发规范总结

本文主要介绍了阿里云官方Redis开发规范总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

阿里前端开发中的规范要求

web前端开发中,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式,提升协作效率,降低沟通成本。规范的目的是为了编写高质量的代码。
2022-12-29

《阿里巴巴Java开发手册》码出高效详解(一)- 为什么要学习阿里编码手册

《Java 开发手册》(以下简称《手册》)是每个 Java 工程师人手必备的一本参考指南。该手册包括 编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约 7 个部分 ,涵盖了 Java 开发的常见知识点。认真实践该《手册》能够帮助
《阿里巴巴Java开发手册》码出高效详解(一)- 为什么要学习阿里编码手册
2020-08-04

Java开发之代码规范详解

Java开发中所要遵守的编码规范大体上有如下7点。命名规范、注释规范、缩进排版规范、文件名规范、声明规范、语句规范以及编程规范。【推荐学习:java视频教程】1.命名规范(1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z)、数字(0-9)和下划线“_”。(
Java开发之代码规范详解
2021-07-11

Java开发常用规范技巧有哪些

本篇内容主要讲解“Java开发常用规范技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java开发常用规范技巧有哪些”吧!1、Object 的 equals 方法容易抛空指针异常。从源码
2023-06-02

java开发文档编写规范是什么

Java开发文档编写规范是一套规范,用于指导Java开发人员编写清晰、一致和易于理解的文档。以下是一些常见的Java开发文档编写规范:1. 使用规范的注释格式:在代码中使用注释,描述类、方法和变量的功能以及用法,并使用规范的注释格式,如Ja
2023-08-28

Java项目开发命名规范(动力节点Java学院整理)

最好使用英文,不要用汉语拼音1:包(package):用于将完成不同功能的类分门别类,放在不同的目录(包)下,包的命名规则:将公司域名反转作为包名。比如www.bjpowernode.com 对于包名:每个字母都需要小写。比如:com. b
2023-05-31

阿里数据库开发规范:谁还敢说你的数据库设计的“烂”

数据库设计几个规范: 数据库命名规范、数据库基本设计规范、数据库索引设计规范、数据库字段设计规范、数据库SQL开发规范、数据库操作行为规范 数据库命名规范 1、所有数据库对象名称必须使用小写字母并用下划线分割 不同的数据库名 DbName dbname 不同的
阿里数据库开发规范:谁还敢说你的数据库设计的“烂”
2016-08-20

Maven 修炼手册:让你成为 Java 开发大师

Maven 修炼手册:助你成为 Java 开发大师
Maven 修炼手册:让你成为 Java 开发大师
2024-03-06

mac电脑m1搭建java开发环境参考手册

1 背景介绍 开发人员经常会换电脑,或者换新电脑,意味着重新搭建开发环境,很麻烦。但新电脑到手里面了,不换又不好,此篇专门用来记录mac电脑m1搭建java开发环境的步骤。希望对读者有所帮助,一条龙服务。 后期有时间,会出关于win10环境
2023-08-18

怎么开通阿里云服务器账号注册手机

首先,我们需要下载并安装阿里云服务器的客户端。可以在淘宝、京东等购物网站上搜索相应的阿里云服务器产品,下载安装程序。安装完成后,我们需要登录阿里云服务器的账号,在账号页面上可以看到用户名、密码、邮箱等信息。如果我们没有设置密码,则需要输入密码来登录服务器。登录成功后,我们可以在服务器上创建新的服务器空间,或者购买新的服
2023-10-27

java面向国际化项目开发需遵循的命名规范有哪些

这篇文章主要介绍“java面向国际化项目开发需遵循的命名规范有哪些”,在日常操作中,相信很多人在java面向国际化项目开发需遵循的命名规范有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java面向国际化
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录