Java开发规范之代码格式篇(上)
在程序员的世界里有两件最讨厌的事情,第一件事情是讨厌写代码注释,第二件事情是讨厌看别人的代码不写注释。虽然这只是个段子,但也反映了当下很多程序员的心声。下面简单介绍下代码规范的重要性,第一,规范的代码可以促进团队合作,第二,规范的代码可以减少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 )。
- 在任何左大括号前( { ),两个例外:
- @SomeAnnotation({a, b}) (不使用空格)。
- String[][] x = foo; (大括号间没有空格,见下面的Note)。
- 在任何二元或三元运算符的两侧。这也适用于以下“类运算符”符号:
- 类型界限中的&( <T extends Foo & Bar> )。
- catch块中的管道符号( catch (FooException | BarException e )。
- 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开发规范之代码格式篇(上)相关推荐
- 公司项目JAVA开发规范总结(三)——异常处理篇
三.异常处理篇 1.自定义业务异常 概述:该类是为了让在业务层,能够返回错误信息,而不涉及控制层的返回封装类,让业务层和控制层能有效隔离开来. BusinessException类 @Data pub ...
- 「 Java开发规范 」10人小团队Java开发规范参考这篇就够了
<菜鸟程序员成长计划>之团队高效合作[开发规范篇] 1.「 Java开发规范 」10人小团队Java开发规范参考这篇就够了! 2.「 前端开发规范 」10人小团队前端开发规范参考这篇就够了 ...
- Java | 开发规范 | 唯品会开发手册(二) | 集合篇
Rule 1. [推荐]底层数据结构是数组的集合,指定集合初始大小 推荐底层数据结构为数组的集合包括 ArrayList,HashMap,HashSet,ArrayDequeue等. 数组有大小限制, ...
- Java开发规范(阿里+腾讯)
如何适应企业的标准化开发? 文章目录 前言 腾讯开发规范整理(精简) 阿里开发规范整理(精简) 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越 ...
- 阿里巴巴java开发规范学习
目录 一.编程规约 1.1 命名风格 1.2 常量定义 1.3 代码格式 1.4 OOP规约 1.5 集合处理 二.异常 三.MYSQL数据库 3.1 建表规约 3.2 索引规约 3.3 SQL语句 ...
- java object转list_这份Java开发规范,让你100%受益!
今天跟大家分享下Java开发规范的知识. 基于阿里巴巴JAVA开发规范整理: https://github.com/alibaba/p3c 1 命名风格 [强制]类名使用 UpperCamelCase ...
- 谈谈Google与微信H5牛牛的Java开发规范
多年前,Google发布微信H5牛牛搭建平台(h5.fanshubbs.com)来定义Java编码时应遵循的微信牛牛Q_1687054422规范:今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭 ...
- JAVA 开发规范标准(集合)
JAVA 开发规范 一.编程规约 (一)命名规约 1. [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符 号结束. 反例:_name / __name / $Object / ...
- 谈谈阿里与谷歌的Java开发规范
无规矩不成方圆,编码规范就如同协议,有了Http.TCP等各种协议,计算机之间才能有效地通信,同样的,有了一致的编码规范,程序员之间才能有效地合作.道理大家都懂,可现实中的我们,经常一边吐槽别人的代码 ...
最新文章
- Python(Windows)下安装各种库的多种方法总结--灵活使用pip
- 【瞎扯】 About Me
- html5中表格如何等分,纯css3饼图五等分
- java反向映射_opencv 直方图和直方图反向映射
- HDU——2768 Cat vs. Dog
- 怎么监听Android软键盘的打开和关闭
- Asp.Net母版页元素ID不一致的体现
- dubbo源码系列之filter的前生
- 视频编解码之H.264
- js打开新窗口的方法总结
- 从Delphi应用程序创建发票,可视化报告生成器FastReport VCL轻松搞定
- 大众点评有多少用户2019_2019全国大众点评网数据下载获取
- pinpoint集群的安装配置
- TotalCommander常用操作
- win7事件查看器事件id_使用免费工具从事件查看器中查找事件ID
- Mac环境下简化ssh连接vlab口令实现免密登录(UNSW)
- 不同以“网”,云端地球全新升级上线!
- java-操作 Excel
- Talk | 清华大学交叉信息研究院助理教授杜韬:利用计算方法探究流固耦合
- android 7.0 手机拍照裁剪问题