Google出品的Java编码规范,强烈推荐,权威又科学( 二 )


格式术语说明:块状结构(block-like construct)指的是一个类 , 方法或构造函数的主体 。 需要注意的是 , 数组初始化中的初始值可被选择性地视为块状结构(4.8.3.1节) 。
4.1 大括号4.1.1 使用大括号(即使是可选的)大括号与 if,else,for,do,while语句一起使用 , 即使只有一条语句(或是空) , 也应该把大括号写上 。
4.1.2 非空块:K--tt-darkmode-color: #9B9B9B;">对于非空块和块状结构 , 大括号遵循Kernighan和Ritchie风格 (Egyptian brackets):
1、左大括号前不换行2、左大括号后换行3、右大括号前换行4、如果右大括号是一个语句、函数体或类的终止 , 则右大括号后换行; 否则不换行 。 例如 , 如果右大括号后面是else或逗号 , 则不换行 。
示例:
return new MyClass() {@Override public void method() {if (condition()) {try {something();} catch (ProblemException e) {recover();}}}};4.8.1节给出了enum类的一些例外 。
4.1.3 空块:可以用简洁版本一个空地块状结构里什么也不包含 , 大括号可以简洁地写成 {} , 不需要换行 。 例外:如果它是一个多块语句的一部分(if/else 或 try/catch/finally), 即使大括号内没内容 , 右大括号也要换行 。
示例:
void doNothing() {}4.2 块缩进:2个空格每当开始一个新的块 , 缩进增加2个空格 , 当块结束时 , 缩进返回先前的缩进级别 。 缩进级别适用于代码和注释 。 (见4.1.2节中的代码示例)
4.3 一行一个语句每个语句后要换行 。
4.4 列限制:80或100一个项目可以选择一行80个字符或100个字符的列限制 , 除了下述例外 , 任何一行如果超过这个字符数限制 , 必须自动换行 。
例外:
1、不可能满足列限制的行(例如 , Javadoc中的一个长URL , 或是一个长的JSNI方法参考) 。
2、 package和 import语句(见3.2节和3.3节) 。
3、注释中那些可能被剪切并粘贴到shell中的命令行 。
4.5 自动换行术语说明:一般情况下 , 一行长代码为了避免超出列限制(80或100个字符)而被分为多行 , 我们称之为自动换行(line-wrapping) 。
我们并没有全面 , 确定性的准则来决定在每一种情况下如何自动换行 。 很多时候 , 对于同一段代码会有好几种有效的自动换行方式 。
Tip: 提取方法或局部变量可以在不换行的情况下解决代码过长的问题(是合理缩短命名长度吧)
4.5.1 从哪里断开自动换行的基本准则是:更倾向于在更高的语法级别处断开 。
1、如果在 非赋值运算符处断开 , 那么在该符号前断开(比如+ , 它将位于下一行) 。 注意:这一点与Google其它语言的编程风格不同(如C++和JavaScript) 。 这条规则也适用于以下“类运算符”符号:点分隔符(.) , 类型界限中的 --tt-darkmode-color: #9B9B9B;">2、如果在 赋值运算符处断开 , 通常的做法是在该符号后断开(比如= , 它与前面的内容留在同一行) 。 这条规则也适用于 foreach语句中的分号 。
3、方法名或构造函数名与左括号留在同一行 。
4、逗号(,)与其前面的内容留在同一行 。
4.5.2 自动换行时缩进至少+4个空格自动换行时 , 第一行后的每一行至少比第一行多缩进4个空格(注意:制表符不用于缩进 。 见2.3.1节) 。
当存在连续自动换行时 , 缩进可能会多缩进不只4个空格(语法元素存在多级时) 。 一般而言 , 两个连续行使用相同的缩进当且仅当它们开始于同级语法元素 。
第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) 。