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 自动换行

自动换行的准则:

  1. 如果在非赋值运算符处断开,那么在该符号前断开(比如+,它将位于下一行)。注意:这一点与Google其它语言的编程风格不同(如C++和JavaScript)。 这条规则也适用于以下“类运算符”符号:点分隔符(.),类型界限中的&(),catch块中的管道符号(catch (FooException | BarException e)
  2. 如果在赋值运算符处断开,通常的做法是在该符号后断开(比如=,它与前面的内容留在同一行)。这条规则也适用于foreach语句中的分号。
  3. 方法名或构造函数名与左括号留在同一行。
  4. 逗号(,)与其前面的内容留在同一行。

自动换行至少缩进4+个空格

3.7 空白

3.7.1 垂直空白(空行)

1.类内连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块。例外:两个连续字段之间的空行是可选的。

3.7.2 水平空白(空格)

  1. 分隔任何保留字与紧随其后的括号,大括号
  2. 任何二元或三元运算符的两侧,也适用于类运算符
  3. 类型和变量之间,eg: List lists.

3.8 具体结构

3.8.1 变量声明

  1. 不要使用组合申明,如:int a,b;
  2. 需要时声明并且尽快初始化。即不要在代码块开头把局部变量都一次性声明了,而是在第一次需要使用它时才声明。局部变量最好在声明时就初始化。
  3. 数组
    数组的初始化,可写成块状结构,如
    new int[]{
    0,1,2,3
    }
    非C风格的声明,中括号是类型的一部分,如
    String [] args;
  4. switch语句
    1. 缩进,缩进2个空格
    2. 注释 //fall through,说明程序将执行到下一语句组
    3. default的情况都要写出来
  5. 注解
    注解要紧跟在文档快的后面,应用于类,方法和构造函数。一个注解独占一行,这些换行不属于自动换行,因此缩进级别不变
    @Override
    @Nullable
    public String getNameIfPresent() { … }
  6. 注释
    两种格式
    /**
    *This is ok.
    */
    或者
    //And so.
  7. 修饰词先后顺序
    如果一个成员的modifiers同时存在,则按Java语言推荐的顺序出现
    public protected private abstract static final transient volatile synchronized native strictfp
    1. 命名约定

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)开始:

  1. 把短语转换为纯ASCII码,并且移除任何单引号。例如:”Müller’s algorithm”将变成”Muellers algorithm”。
  2. 把这个结果切分成单词,在空格或其它标点符号(通常是连字符)处分割开。
    • 推荐:如果某个单词已经有了常用的驼峰表示形式,按它的组成将它分割开(如”AdWords”将分割成”ad words”)。 需要注意的是”iOS”并不是一个真正的驼峰表示形式,因此该推荐对它并不适用。
  3. 现在将所有字母都小写(包括缩写),然后将单词的第一个字母大写:
    • 每个单词的第一个字母都大写,来得到大驼峰式命名。
    • 除了第一个单词,每个单词的第一个字母都大写,来得到小驼峰式命名。
  4. 最后将所有的单词连接起来得到一个标识符。

示例:

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*

加星号处表示可以,但不推荐。

原创粉丝点击