Google 出品的 Java 编码规范,强烈推荐!

  • 时间:
  • 浏览:3
  • 来源:熊猫辅助网_提供洋葱娱乐网技术_梅花辅助网资讯

来源:google.github.io/styleguide/javaguide.html

这是Google官方的Java编程风格规范。与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的大问题, 并肩也讨论一些约定及编码标准。这份规范主要侧重于当当让当我们 所普遍遵循的规则, 对于哪几种全是明确强制要求的,当当让当我们 尽量出理 提供意见。

1.1术语说明

  1. 术语class可表示一一一另另俩个普通类,枚举类,接口或是annotation类型( @interface)
  2. 术语comment只用来指代实现的注释(implementation comments),当当让当我们 不使用「documentation comments」一词,以后用Javadoc。

1.2 指南说明

本文中的示例代码这人作为规范。也却语录,嘴笨 示例代码是遵循Google编程风格,但这人由于这是展现哪几种代码的唯一法律辦法 。示例中的格式选取不应该被强制定为规则。

源文件基础

2.1 文件名

源文件以其最顶层的类名来命名,大小写敏感,文件扩展名为 .java。

2.2 文件编码:UTF-8

源文件编码格式为UTF-8。

2.3 特殊字符

2.3.1 空白字符

除了行刚开始符序列,ASCII水平空格字符(0x20,即空格)是源文件中唯一允许冒出的空白字符,这由于:

  1. 所有其它字符串中的空白字符全是进行转义。
  2. 制表符不让于缩进。

2.3.2 特殊转义序列

对于具有特殊转义序列的任何字符(\b, \t, \n, \f, \r, “, ‘及),当当让当我们 使用它的转义序列,而全是相应的八进制(比如 \012)或Unicode(比如 \u000a)转义。

2.3.3 非ASCII字符

对于剩余的非ASCII字符,是使用实际的Unicode字符(比如∞),还是使用等价的Unicode转义符(比如\u221e),取决于哪个能让代码更易于阅读和理解。

Tip: 在使用Unicode转义符或是一些实际的Unicode字符时,建议做些注释给出解释,这有有利于别人阅读和理解。

类似:

Tip: 永远这人或者害怕一些系统tcp连接或者无法正确出理 非ASCII字符而我应该 的代码可读性变差。当系统tcp连接无法正确出理 非ASCII字符时,它自然无法正确运行, 你就会去fix哪几种大问题的了。(言下之意以后大胆去用非ASCII字符,或者真的有也能 语录)

源文件行态

一一一另另俩个源文件所含(按顺序地):

  1. 许可证或版权信息(如有也能 )
  2. package语录
  3. import语录
  4. 一一一另另俩个顶级类(没办法 一一一另另俩个)

以上每个每段之间用一一一另另俩个空行隔开。

3.1 许可证或版权信息

或者一一一另另俩个文件所含许可证或版权信息,没办法 它应当被放满文件最前面。

3.2 package语录

package语录不换行,列限制(4.4节)这人适用于package语录。(即package语录写在一行里)

3.3 import语录

3.3.1 import这人使用通配符

即,这人冒出类似原来的import语录:importjava.util.*;

3.3.2 这人换行

import语录不换行,列限制(4.4节)这人适用于import语录。(每个import语录独立成行)

3.3.3 顺序和间距

import语录可分为以下几组,按照这人顺序,每组由一一一另另俩个空行分隔:

  1. 所有的静态导入独立成组
  2. com.google imports(仅当这人源文件是在 com.google包下)
  3. 第三方的包。每个顶级包为一组,字典序。类似:android, com, junit, org, sun
  4. java imports
  5. javax imports

组内不空行,按字典序排列。

3.4 类声明

3.4.1 没办法 一一一另另俩个顶级类声明

每个顶级类全是一一一另另俩个与它同名的源文件中(当然,还所含 .java后缀)。

例外:package-info.java,该文件中可没办法  package-info类。

3.4.2 类成员顺序

类的成员顺序对易学性有很大的影响,但这以后处在唯一的通用法则。不同的类对成员的排序或者是不同的。最重要的一些,每个类应该以这人逻辑去排序它的成员,维护者应该也能解释这人排序逻辑。

比如, 新的法律辦法 没办法 老是习惯性地再加到类的结尾,或者原来以后按时间顺序而非这人逻辑来排序的。

3.4.2.1 重载:永不分离

当一一一另另俩个类有多个构造函数,或是多个同名法律辦法 ,哪几种函数/法律辦法 应该按顺序冒出在并肩,顶端这人放满其它函数/法律辦法 。

格式

术语说明:块状行态(block-like construct)指的是一一一另另俩个类,法律辦法 或构造函数的主体。也能 注意的是,数组初始化中的初始值可被选取性地视为块状行态(4.8.3.1节)。

4.1 大括号

4.1.1 使用大括号(即使是可选的)

大括号与 if,else,for,do,while语录并肩使用,即使没办法 三根语录(或是空),也应该把大括号写上。

4.1.2 非空块:K & R 风格

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

  1. 左大括号前不换行
  2. 左大括号后换行
  3. 右大括号前换行
  4. 或者右大括号是一一一另另俩个语录、函数体或类的终止,则右大括号后换行; 或者不换行。类似,或者右大括号顶端是else或逗号,则不换行。

示例:

4.8.1节给出了enum类的一些例外。

4.1.3 空块:也能 用简洁版本

一一一另另俩个空的块状行态里哪几种以后所含,大括号也能 简洁地写成 {},不也能 换行。例外:或者它是一一一另另俩个多块语录的一每段(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。

示例:

4.2 块缩进:一一另另俩个空格

每当刚开始一一一另另俩个新的块,缩进增加一一另另俩个空格,当块刚开始时,缩进返回先前的缩进级别。缩进级别适用于代码和注释。(见4.1.2节中的代码示例)

4.3 一行一一一另另俩个语录

每个语录后要换行。

4.4 列限制:30或30

一一一另另俩个项目也能 选取一行30个字符或30个字符的列限制,除了下述例外,任何一行或者超过这人字符数限制,也能 自动换行。

例外:

  1. 不或者满足列限制的行(类似,Javadoc中的一一一另另俩个长URL,或是一一一另另俩个长的JSNI法律辦法 参考)。
  2. package和 import语录(见3.2节和3.3节)。
  3. 注释中哪几种或者被剪切并粘放满shell中的命令行。

4.5 自动换行

术语说明:一般情况表下,一行长代码为了出理 超出列限制(30或30个字符)而被分为多行,当当让当我们 称之为自动换行(line-wrapping)。

当当让当我们 并没办法 全面,选取性的准则来决定在每这人情况表下怎样自动换行。一些一些以后,对于同一段代码会有好几种有效的自动换行法律辦法 。、

Tip: 提取法律辦法 或局部变量也能 在不换行的情况表下出理 代码过长的大问题(是合理缩短命名长度吧)

4.5.1 从哪里断开

自动换行的基本准则是:更倾向于在更高的语法级别处断开。

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

4.5.2 自动换行时缩进大概+一一另另俩个空格

自动换行时,第一行后的每一行大概比第一行多缩进一一另另俩个空格(注意:制表符不让于缩进。见2.3.1节)。

当处在连续自动换行时,缩进或者会多缩进不只一一另另俩个空格(语法元素处在多级时)。一般而言,一一另另俩个连续行使用相同的缩进当且仅当它们刚开刚开始同级语法元素。

第4.6.3水平对齐一节中指出,不鼓励使用可变数目的空格来对齐前面行的符号。

4.6 空白

4.6.1 垂直空白

以下情况表也能 使用一一一另另俩个空行:

  1. 类内连续的成员之间:字段,构造函数,法律辦法 ,嵌套类,静态初始化块,实例初始化块。类似:一一另另俩个连续字段之间的空行是可选的,用于字段的空行主要用来对字段进行逻辑分组。
  2. 在函数体内,语录的逻辑分组间使用空行。
  3. 类内的第一一一另另俩个成员前或最后一一一另另俩个成员后的空行是可选的(既不鼓励以后反对原来做,视每个人所有喜好而定)。
  4. 要满足本文档中一些节的空行要求(比如3.3节:import语录)

多个连续的空行是允许的,但没办法 必要原来做(当当让当我们 以后鼓励原来做)。

4.6.2 水平空白

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

  1. 分隔任何保留字与紧随其后的左括号( ( )(如if,forcatch等)。
  2. 分隔任何保留字与其前面的右大括号( } )(如 else,catch)。
  3. 在任何左大括号前( {),一一另另俩个例外:@SomeAnnotation({a,b})(不使用空格)。String[][]x=foo;(大括号间没办法 空格,见下面的Note)。
  4. 在任何二元或三元运算符的两侧。这也适用于以下「类运算符」符号:类型界限中的&(<TextendsFoo&Bar>)。catch块中的管道符号( catch(FooException|BarExceptione)。foreach语录中的分号。
  5. 在 ,:;及右括号( ) )后。
  6. 或者在三根语录后做注释,则双斜杠(//)两边全是空格。这里也能 允一些个空格,但没办法 必要。
  7. 类型和变量之间:List<string>list。</string>
  8. 数组初始化中,大括号内的空格是可选的,即 newint[]{5,6}和 newint[]{5,6}全是也能 的。

Note:这人规则并这人求或禁止一行的开关或结尾也能 额外的空格,只对组织组织结构空格做要求。

4.6.3 水平对齐:不做要求

术语说明:水平对齐指的是通过增加可变数量的空格来使某一行的字符与上一行的相应字符对齐。

这是允许的(或者在不少地方也能 都看原来的代码),但Google编程风格对此不做要求。即使对于或者使用水平对齐的代码,当当让当我们 以后也能 去保持这人风格。

以下示例先展示未对齐的代码,或者是对齐的代码:

Tip:对齐可增加代码可读性,但它为以后的维护带来大问题。考虑未来某个以后,当当让当我们 也能 修改一堆对齐的代码中的一行。这或者由于原来很漂亮的对齐代码变得错位。很或者它会提示你调整周围代码的空白来使这人堆代码重新水平对齐(比如系统tcp连接员想保持这人水平对齐的风格), 这就会我应该 做一些的无用功,增加了reviewer的工作或者或者由于更多的合并冲突。

4.7 用小括号来限定组:推荐

除非作者和reviewer都认为再加小括号以后会使代码被误解,或是再加小括号能让代码更易于阅读,怎样当当让当我们 歌词 不应该再加小括号。当当让当我们 没办法 理由假设读者能记住整个Java运算符优先级表。

4.8 具体行态

4.8.1 枚举类

枚举常量间用逗号隔开,换行可选。

没办法 法律辦法 和文档的枚举类可写成数组初始化的格式:

或者枚举类也是一一一另另俩个类,或者所有适用于其它类的格式规则也适用于枚举类。

4.8.2 变量声明

4.8.2.1 每次只声明一一一另另俩个变量

这人使用组合声明,比如 inta,b;。

4.8.2.2 也能 时才声明,并尽快进行初始化

这人在一一一另另俩个代码块的开头把局部变量一次性都声明了(这是c语言的做法),以后在第一次也能 使用它时才声明。局部变量在声明时最好就进行初始化,或者声明后尽快进行初始化。

4.8.3 数组

4.8.3.1 数组初始化:可写成块状行态

数组初始化也能 写成块状行态,比如,下面的写法全是OK的:

4.8.3.2 非C风格的数组声明

中括号是类型的一每段:String[]args, 而非 Stringargs[]。

4.8.4 switch语录

术语说明:switch块的大括号内是一一一另另俩个或多个语录组。每个语录组所含一一一另另俩个或多个switch标签( caseFOO:或 default:),顶端跟着三根或多条语录。

4.8.4.1 缩进

与其它块状行态一致,switch块中的内容缩进为一一另另俩个空格。

每个switch标签后新起一行,再缩进一一另另俩个空格,写下三根或多条语录。

4.8.4.2 Fall-through:注释

在一一一另另俩个switch块内,每个语录组要么通过 break,continue,return或抛出异常来终止,要么通过三根注释来说明系统tcp连接将继续执行到下一一一另另俩个语录组, 任何能表达这人意思的注释全是OK的(典型的是用 // fall through)。这人特殊的注释这人也能 在最后一一一另另俩个语录组(一般是 default)中冒出。

示例:

4.8.4.3 default的情况表要写出来

每个switch语录都所含一一一另另俩个default语录组,即使它哪几种代码以后所含。

4.8.5 注解(Annotations)

注解紧跟在文档块顶端,应用于类、法律辦法 和构造函数,一一一另另俩个注解独占一行。哪几种换行不属于自动换行(第4.5节,自动换行),或者缩进级别不变。类似:

例外:单个的注解也能 和签名的第一行冒出在同一行。类似:

应用于字段的注解紧随文档块冒出,应用于字段的多个注解允许与字段冒出在同一行。类似:

参数和局部变量注解没办法 特定规则。

4.8.6 注释

4.8.6.1 块注释风格

块注释与其周围的代码在同一缩进级别。它们也能 是 /* … */风格,也也能 是 // …风格。对于多行的 /* … */注释,后续行也能 从 *刚开始, 或者与前一行的 *对齐。以下示例注释全是OK的。

注释这人封闭在由星号或其它字符绘制的框架里。

Tip:在写多行注释时,或者你希望在必要时能重新换行(即注释像段落风格一样),没办法 使用 /* … */。

4.8.7 Modifiers

类和成员的modifiers或者处在,则按Java语言规范中推荐的顺序冒出。

命名约定

5.1 对所有标识符都通用的规则

标识符没办法 使用ASCII字母和数字,或者每个有效的标识符名称都能匹配正则表达式 \w+。

在Google其它编程语言风格中使用的特殊前缀或后缀,如 name_, mName, s_name和 kName,在Java编程风格中全是再使用。

5.2 标识符类型的规则

5.2.1 包名

包名完整性小写,连续的单词以后简单地连接起来,不使用下划线。

5.2.2 类名

类名都以 UpperCamelCase风格编写。

类名通常是名词或名词短语,接口名称有时或者是形容词或形容词短语。现在还没办法 特定的规则或行之有效的约定来命名注解类型。

测试类的命名以它要测试的类的名称刚开始,以Test刚开始。类似,HashTest或 HashIntegrationTest。

5.2.3 法律辦法 名

法律辦法 名都以lowerCamelCase风格编写。

法律辦法 名通常是动词或动词短语。

下划线或者冒出在JUnit测试法律辦法 名称中用以分隔名称的逻辑组件。一一一另另俩个典型的模式是:test<MethodUnderTest>_<state>,类似 testPop_emptyStack。这人处在唯一正确的法律辦法 来命名测试法律辦法 。

5.2.4 常量名

常量名命名模式为 CONSTANT_CASE,完整性字母大写,用下划线分隔单词。

每个常量全是一一一另另俩个静态final字段,但全是所有静态final字段全是常量。在决定一一一另另俩个字段算不算一一一另另俩个常量时, 考虑它算不算真的感觉像是一一一另另俩个常量。类似,或者任何一一一另另俩个该实例的观测情况表是可变的,则它几乎肯定不让是一一一另另俩个常量。以后永远不 打算改变对象一般是缺乏的,它要真的老是不变也能将它示为常量。

哪几种名字通常是名词或名词短语。

5.2.5 非常量字段名

非常量字段名以 lowerCamelCase风格编写。

哪几种名字通常是名词或名词短语。

5.2.6 参数名

参数名以 lowerCamelCase风格编写。参数应该出理 用单个字符命名。

5.2.7 局部变量名

局部变量名以 lowerCamelCase风格编写,比起其它类型的名称,局部变量名也能 有更为宽松的缩写。

嘴笨 缩写更宽松,但还是要出理 用单字符进行命名,除了临时变量和循环变量。

即使局部变量是final和不可改变的,以后应该把它示为常量,自然随可不还还可以 用常量的规则去命名它。

5.2.8 类型变量名

类型变量可用以下这人风格之一进行命名:

  1. 单个的大写字母,顶端也能 跟一一一另另俩个数字(如:E, T, X, T2)。
  2. 以类命名法律辦法 (5.2.2节),顶端加个大写的T(如:RequestT, FooBarT)。

5.3 驼峰式命名法(CamelCase)

驼峰式命名法分大驼峰式命名法( UpperCamelCase)和小驼峰式命名法( lowerCamelCase)。有时,当当让当我们 有不只这人合理的法律辦法 将一一一另另俩个英语词组转再加驼峰形式,如缩略语或不寻常的行态(类似”IPv6”或”iOS”)。Google指定了以下的转换方案。

名字从 散文形式(prose form)刚开始:

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

示例:

加星号处表示也能

,但不推荐。

Note:在英语中,一些所含连字符的单词形式不唯一。类似:「nonempty」和「non-empty」全是正确的,或者法律辦法 名 checkNonempty和 checkNonEmpty也全是正确的。

编程实践

6.1 @Override:能用则用

只以后合法的,就把 @Override注解给用上。

6.2 捕获的异常:没办法 忽视

除了下面的例子,对捕获的异常不做响应是极少正确的。(典型的响应法律辦法 是打印日志,或者或者它被认为是不或者的,则把它当作一一一另另俩个 AssertionError重新抛出。)

或者它嘴笨 是不也能 在catch块中做任何响应,也能 做注释加以说明(如下面的例子)。

例外:在测试中,或者一一一另另俩个捕获的异常被命名为 expected,则它也能 被不加注释地忽略。下面是这人非常常见的情况表,用以确保所测试的法律辦法 会抛出一一一另另俩个期望中的异常, 或者在这里就没办法 必要加注释。

6.3 静态成员:使用类进行调用

使用类名调用静态的类成员,而全是具体某个对象或表达式。

6.4 Finalizers: 禁用

极少会去重写 Object.finalize。

Tip:这人使用finalize。或者你没办法 使用它,请先仔细阅读和理解Effective Java 第7条款:“Avoid Finalizers”,或者这人使用它。

Javadoc

7.1 格式

7.1.1 一般形式

Javadoc块的基本格式如下所示:

或者是以下单行形式:

基本格式老是OK的。当整个Javadoc块能容纳于一行时(且没办法 Javadoc标记@XXX),也能 使用单行形式。

7.1.2 段落

空行(即,只所含最左侧星号的行)会冒出在段落之间和Javadoc标记(@XXX)以后(或者有语录)。除了第一一一另另俩个段落,每个段落第一一一另另俩个单词前全是标签 <p>,或者它和第一一一另另俩个单词间没办法 空格。

7.1.3 Javadoc标记

标准的Javadoc标记按以下顺序冒出:@param, @return, @throws, @deprecated前面这4种标记或者冒出,描述全是能为空。当描述无法在一行中容纳,连续行也能 大概再缩进一一另另俩个空格。

7.2 摘要片段

每个类或成员的Javadoc以一一一另另俩个简短的摘要片段刚开始。这人片段是非常重要的,在一些情况表下,它是唯一冒出的文本,比如在类和法律辦法 索引中。

这以后一一一另另俩个小片段,也能 是一一一另另俩个名词短语或动词短语,但全是一一一另另俩个完整性的语录。它不让以 A{@codeFoo}isa…或Thismethod returns…开头, 它以后会是一一一另另俩个完整性的祈使句,如 Savethe record…。然而,或者开头大写及被加了标点,它看起来就像是个完整性的语录。

Tip:一一一另另俩个常见的错误是把简单的Javadoc写成 /** @return the customer ID */,这是不正确的。它应该写成 /** Returns the customer ID. */。

7.3 哪里也能 使用Javadoc

大概在每个public类及它的每个public和protected成员处使用Javadoc,以下是一些例外:

7.3.1 例外:不言自明的法律辦法

对于简单明显的法律辦法 如 getFoo,Javadoc是可选的(即,是也能 不写的)。这人情况表下除了写「Returns the foo」,嘴笨 也没办法 哪几种值得写了。

单元测试类中的测试法律辦法 或者是不言自明的最常见例子了,当当让当我们 通常也能 从哪几种法律辦法 的描述性命名中知道它是干哪几种的,或者不也能 额外的文档说明。

Tip:或者有一些相关信息是也能 读者了解的,没办法 以上的例外不应作为忽视哪几种信息的理由。类似,对于法律辦法 名getCanonicalName, 就不应该忽视文档说明,或者读者很或者别问我词语 canonical name指的是哪几种。

7.3.2 例外:重写

或者一一一另另俩个法律辦法 重写了超类中的法律辦法 ,没办法 Javadoc这人必需的。

7.3.3 可选的Javadoc

对于包外不可见的类和法律辦法 ,如有也能 ,也是要使用Javadoc的。或者一一一另另俩个注释是用来定义一一一另另俩个类,法律辦法 ,字段的整体目的或行为, 没办法 这人注释应该写成Javadoc,原来更统一更友好。

本文由

纯洁的微笑

发布在

ITPUB

,转载此文请保持文章完整性性,并请附上文章来源(ITPUB)及本页链接。

原文链接:http://www.itpub.net/2019/07/17/2435/

猜你喜欢

大发三分快三计划_  水宝宝防晒霜效果如何

这是目前比较受老婆亲大发三分快三计划戚亲戚许多我们歌词 歌词 我们歌词 歌词 我们歌词 歌词 我们歌词 歌词 我们歌词 歌词 我们歌词 歌词 欢迎的一款防晒霜,一般

2019-11-12

2分快3手机客户端_告别“香港脚”的8个小秘方

足癣,俗称“2分快3手机客户端脚气”。虽是小病,却受众广泛,原应着家中不幸“他们”得了脚气,全家都原应着被传染。潮湿、炎热的夏季又到了,足癣也随之进入高发期。几乎所有的足癣患者

2019-11-12

2分pk10官方下载_好尴尬 魅族PRO 6首日预订300万P9才发布

 4月13日最新发布2分pk10官方下载的魅族PRO6凭借其十核全网通、3DPress、2分pk10官方下载24W快充、5.2英寸小屏等亮点,多家知名媒体和门户都参与了新品发布

2019-11-12

分分快3最新版_2019Q1美食社区报告:25

受餐饮外卖的冲击,就说分分快3最新版用户回家吃饭频次降低,而当事人面考虑到健康现象,当事人回家吃饭制作美食并晒照也一块儿成为新时尚,使互联网美食社区热度不减。 第三方数据挖掘及

2019-11-12

秒速飞艇平台客服_秋季控油补水 打造清透洁净肌【星美容】

来源:STAR秒速飞艇平台客服星贝网2016-06-0418:17:11  原标题:秋季控油补水秒速飞艇平台客服打造清透清洁肌【星美容】--来源:明星美容紧致肌秒速飞艇平台客服

2019-11-12