Google 代码规范
来源:互联网 发布:制作视频mp4软件 编辑:程序博客网 时间:2024/05/22 15:08
1.源文件基础
1.1文件名
源文件用其最顶级的类名来命名,后缀名为.java
1.2文件编码格式
源文件的编码格式为UTF-8
2.源文件结构
一个源文件按顺序包含:
1.许可证或版权信息
2.package语句
3.import语句
4.一个顶级类
以上每一个部分之间用一个空行隔开
2.1 版权信息
2.2 package语句
package语句不换行
2.3 import语句
import语句不出现通配符,即import java.util.*;
import语句不换行
import语句的顺序与间距
- 所有静态导入独立成组
- com.googleimports(当这个源文件实在com.google包下)
- 第三方的Jar包。每个顶级包作为一组(android,com,junit,org,sun)
- java imports
- javax imports
2.4 类声明
2.4.1 只能声明一个顶级类
2.4.2 类成员顺序
所有的成员变量和函数,都应该按照一定的逻辑顺序排序,如果一个类有多个构造方法的话,多个构造方法永不分离,中间不要放置其他函数。
3.格式
块状结构:指的是,类、方法或者构造函数的主体
3.1 大括号
如 if ,else ,for,do,while等语句一起使用,空语句或者单条语句也使用大括号,保持格式上的统一。
3.2 非空块:K&R风格
对于非空块和块状结构,大括号遵循K&R结构。即
- 左大括号前不换行,左大括号之后换行
右大括号前换行,如果右大括号是一个语句、函数体或者类的终止,则右大括号之后换行,其他如右括号后面是else,cache,或逗号,则不换行.
return new MyClass() {
@Override public void method() {
if (condition()) {
try {
something();
} catch (ProblemException e) {
recover();
}
}
}
};
空块可以使用简洁版,如
void doNothing(){}
3.3 块缩进
每当开始一个新块,缩进增加2个空格,当块结束时,缩进返回先前的缩进级别。缩进级别适用于代码和注释
3.4 一行一条语句,每个句号之后要换行
3.5 列限制:80或100
一个项目可以选择一行80个字符或者100个字符的列限制,超出该限制的部分必须自动换行
3.6 自动换行
自动换行的准则:
- 如果在非赋值运算符处断开,那么在该符号前断开(比如+,它将位于下一行)。注意:这一点与Google其它语言的编程风格不同(如C++和JavaScript)。 这条规则也适用于以下“类运算符”符号:点分隔符(.),类型界限中的&(),catch块中的管道符号(catch (FooException | BarException e)
- 如果在赋值运算符处断开,通常的做法是在该符号后断开(比如=,它与前面的内容留在同一行)。这条规则也适用于foreach语句中的分号。
- 方法名或构造函数名与左括号留在同一行。
- 逗号(,)与其前面的内容留在同一行。
自动换行至少缩进4+个空格
3.7 空白
3.7.1 垂直空白(空行)
1.类内连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块。例外:两个连续字段之间的空行是可选的。
3.7.2 水平空白(空格)
- 分隔任何保留字与紧随其后的括号,大括号
- 任何二元或三元运算符的两侧,也适用于类运算符
- 类型和变量之间,eg: List lists.
3.8 具体结构
3.8.1 变量声明
- 不要使用组合申明,如:int a,b;
- 需要时声明并且尽快初始化。即不要在代码块开头把局部变量都一次性声明了,而是在第一次需要使用它时才声明。局部变量最好在声明时就初始化。
- 数组
数组的初始化,可写成块状结构,如
new int[]{
0,1,2,3
}
非C风格的声明,中括号是类型的一部分,如
String [] args; - switch语句
- 缩进,缩进2个空格
- 注释 //fall through,说明程序将执行到下一语句组
- default的情况都要写出来
- 注解
注解要紧跟在文档快的后面,应用于类,方法和构造函数。一个注解独占一行,这些换行不属于自动换行,因此缩进级别不变
@Override
@Nullable
public String getNameIfPresent() { … } - 注释
两种格式
/**
*This is ok.
*/
或者
//And so. - 修饰词先后顺序
如果一个成员的modifiers同时存在,则按Java语言推荐的顺序出现
public protected private abstract static final transient volatile synchronized native strictfp- 命名约定
4.1 所有标识符都通用的规则
标识符只能使用ASCII字母和数字,因此每个有效的标识符名称都能匹配正则表达式
4.2 标识符类型的规则
4.2.1 包名
包名全部小写,连续的单词只是简单的连接起来,不能使用下划线。
4.2.2 类名
类名在命名的时候都采用驼峰的风格形状,即UpperCamelCase风格。测试类的命名要以它要测试的类的名称开始,以Test结束,eg:HashTest 或 HashIntegrationTest
4.2.3 方法名
方法名都是以lowerCamelCase 风格编写,首字母小写,后面的词采用驼峰命名
4.2.4 常量名
常量的命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词
4.2.5 非常量
命名以lowerCamelCase风格,同方法名的命名
4.2.6 参数名
命名以lowerCamelCase风格,同方法名的命名,应该尽量避免单个字符的命名
4.2.7 类型变量名
类型变量可以使用以下两种风格之一进行命名:
- 单个的大写字母,后面可以跟一个数字(如:E, T, X, T2)
- 以类命名方式,后面加个大写的T(如:RequestT, FooBarT)
4.3 驼峰命名法
驼峰式命名法分大驼峰式命名法(UpperCamelCase)和小驼峰式命名法(lowerCamelCase)。 有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如”IPv6”或”iOS”)。Google指定了以下的转换方案。
名字从散文形式(prose form)开始:
- 把短语转换为纯ASCII码,并且移除任何单引号。例如:”Müller’s algorithm”将变成”Muellers algorithm”。
- 把这个结果切分成单词,在空格或其它标点符号(通常是连字符)处分割开。
- 推荐:如果某个单词已经有了常用的驼峰表示形式,按它的组成将它分割开(如”AdWords”将分割成”ad words”)。 需要注意的是”iOS”并不是一个真正的驼峰表示形式,因此该推荐对它并不适用。
- 现在将所有字母都小写(包括缩写),然后将单词的第一个字母大写:
- 每个单词的第一个字母都大写,来得到大驼峰式命名。
- 除了第一个单词,每个单词的第一个字母都大写,来得到小驼峰式命名。
- 最后将所有的单词连接起来得到一个标识符。
示例:
Prose form Correct Incorrect------------------------------------------------------------------"XML HTTP request" XmlHttpRequest XMLHTTPRequest"new customer ID" newCustomerId newCustomerID"inner stopwatch" innerStopwatch innerStopWatch"supports IPv6 on iOS?" supportsIpv6OnIos supportsIPv6OnIOS"YouTube importer" YouTubeImporter YoutubeImporter*
加星号处表示可以,但不推荐。
- google C++代码规范
- google python 代码规范
- Google 代码规范
- google的c++ 代码规范
- 【转】Google HTML5代码规范
- google c++代码规范-中文翻译
- Google代码规范之C++
- Google的c++代码规范
- 代码注释规范-google版本
- google java代码规范说明
- google android 源码代码规范
- C++代码风格--看google代码规范
- Google推荐的HTML5代码规范
- Google 的 Objective-C 代码规范指南
- Google 的 Objective-C 代码规范指南
- Google放出C++代码风格规范
- Google 的 Objective-C 代码规范指南
- Google代码规范工具Cpplint的使用
- 安装运行centos7的过程 和 踩到的一些坑
- meta经常设置的内容总结
- 日期格式化
- WAF安全应用防火墙(openresty部署)
- servlet 、filter 、listener 初始化的顺序
- Google 代码规范
- bootstrap-datepicker只显示年等格式说明
- 简单理解Java堆栈
- auto,register,static分析
- 两周学会Python 第01天(上午)
- weblogic linux下静默安装
- Struts2拦截器底层原理
- mysql主从复制实现数据库同步
- keyboard.js