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

Java阿里巴巴代码规范

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Java阿里巴巴代码规范

目录


1 编程规约

我们介绍了让代码规范的方案,下面我们就来说一下阿里的代码规范文档

在这里插入图片描述

业界公认的代码规范手册(国内)当属阿里巴巴旗下出版的《Java 开发手册》,经过几个版本的迭代,最新手册为《Java 开发手册》,更新时间为2022年2月3号。手册以 Java 开发者为中心视角,划分为编程规约、异常日志、 单元测试、 安全规约、 MySQL 数据库、 工程结构、 设计规约七个维度,再根据内容特征,细分成若干二级子目录。根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。对于规约条目的延伸信息中,“说明” 对规约做了适当扩展和解释;“正例” 提倡什么样的编码和实现方式;“反例”说明需要提防的雷区, 以及真实的错误案例。

1.1 方法参数类型必须一致,不要出现自动装箱拆箱操作

1.1.1 反例

这种操作很容易产生难以排查的NPE异常

public static int handel(Integer value) {    return value;}

1.1.2 正例

入参以及出参,和参数传递类型是一致的

public static Integer handel(Integer value) {    return value;}

1.2 SimpleDateFormat是线程不安全的

SimpleDateFormat 是线程不安全的类,一般不要定义为 static 变量,如果定义为 static, 必须加锁,或者使用 DateUtils 工具类

1.2.1 反例

使用这种方式在多线程的情况下会报错,或者出现数据不一致的情况

private static final SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

在这里插入图片描述

1.2.2 正例

使用ThreadLocal的方式保证线程安全,或者使用DateTimeFormatter代替SimpleDateFormat

private static final ThreadLocal threadLocal = new ThreadLocal() {    @Override    protected SimpleDateFormat initialValue() {        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    }};

1.3 使用equals方法应该注意空指针

1.3.1 反例

如果object为null就会抛出NPE异常

object.equals("test");

1.3.2 正例

应该使用常量或者确定的值来进行判断equals

"test".equals(object);

或者使用Objects.equals

 Objects.equals(object1,object2)

2 异常日志

2.1 事务场景中如果异常被被捕获要注意回滚

2.1.1 反例

@Service@Transactional(rollbackFor = Exception.class)public class UserServiceImpl implements UserService {    @Override    public void save(User user) {        try{        //some code        //db operation        }catche(Exception e){                    }    }}   

2.1.2 正例

@Service@Transactional(rollbackFor = Exception.class)public class UserServiceImpl implements UserService {    @Override    public void save(User user) {        try{        //some code        //db operation        }catche(Exception e){            //捕获处理后需要再将异常抛出            throw  e;        }    }}   

2.2 不要在 finally 块中使用 return

try 块中的 return 语句执行成功后,并不马上返回,而是继续执行 finally 块中的语句,如果此处存 在 return 语句,则在此直接返回,无情丢弃掉 try 块中的返回点。

2.2.1 反例

这种情况下结果永远返回的都是true,fanally中不要做返回操作

public static boolean getValue(String text) {    try {        return text.equals("123");    } finally {        return true;    }}

2.2.2 正例

public static boolean getValue(String text) {    return "123".equals(text);}

2.3 应用中不可直接使用日志系统(Log4j、Logback)中的 API

在Java生态体系中,围绕着日志,有很多成熟的解决方案,关于日志输出,主要有两类工具。

一类是日志框架,主要用来进行日志的输出的,比如输出到哪个文件,日志格式如何等,另外一类是日志门面,主要一套通用的API,用来屏蔽各个日志框架之间的差异的。所以,对于Java工程师来说,关于日志工具的使用,最佳实践就是在应用中使用如Log4j + SLF4J 这样的组合来进行日志输出。这样做的最大好处,就是业务层的开发不需要关心底层日志框架的实现及细节,在编码的时候也不需要考虑日后更换框架所带来的成本,这也是门面模式所带来的好处。请不要在你的Java代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J这种日志门面。

2.4 所有日志文件至少保存15天

所有日志文件至少保存15天,因为有些异常具备以“周”为频次发生的特点,网络运行状态、安全相关信息、系统监测、管理后台操作、用户敏感操作需要留存相关的网络日志**不少于6个月**。

3 单元测试

3.1 好的单元测试必须遵守 AIR 原则

单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的,好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。

3.2 单元测试应该是全自动执行的,并且非交互式的

  • 测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。
  • 输出结果需要人工检查的测试不是一个好的单元测试。
  • 单元测试中不准使用System.out来进行人肉验证,必须使用assert来验证。

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

单元测试通常会被放到持续集成中,每次有代码check in时单元测试都会被执行,如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用,为了不受外界环境影响,要求设计代码时就把SUT的依赖改成注入,在测试时用spring 这样的DI框架注入一个本地(内存)实现或者Mock实现。

4 安全规约

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

中国大陆个人手机号码显示为:`137****0969`,隐藏中间 4 位,防止隐私泄露,以及用户的身份证号码,银行卡号码,用户姓名等都需要进行脱敏处理

4.2 用户请求传入的任何参数必须做有效性验证

说明:忽略参数校验可能导致:

  • page size 过大导致内存溢出
  • 恶意 order by 导致数据库慢查询
  • 缓存击穿
  • 服务器端请求伪造(SSRF)
  • 任意重定向
  • SQL 注入,Shell 注入,反序列化注入
  • 正则输入源串拒绝服务 ReDoS

5 MySQL 数据库

5.1 表明命名规范

表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。

数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑,MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写,因此,数据库名、表名、 字段名,都不允许出现任何大写字母,避免节外生枝
  • 一般以t_xxx来作为表名
  • 一般以v_xxx来作为视图名称

5.2 表必备的几个字段

  • 创建人:标记记录的初始创建人
  • 创建时间:标记初始的创建人
  • 修改人:标记修改人
  • 修改时间:标记最后修改日期
  • 版本号:用于统一化的乐观锁

6 工程结构

6.1 线上应用不要依赖 SNAPSHOT 版本

正式发布的类库必须先去中央仓库进行查证,使 RELEASE 版本号有延续性,且版本号不允许覆盖升级。

6.2 注意POM坐标冲突

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

在本地调试时会使用各子项目指定的版本号,但是合并成一个 war,只能有一个版本号出现在最后的lib 目录中,曾经出现过线下调试是正确的,发布到线上却出故障的先例。

7 阿里规范插件安装

这里面只列出来了几个比较重要的,很有很多的规约没有写出来,为了让大家码代码的效率更高,可以安装阿里的代码规范插件来约束自己凌乱的代码

阿里规范插件GitHub地址:https://github.com/alibaba/p3c

7.1 IDEA安装该插件步骤

打开IDEA,File-> Setteings->Plugins,在搜索栏搜索Alibaba,然后安装,安装完后点击Restart IntelliJ IDEA重启idea

在这里插入图片描述

7.2 使用

安装好了,使用方法是:打开IDEA,点击tools—>安装的阿里编码规约,可以选择中英文切换,项目右键选择编码规约扫描就可以进行查看自己编码哪些地方不够好

在这里插入图片描述

7.3 检查等级

检查结果一共分三个等级

等级验证程度备注
Blocker严重有明显问题,影响功能以及性能
Critical危险一般问题,遵循标准
Major主要一般为建议

7.4 查看结果

可以通过结果查看一般存在的问题

在这里插入图片描述

来源地址:https://blog.csdn.net/ZGL_cyy/article/details/131277035

免责声明:

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

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

Java阿里巴巴代码规范

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

下载Word文档

猜你喜欢

sonarqube配置全指南,集成阿里巴巴p3c规范

环境准备 内置数据库Sonar安装成功后,默认内置H2数据库,用于记录单次的扫描结果,对同一个project重复扫码,会覆盖之前的扫描记录,所以H2 数据库只应用于测试,不可以用于生产环境,那如果你是想玩玩,不想长期扫描你的项目,可以不必配置数据库自定义数据库
sonarqube配置全指南,集成阿里巴巴p3c规范
2015-03-19

阿里巴巴云代理商

作为一名阿里巴巴云代理商,我深知自己的责任和使命。我们需要不断地拓展市场,为客户提供更优质的产品和服务。而如何在激烈的市场竞争中脱颖而出,如何让我们的客户信任我们,选择我们,是我们必须要解决的问题。首先,我们需要了解客户的需求。客户是我们的上帝,他们需要什么,我们就要给什么。因此,我们需要不断地跟进客户的反馈,了解他们
阿里巴巴云代理商
2023-10-28

阿里巴巴公有云代理商

阿里巴巴公有云代理商可以为客户提供多种云计算服务,包括云服务器、云存储、数据库、安全、人工智能、大数据等。客户可以根据自己的业务需求和预算来选择适合自己的云计算服务。阿里巴巴公有云代理商的产品线非常丰富,可以满足各种不同类型的客户需求。阿里巴巴公有云代理商的优势之一是它的稳定性和可靠性。阿里巴巴拥有强大的技术团队和丰富
阿里巴巴公有云代理商
2023-10-28

阿里巴巴云代理怎么样

一、阿里云代理的优势高效:阿里云代理具有更快的部署速度和更低的资源占用率,能够满足企业在高流量、高负载下的需求。稳定:阿里云代理具有优秀的技术支持和稳定的服务,能够为企业提供高质量的云计算服务,保证业务的稳定运行。可靠:阿里云代理具有完善的服务保障体系,能够为企业提供可靠的技术支持和售后服务,帮助企业解决各种技术难题。
2023-10-27

阿里巴巴云服务代理商

在选择阿里巴巴云服务代理商时,客户需要考虑以下几个因素:可靠性:选择一个可靠的云服务代理商非常重要,因为他们能够为客户提供稳定、安全的云计算服务。阿里巴巴云服务代理商拥有丰富的经验和技术,能够提供高品质的云计算服务,同时具备很强的可靠性保证。价格:价格是客户考虑的重要因素之一。阿里巴巴云服务代理商的价格相对较低,并且可
阿里巴巴云服务代理商
2023-10-27

阿里巴巴云代理哪家好

首先,阿里云拥有完善的产品和服务。阿里云作为国内最大的云计算服务商之一,拥有自主研发的产品和服务,包括云服务器、容器服务、数据库、CDN、负载均衡等,可以满足不同用户的需求。其次,阿里云具有较强的市场竞争力。阿里云作为阿里巴巴集团旗下的云计算服务提供商,具有一定的市场占有率和品牌知名度,与其他云计算服务提供商相比,阿里
2023-10-27

阿里巴巴云客服代理商

首先,云客服代理商可以帮助客户优化业务流程,提高工作效率。阿里巴巴集团旗下有众多的企业和品牌,客户遍布全球,这就需要云客服代理商提供高效的解决方案来帮助客户应对业务挑战。云客服代理商可以通过分析客户需求和业务特点,为客户提供最佳的服务解决方案,从而帮助客户更好地实现业务目标。例如,阿里巴巴集团推出的淘宝客服平台,就是一
2023-10-27

阿里巴巴云代理是什么

阿里巴巴云代理可以提供多种云计算服务,包括计算、存储、数据库、网络、安全、人工智能等方面。通过阿里云代理,客户可以以较低的价格、更便捷的方式获得所需的云计算服务。此外,阿里云代理还提供了丰富的解决方案,包括应用程序迁移、多云部署等,帮助客户更加高效地管理和使用云计算资源。在阿里云代理中,阿里云公司会对客户的需求进行分析
阿里巴巴云代理是什么
2023-10-28

阿里巴巴云平台有代理吗

作为阿里云的一名忠实用户,我非常喜欢阿里云的产品和服务。它们提供了强大的功能和稳定的性能,让我们能够轻松地应对各种工作和生活场景。在使用阿里云的过程中,我深刻体会到了其强大的技术支持和良好的用户体验。在使用阿里云的产品时,我们可以享受到诸多的便利。例如,我们可以在阿里云上租用云服务器,享受到稳定可靠的云计算服务。此外,
阿里巴巴云平台有代理吗
2023-10-28

阿里巴巴无影云电脑代理

价格优惠:阿里云无影云电脑提供了低价的云电脑产品,为用户节省了购买云电脑的费用。多种配置选择:无影云电脑提供了多种配置选择,用户可以根据自己的需求选择最适合的配置。安全可靠:阿里云无影云电脑采用了多重安全措施,确保用户的数据安全。灵活的使用方式:无影云电脑提供了灵活的使用方式,用户可以在云端进行操作,并且支持在线升级和恢复等功能。专业的售后服务:阿里云无影云电脑提供了专业的售后服务,为用户解决了使...
2023-10-27

阿里巴巴云服务器在哪里看账号密码

阿里云服务器的账号密码一般是存储在服务器上的数据库中,可以通过登录阿里云官方网站或者阿里云客户端来查看。如果你没有阿里云账号,可以先在阿里云官网注册一个账号,再登录使用。以下是查看阿里云服务器账号密码的步骤:在阿里云官网上注册账号。在该页面,您需要填写您的个人信息、密码等信息,并完成注册。登录阿里云服务器。在该页面中,您可以输入一个账号、密码和验证码来登录阿里云服务器。在登录过程中,您需
2023-10-26

阿里巴巴云服务器在哪里看账号密码呢

阿里云服务器的账号密码可能在多个地方查看,您可以登录阿里云官网(https://www.aliyun.com),点击右下角的“登录”或“注册账号”链接,进入登录页面,按照指引输入账号密码即可登录。如果您不确定密码是否正确,也可以联系阿里云客服,进行密码重置。此外,您可以尝试使用阿里云提供的安全工具进行密码重置。安全工具提供了多种方式,如短信验证、重置密码等,可以帮助您解决任何可能已经泄露的账号
2023-10-26

西安阿里巴云代理商

在西安这个古城,有着众多的IT公司,其中最著名的当属阿里巴巴集团旗下的西安阿里巴云代理商。在这个公司中,我们能够感受到了西安IT行业的繁荣与发展,同时也能够了解到西安本地IT企业的发展状况。阿里巴巴集团是全球最大的互联网公司之一,它在IT行业的地位无可撼动。西安阿里巴云代理商的成立,标志着西安IT产业在全国的地位和影响
2023-10-27

阿里巴巴云服务器在哪里看账号登录密码

阿里云服务器的账号登录密码可能会被存储在阿里云服务器的数据库中,以便管理员可以随时访问和查看相关数据。您可以尝试使用以下两种方式来查找并找回您的登录密码:使用阿里云管理员账户登录:如果您在阿里云网站上注册了一个账号并且使用该账号登录,登录密码将保存在服务器数据库中。您可以在阿里云控制台中找到登录密码的数据库文件,例如“databases”或“settings”。在其中,您需要输入服务器管理员的用户名和密码,才能成功登录服...
2023-10-27

编程热搜

  • 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动态编译

目录