谈谈阿里与谷歌的Java开发规范

2023-10-30

无规矩不成方圆,编码规范就如同协议,有了Http、TCP等各种协议,计算机之间才能有效地通信,同样的,有了一致的编码规范,程序员之间才能有效地合作。道理大家都懂,可现实中的我们,经常一边吐槽别人的代码,一边写着被吐槽的代码,究其根本,就是缺乏遵从编码规范的意识!多年前,Google发布Google Java Style来定义Java编码时应遵循的规范;今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭代了多个版本,直至9月份又发布了pdf终极版。这两大互联网巨头的初衷,都是希望能够统一标准,使业界编码达到一致性,提升沟通和研发效率,这对于我们码农无疑是很赞的一笔福利呀。笔者将两份规范都通读了一遍,其中列举的不少细则跟平时的编码习惯基本是符合的,不过还是有不少新奇的收获,忍不住记录在此,供日后念念不忘~

Java开发规范总览

一、Google Java Style

Google的java开发规范主要分为6大部分:源文件基本规范、源文件结构、代码格式、命名、编程实践和Javadoc,各部分概要如下:

1、源文件基本规范(source file basics):文件名、文件编码、特殊字符的规范要求
2、源文件结构(source file structure):版权许可信息、package、import、类申明的规约
3、代码格式(formatting):大括号、缩进、换行、列长限制、空格、括号、枚举、数组、switch语句、注4、解、注释、和修饰符等格式要求
5、命名(Naming):标识符、包名、类名、方法名、常量名、非常量成员名、参数名、局部变量的命名规范
6、编程实践(Programming Practices):@override、异常捕获、静态成员、Finalizers等用法规约

二、阿里巴巴Java开发手册

阿里的Java开发手册相对于前者更上一层楼,它除了基本的编程风格的规约外,还给出了日志、单元测试、安全、MySQL、工程结构等代码之外的规约,据说是阿里近万名开发同学集体智慧的结晶,相当了得,还是挺值得借鉴一下的。各部分概要如下:

1、编程规约:命名风格、常量、代码格式、OOP、集合处理、并发、控制语句、注释等
2、异常日志:异常处理、日志的命名、保留时间、输出级别、记录信息等
3、单元测试:AIR原则(Automatic,Independent,Repeatable)、单侧的代码目录、目标,单侧的写法,即BCDE原则(Border,Correct,Design,Error)
4、安全规约:权限校验、数据脱敏、参数有效校验、CSRF安全过滤、防重放限制、风控策略等
5、MySQL数据库:建表、索引、SQL语句、ORM映射等
6、工程结构:应用分层、二方库依赖(坐标命名、接口约定、pom配置)、服务器端各项配置(TCP超时、句柄数、JVM参数等)

熟知的规范

对于大家已经烂熟于心并已习惯遵守的一些编码规范,比如类名、常量的命名、数组的定义、Long类型的字面等,就不在此一一列出了,只想就一些平时编码中较容易个性化,并可能会存在争议的规范进行一番探讨。为了便于说明,用G表示规范出自于Google Java StyleA表示规范出自于阿里巴巴Java开发手册

[A]IDE的text file encoding设置为UTF-8;IDE中文件的换行符使用Unix格式,不要使用Windows格式([G]文件编码:UTF-8)

看似简单的一个编码约定,在实际开发过程中却经常出现不一致,由于我们是中文操作系统,系统编码是GBK。当两个协作的开发人员IDE,一个采用系统默认编码,一个设置为UTF-8,那么二人看对方写的中文注释就各自都是乱码了,很尴尬。对于“换行符使用Unix格式”,这个在编写shell和hive脚本时踩过好几次坑,而且错误提示很隐晦,一时半会还真察觉不出来,只能说这个规范请务必遵守!

[A]代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

大多数程序员还是都会遵从英文的命名方式,但在实际工作中还真有遇到过拼音与英文混用的命名,比如创建报文的函数命名为createBaowen,看起来怪怪的,有点不伦不类。

[A]抽象类命名使用Abstract或Base开头;异常类使用Exception结尾;测试类以它要测试的类的名称开始,以Test结尾

以spring源码为例,其抽象类都是以Abstract开头,异常类以Exception结尾,测试类则是以Tests结尾。

[A]POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。

这个问题一说大家都知道,但实际却是很容易被忽视!因为Boolean通常表达“是”或“否”的意思,可能一遇到布尔变量,大家会习惯性地将它与is关联起来,“很自然”地就会以is开头定义变量。但笔者想说的是,这其实反应了至少两个问题:1、对JavaBean属性命名规范不熟;2、对框架解析POJO的原理不熟,如RPC反向解析、spring MVC参数绑定、MyBatis处理映射等。

private boolean isActive;
//lombok、Eclipse生成getter、setter的结果如下,框架会误把变量解析成active
public boolean isActive() {
    
  return isActive;
}
public void setActive(boolean isActive) {
    
  this.isActive = isActive;
}

在搞清这两个问题前,还是建议老老实实按规范来吧。

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,类名若有复数含义,则可使用复数形式。

实际工作中看到过包名包含下划线的,如org.sherlockyb.user_manage.dao,还是有必要统一一下。

[A]不允许任何魔法值(即未经定义的常量)直接出现在代码中。
反例:String key = “Id#taobao_” + tradeId;
​ cache.put(key, value);

避免硬编码问题是每个程序员都应该具备的基本素养,硬编码所带来的可读性差、维护困难等问题,众所周知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谈谈阿里与谷歌的Java开发规范 的相关文章

  • 一张表看清哪些企业属于阿里大厂版图

    一张表看清哪些企业属于阿里大厂版图 百胜餐饮集团已经宣布与春华资本集团及蚂蚁金融服务集团达成协议 二者共同向百胜中国投资4 60亿美元 该项投资将与百胜餐饮集团与百胜中国的分拆同步进行 蚂蚁金服将帮助百胜中国为旗下品牌提供移动支付服务 包括
  • 程序员应该掌握的 10 个搜索技巧

    在今天 用户可以通过搜索引擎轻松找出自己想要的信息 但还是难以避免结果不尽如人意的情况 实际上 用户仅需掌握几个常用技巧即可轻松化解这种尴尬 下面介绍 10 个在进行 Google 搜索时可以使用的便捷技巧 其他搜索引擎也支持这 10 种技
  • 阿里巴巴一道笔试题

    其实这是谷歌的一道面试题 给定能随机生成整数1到5的函数 写出能随机生成整数1到7的函数 惭愧 阿里的笔试题做错了 说实话 以前没见过 见过了就把搞懂 阿里题目 给定rand 7 表示能生成1 7的随机数 使用四则运算和循环等控制语句 可以
  • 谷歌浏览器旧版本下载地址

    谷歌浏览器下载地址 http www chromedownloads net django API学习 地址 https github com LABELNET django mysite frist django API学习 CSDN博客
  • 关于WiFi和信号图标出现感叹号消除办法

    谷歌原生安卓系统当连接到移动数据网络或者WIFI网络的时候 其NetworkMonitor模块会向特定的服务器发起一个http的请求并利用收到的响应进行网络状态判断 由于谷歌的服务器被天朝屏蔽 所以导致没有返回值 这个时候谷歌安卓系统就会在
  • 浏览器被万恶的hao123锁定主页

    某天突然发现本地谷歌和火狐浏览器主页被流氓hao123劫持了 hao123在火狐浏览器的犯罪现场 2 hao123在谷歌浏览器的犯罪现场 拯救谷歌浏览器 在谷歌浏览器输入chrome version 删除桌面原来的浏览器快捷键 定位到谷歌浏
  • android studio导入源码(来自github上下载的压缩包)

    Francis学习笔记之android studio解决系列一 andorid studio导入源码问题及android studio 中途出错解决办法 一 导入源码 首先看一下从github下载的压缩包解压后文件内容 从上面发现没有gra
  • Code For Better 谷歌开发者之声 ——Tensorflow与深度学习

    给大家推荐一款丧心病狂的API测试工具 Apifox Apifox 是接口管理 开发 测试全流程集成工具 定位 Postman Swagger Mock JMeter 点击此处跳转体验 目录 一 TensorFlow简介 二 机器学习与深度
  • 英伟达闲着没事,做了一个超级逼真的人脸生成AI系统!

    Nvidia 英伟达的人脸面部表情方法真的是GAN 风格 一种新的生成性对抗网络方法让技术观察者摸不着头脑 图像如何虚假而又看起来如此真实 研究人员在一段视频中说 我们想出了一种新的发生器 可以自动学习分离图像的不同方面而无需任何人为监督
  • Android Studio Kotlin环境搭建

    1 安装Kotlin插件 File gt Settings gt Plugins Kotlin 搜索并安装重启AS 2 创建一个项目 3 将Java代码转换为Kotlin 打开MainActivity 按快捷健Shift Cril A输入
  • 阿里一道Java并发面试题 (详细分析篇)

    说明 前天分享了一篇关于阿里的 Java常见疑惑和陷阱 的文章 有人说这个很早就有了 可能我才注意到 看完之后发现内容非常不错 有几个我也是需要停顿下想想 题目 我个人一直认为 网络 并发相关的知识 相对其他一些编程知识点更难一些 主要是不
  • 简历被pass,笔试被淘汰,还有什么办法能直通面试?

    互联网是目前的热门行业 越来越多的年轻人也是一心想要往上扑 1 互联网行业处于成长期 科技行业扶持力度大 未来整个行业的上升空间巨大 我们都知道 两个人同时出发 搭乘巨轮比乘坐小船更容易走的更快更远 互联网行业就是那搜巨轮 借力使力 越早上
  • 性能综述方法论

    性能问题和Bug不同 后者的分析和解决思路更清晰 很多时候从应用日志 文中的应用指分布式服务下的单个节点 即可直接找到问题根源 而性能问题 其排查思路更为复杂一些 对应用进行性能优化 是一个系统性的工程 对工程师的技术广度和技术深度都有所要
  • 谷歌开源图片压缩算法Guetzli实测体验报告

    作者 王亚军 编辑 宋秉金 王亚军 腾讯工程师 负责OMG无线新闻 腾讯视频图片服务等的业务运维工作 阅读原文 更多技术干货 请访问腾云阁 谷歌大神又出开源新技术啦 这次是对JPEG格式的图片采用全新算法重新编码 输出的图片还是JPEG但是
  • 华为VS谷歌:万物互联,谁主沉浮?

    一 一周两套操作系统发布 6月2日 华为通过直播形式举行了鸿蒙HarmonyOS 2及华为全场景新品发布会 关于该发布会的详细内容老猿在 鸿蒙最新功能及承载设备详解 HarmonyOS 2及华为全场景新品发布会全纪录 进行了详细介绍 在此不
  • 谷歌chrome浏览器的源码分析(一)

    随着网络技术的发展 越来越多应用都已经离不开网络 特别像人类大脑一样的知识库的搜索引擎 更加是离不开功能强大的云计算 不过 即便云计算非常强大 但它还不能直接地把结果呈现给用户 这样就需要一个客户端来呈现出来 这个客户端就是浏览器 现在越来
  • 使用osmdroid6.0.2加载谷歌、高德、天地图等瓦片地图

    研究了一星期多的Osmdroid6 0 2 深感这个开源的android地图包强大 因为使用其他瓦片涉及知识产权 请大家谨慎使用 本文只做研究测试 新建GoogleTileSource类继承org osmdroid tileprovider
  • 谷歌开源代码评审规范:好坏代码应该这样来判断

    谷歌开源了一套代码评审 Code Review 规范 它是谷歌一套通用的工程实战指南 几乎涵盖了所有编程语言与各种类型的项目 这个规范代表了谷歌长期发展以来最佳实战经验的集合 谷歌表示希望开源项目或其他组织能够从这套规范中受益 代码评审 也
  • pip install 国内镜像源

    经验证 阿里的云最快 记得是https不是http 对于Python开发用户来讲 PIP安装软件包是家常便饭 而国外的源下载速度太慢 浪费时间 而且常出现下载后安装出错问题 故把pip安装源替换成国内镜像 可大幅提高下载速度 还可以提高安装
  • Google 在 ChatGPT 时代的生死之战:居然把 DeepMind 和 Google Brain 合并了

    今天一大早 6 点起来 居然看到 Google 将 DeepMind 和 Google Brain 合并为 Google DeepMind 了 Google and Alphabet CEO Sundar Pichai DeepMind 创

随机推荐

  • Android Geocoder(位置解析)

    Android中提供GPS定位服务 同时开发者可以对获得的位置信息进行解析 可以获得位置的详细信息 1 gps定位 在Eclipse中建立android应用程序 android sdk中提供了locationmanager来获得系统提供的定
  • Python练习(三)

    目录 传感器日志光照统计 文本字符分布 白鹿原 词频统计 习题 传感器日志光照统计 本题目附件提供了一个传感器日志文件 为文本类型 共 1 千行 每行包含了日期 时间和 4 种传感器读数值 其中 4 种传感器读数值分别是 温度 湿度 光照和
  • Spring Boot 实现接口幂等性的 4 种方案

    一 什么是幂等性 幂等是一个数学与计算机学概念 在数学中某一元运算为幂等时 其作用在任一元素两次后会和其作用一次的结果相同 在计算机中编程中 一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 幂等函数或幂等方法是指可以使
  • 广点通sdk接入 _橱窗广告

    广点通sdk接入 橱窗广告 1 导入相关架包 写入相关权限和配置 android query full 0 26 7 jar GDTUnionSDK 4 8 513 jar
  • 【Elasticsearch学习笔记-基础篇3】Elasticsearch 聚集(aggregation)与过滤器(filter)

    前言 这篇主要总结一下 es 的聚集 aggregation 与过滤器 filter 不会涉及到具体的 API 操作与示例 主要总结概念性与本人理解的内容 以下是主要内容地图 在写聚集之前 我们先来看一下过滤器 过滤器 Filter 首先
  • linux安装odoo10,Centos7部署Odoo10生产环境

    该篇文章是我参考网上教程 整理出适合自己使用的方法 是通过odoo10的rpm包进行安装 一 安装odoo10 1 安装相关依赖 yum update yum install wget yum install y epel release
  • Spring Data JPA教程:审计(二)

    公众号 欢迎关注 书接上文 本文解决前面两个问题中的第二个问题 我们将为实体加上创建者和修改者的信息 首先创建一个返回授权用户信息的组件 获取授权用户信息 Spring Data JPA使用AuditorAware
  • c++基础——区分引用和指针

    目录 前言 1 引用 1 2引用的概念 1 2引用的定义 1 3引用与const 1 4引用的使用场景 2 指针 2 1概念 2 2获取对象的地址 2 3利用指针访问对象 2 3空指针 2 4野指针 2 4 1概念 2 4 2野指针的产生
  • Vs2019+Qt

    一 下载vs2019和qt 关于vs2019的配置方法不在赘述 上一篇已经讲解了 点击传送门 1 下载vs2019 直接在官网点击下载即可 是免费的 2 下载qt 在官网站下载即可 关于vs和qt安装 vs2019安装到自定义的目录就行 根
  • javascript 中函数调用方法:apply() 和 call()

    每个函数都包含两根非继承而来的方法 apply 和call 这两个方法的用途都是在特定的作用域中调用函数 实际上等于设置函数体内this对象的值 首先 apply 方法接收两个参数 一个是在其中运行函数的作用域 另一个是参数数组 其中第二个
  • Nacos - nacos-mysql.sql源文件与application.properties配置文件

    目录标题 前言 内容 初始化 MySQL 数据库 application properties 配置 前言 Nacos设置外部数据源 需要初始化nacos mysql sql源文件 修改application properties配置文件
  • android游戏开发(OpenGL ES绘制矩形平面)

    接触android将近一年了 以前学的应用开发 现在自学android游戏开发 把自己学到的分享出来一下 这也是我的第一篇博客 不说废话了 开始正文 GLRender类用于图形的渲染工作 Util类用于glrender中的数据缓冲 GLRe
  • 信号与中断的区别

    信号与中断的相似点 1 采用了相同的异步通信方式 2 当检测出有信号或中断请求时 都暂停正在执行的程序而转去执行相应的处理程序 3 都在处理完毕后返回到原来的断点 4 对信号或中断都可进行屏蔽 信号与中断的区别 1 中断有优先级 而信号没有
  • R:增加或删除列表元素

    列表创建之后可以添加新的组件 gt z lt list a abc b 12 gt z c lt Add gt z a 1 abc b 1 12 c 1 Add 还可以直接使用索引添加组件 gt z lt list a abc b 12 c
  • 深入了解java.lang.ArrayIndexOutOfBoundsException异常

    异常介绍 什么是异常 在编程过程中 异常是指在程序执行期间发生的意外或异常情况 当程序遇到异常时 会中断正常的执行流程 并且根据异常类型采取相应的处理措施 异常的分类 异常可以分为两种类型 受检异常 Checked Exception 和非
  • 在职阿里6年,一个29岁女软件测试工程师的心声

    简单的先说一下 坐标杭州 14届本科毕业 算上年前在阿里巴巴的面试 一共有面试了有6家公司 因为不想请假 因此只是每个晚上去其他公司面试 所以面试的公司比较少 其中成功的有4家 另外2家失败的原因在于 1 对于系统知识的了解不够全面 在最后
  • 【华为OD机试真题 JAVA】数组连续和

    JS版 华为OD机试真题 JS 数组连续和 标题 数组连续和 时间限制 1秒 内存限制 65536K 语言限制 不限 给定一个含有N个正整数的数组 求出有多少个连续区间 包括单个正整数 它们的和大于等于x 输入描述 第一行两个整数N x 0
  • Android自定义view之View的测量过程全解析

    Android 应用层开发中绕不开自定义 View 这个话题 虽然现在 Github 上有形形色色的开源库供大家使用 但是作为一名开发者而言 虽然不提倡重复造轮子 但是轮子都是造出来的 碰到一些新鲜的 UI 效果时 如果现有的控件无法完成任
  • 【零基础学QT】第九章 窗口美化QSS的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • 谈谈阿里与谷歌的Java开发规范

    无规矩不成方圆 编码规范就如同协议 有了Http TCP等各种协议 计算机之间才能有效地通信 同样的 有了一致的编码规范 程序员之间才能有效地合作 道理大家都懂 可现实中的我们 经常一边吐槽别人的代码 一边写着被吐槽的代码 究其根本 就是缺