在程序员的世界里有两件最讨厌的事情,第一件事情是讨厌写代码注释,第二件事情是讨厌看别人的代码不写注释。虽然这只是个段子,但也反映了当下很多程序员的心声。下面简单介绍下代码规范的重要性,第一,规范的代码可以促进团队合作,第二,规范的代码可以减少bug处理,第三,规范的代码可以降低维护成本,第四,规范的代码有助于代码审查,第五,养成代码规范的习惯,有助于程序员自身的成长。

本系列文章将整合 阿里巴巴《Java开发手册》 和  谷歌《Java编程规范》 ,总结Java开发过程的编码规范,并通过具体编码案例给出编码规范的原因,如果总结内容存在问题还望指出。


目录

1.大括号换行

2.括号空格

3.禁止tab字符

4.注释内容与双斜线需一个空格

5.强制转换时右括号与值不需要空格


本篇将继续介绍Java开发规范过程的代码格式问题,代码格式一般是指代码的表现形式,如空格,对齐样式,长度控制等,由于篇幅内容较多将分为上下两篇,下篇文章链接 Java开发规范之代码格式篇(下)。

1.大括号换行

Alibaba规约(强制)

如果是大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格;

如果是非空代码块则遵循下列规则:

  • 左大括号前不换行。
  • 左大括号后换行。
  • 右大括号前换行。
  • 右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。

Google规约

对于非空块和块状结构,大括号遵循Kernighan和Ritchie风格 (Egyptian brackets):

  • 左大括号前不换行
  • 左大括号后换行
  • 右大括号前换行
  • 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。例如,如果右大括号后面是else或逗号,则不换行。

一个空的块状结构里什么也不包含,大括号可以简洁地写成 {} ,不需要换行。例外:如果它是一个多块语句的一部分(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。

说明:大括号一般是函数、代码块和方法块等整块代码作为功能逻辑的标志符号,因此整洁的代码格式可以清楚了解代码逻辑层次。

区别:两个大厂的规约基本相同,Google规约说明更加详细,Alibaba规约只列举一个示例但也应该默认业界常用规范。

正例:

void doNothing() {}  // 正例,代码为空,大括号简写void doSomething(int flag) {// 正例,左大括号后换行if (flag == 1) {System.out.println("world");// 正例,右大括号前换行} else { //正例,右大括号后有else,不用换行System.out.println("ok");// 正例,在右大括号后直接结束,则必须换行}
}try {int result = 1 / 0;System.out.println(result);
} catch (Exception e) { // 正例,右大括号后有catch, 代码未结束,不用换行// 正例,作为try/catch/finally部分 ,即使大括号内没内容,右大括号也要换行
} finally {// 正例,finally部分 ,即使大括号内没内容,右大括号也要换行,一般实际不这样写空代码只作为参考
}

反例:

// 反例,左括号不用换行,右括号如果内容为空也不用换行
void doNothing()
{
}  // 反例,左括号不用换行,右括号如果代码未结束也不用换行
void doSomething(int flag)
{if (flag == 1) {System.out.println("world");} else{ System.out.println("ok");}
}

2.括号空格

Alibaba规约(强制)

  • 左小括号和字符之间不出现空格,同样,右小括号和字符之间也不出现空格;而左大括号前需要空格。
  • if/for/while/switch/do等保留字与括号之间都必须加空格。
  • 任何二目、三目运算符的左右两边都需要加一个空格。运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。

Google规约

除了语言需求和其它规则,并且除了文字,注释和Javadoc用到单个空格,单个ASCII空格也出现在以下几个地方:

  • 分隔任何保留字与紧随其后的左括号( ( )(如 if, for catch 等)。
  • 分隔任何保留字与其前面的右大括号( } )(如 else, catch )。
  • 在任何左大括号前( { ),两个例外:
  1. @SomeAnnotation({a, b}) (不使用空格)。
  2. String[][] x = foo; (大括号间没有空格,见下面的Note)。
  • 在任何二元或三元运算符的两侧。这也适用于以下“类运算符”符号:
  1. 类型界限中的&( <T extends Foo & Bar> )。
  2. catch块中的管道符号( catch (FooException | BarException e )。
  3. foreach 语句中的分号。
  • 类型和变量之间:List list。
  • 数组初始化中,大括号内的空格是可选的,即 new int[] {5, 6} 和 new int[] { 5, 6} 都是可以的。

Note:这个规则并不要求或禁止一行的开关或结尾需要额外的空格,只对内部空格做要求。

说明:Google规约明确了空格使用场景,Google规约更加规范一些,部分规约条例已按照Alibaba规约拆分到其他条例,请继续参考本文其他内容。

正例:

// 运算符左右两边需要空格
int flag = 1;
// 关键词if与括号之间必须有一个空格,括号内的flag与左括号,0与右括号不需要空格,小括号和大括号之间有空格
if (flag == 0) {System.out.println(say);
}

反例:

// 运算符两侧没有空格
int flag=0;// 关键词if与括号没有空格
if(flag == 0) {System.out.println(flag);
}// flag和左括号之间有空格,0和右括号之间有空格
if ( flag == 0 ) {System.out.println(flag);
}// 小括号和大括号之间无空格
if (flag == 0){System.out.println(flag);
}

3.禁止tab字符

Alibaba规约(强制)

采用4个空格缩进,禁止使用tab字符。如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character;而在eclipse中,必须勾选insert spaces for tabs。

Google规约

每当开始一个新的块,缩进增加2个空格,当块结束时,缩进返回先前的缩进级别。缩进级别适用于代码和注释。

说明:因为tab缩进在不同的操作系统上或在不同的编辑器下显示长短不一定,所以需要设置规则限制使用。IDEA设置tab参考路径 File - Settings - Editor - Code Style - Java - Tabs and indents ,eclipse 设置tab参考路径 Preferrence - Editor - Code Style - Text Editors 。

区别:Alibaba规约缩进采用4个空格,Google规约采用2个空格。个人感觉4个空格更美观。

正例:

// 函数中代码缩进4个空格
void doSomething() {System.out.println();
}

反例:

// if语句中代码块未缩进
if (flag == 1){
System.out.println(flag);
}

4.注释内容与双斜线需一个空格

Alibaba规约(强制)

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

Google规约

如果在一条语句后做注释,则双斜杠(//)两边都要空格。这里可以允许多个空格,但没有必要。

说明:区分注释内容和注释符号。(单独作为一条规定感觉有点夸大影响???)

补充:注意函数注释不能采用双斜线行注释,必须按照/**/注释且标识参数,双斜线注释一般作用于变量注释。

反例:

//这是示例注释,双斜线与注释内容
String param = new String();

5.强制转换时右括号与值不需要空格

Alibaba规约(强制)

在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。

Google规约

未定义类似规范

说明:强制转换类型需要加小括号这时需要明确值,不使用空格可清晰辨识。

正例:

// 长整型符号L与数值无空格
long first = 1000000000000L;
// int类型符号的右括号与数值无空格
int second = (int)first + 2;

反例:

// Math.pow(2, 10)为数值结果,int类型的右括号与它有空格
int result = (int) Math.pow(2, 10);

Java开发规范之代码格式篇(上)相关推荐

  1. 公司项目JAVA开发规范总结(三)——异常处理篇

    三.异常处理篇 1.自定义业务异常 概述:该类是为了让在业务层,能够返回错误信息,而不涉及控制层的返回封装类,让业务层和控制层能有效隔离开来. BusinessException类 @Data pub ...

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

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

  3. Java | 开发规范 | 唯品会开发手册(二) | 集合篇

    Rule 1. [推荐]底层数据结构是数组的集合,指定集合初始大小 推荐底层数据结构为数组的集合包括 ArrayList,HashMap,HashSet,ArrayDequeue等. 数组有大小限制, ...

  4. Java开发规范(阿里+腾讯)

    如何适应企业的标准化开发? 文章目录 前言 腾讯开发规范整理(精简) 阿里开发规范整理(精简) 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越 ...

  5. 阿里巴巴java开发规范学习

    目录 一.编程规约 1.1 命名风格 1.2 常量定义 1.3 代码格式 ​1.4 OOP规约 1.5 集合处理 二.异常 三.MYSQL数据库 3.1 建表规约 3.2 索引规约 3.3 SQL语句 ...

  6. java object转list_这份Java开发规范,让你100%受益!

    今天跟大家分享下Java开发规范的知识. 基于阿里巴巴JAVA开发规范整理: https://github.com/alibaba/p3c 1 命名风格 [强制]类名使用 UpperCamelCase ...

  7. 谈谈Google与微信H5牛牛的Java开发规范

    多年前,Google发布微信H5牛牛搭建平台(h5.fanshubbs.com)来定义Java编码时应遵循的微信牛牛Q_1687054422规范:今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭 ...

  8. JAVA 开发规范标准(集合)

    JAVA 开发规范 一.编程规约 (一)命名规约 1. [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符 号结束. 反例:_name / __name / $Object / ...

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

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

最新文章

  1. Python(Windows)下安装各种库的多种方法总结--灵活使用pip
  2. 【瞎扯】 About Me
  3. html5中表格如何等分,纯css3饼图五等分
  4. java反向映射_opencv 直方图和直方图反向映射
  5. HDU——2768 Cat vs. Dog
  6. 怎么监听Android软键盘的打开和关闭
  7. Asp.Net母版页元素ID不一致的体现
  8. dubbo源码系列之filter的前生
  9. 视频编解码之H.264
  10. js打开新窗口的方法总结
  11. 从Delphi应用程序创建发票,可视化报告生成器FastReport VCL轻松搞定
  12. 大众点评有多少用户2019_2019全国大众点评网数据下载获取
  13. pinpoint集群的安装配置
  14. TotalCommander常用操作
  15. win7事件查看器事件id_使用免费工具从事件查看器中查找事件ID
  16. Mac环境下简化ssh连接vlab口令实现免密登录(UNSW)
  17. 不同以“网”,云端地球全新升级上线!
  18. java-操作 Excel
  19. Talk | 清华大学交叉信息研究院助理教授杜韬:利用计算方法探究流固耦合
  20. android 7.0 手机拍照裁剪问题

热门文章

  1. vue @mousemove实现拖动,鼠标移动过快拖动卡顿
  2. 输入一行字符,统计其中有多少个单词,并将每个单词首字母大写(考虑空格,考虑单词的缩写)
  3. 医院管理住院系统的研究与实现(论文+PPT+源码)
  4. eeglab脑电头皮地形图原理学习
  5. 千古绝唱---------《钗头凤》
  6. hue 3.1.2 启用kerberose认证
  7. python爬取某网站图片
  8. 微信公众号自动回复设置教程
  9. 强烈推荐邱锡鹏人工智能书籍《神经网络与深度学习》
  10. 【回溯法】简单装载问题与复杂装载问题