代码风格指南
我们不会因为您未检查代码风格而 恢复提交令牌 。请相应地计划并使用正确的风格!您已被警告。
关于此风格指南的一些说明:我们已尝试使其尽可能接近默认的IntelliJ风格检查器。该风格检查器还包括一些IntelliJ不会检查的"代码质量"检查。
通过运行自动风格检查器来了解这些规则可能会更容易。您可以通过在左侧栏中右键单击文件并选择"检查风格"来在IntelliJ中运行风格检查器。这将在所选文件中生成风格错误列表。在再次运行风格检查器之前,请确保保存或重新编译您的文件。
本代码风格指南可能也不完整。我已尽力使其尽可能全面,但可能遗漏了一些新增规则的描述。
空白字符
-
每个文件必须以换行符序列结尾。
-
文件不得包含水平制表符。只使用空格进行缩进。
-
不要在以下位置添加空白字符:
-
在泛型类型指定内的
<和>周围(List<Integer>,而不是List <Integer>或List< Integer >)。 -
前缀运算符
!、--、++、一元-或一元+之后。 -
在
;之前或后缀运算符--和++之前。 -
(之后或)之前。 -
.之后。
-
在泛型类型指定内的
-
请在以下位置添加空白字符:
-
;、,或类型转换之后(例如,(String) x,而不是(String)x)。 -
二元运算符(例如,
*、+)和比较运算符周围。 -
赋值运算符周围(例如,
=、+=)。 -
三元条件运算符中的
?和:周围(x > 0 ? x : -x)。 -
关键字
assert、catch、do、else、finally、for、if、return、try和while周围。
-
-
通常,如果您需要使用多行来表示单个语句,请在运算符之前换行(插入换行符),如下所示:
... + 20 * X + Y; -
不要用空格将方法名与方法调用中的
(分开。但是,对于长行,您可以用换行符后跟空格(用于缩进)来分隔它们。
缩进
-
基本缩进单位是4个空格。
-
每个代码块级别缩进一个基本缩进单位(代码块通常用
{和}包围),如下所示:if (x > 0) { r = -x; } else { r = x; } -
case标签在其封闭的switch的基础上再缩进一级,如下所示:switch (op) { case '+': addOpnds(x, y); break; default: ERROR(); } -
续行缩进一个基本缩进单位。
大括号
-
在所有
if、while、do和for语句的代码块周围使用{}大括号。 -
将
}大括号放在后续的else、finally或catch放在同一行,例如:if (x > 0) { y = -x; } else { y = x; } -
将开启代码块的
{放在行尾。通常,它放在if、for、while、switch、do、方法头或类头的末尾。如果行长度迫使它换到下一行,则不要缩进它,并将其单独放在一行上。
注释
-
方法应有javadoc注释说明行为、参数(使用@param标签或其他方式)和返回类型。
-
返回非void值的方法必须在Javadoc注释中描述返回值,可以使用"@return"标签或在包含"return"、"returning"或"returns"等词的运行文本中描述。
-
每个Javadoc注释必须以正确形成的句子开头,首字母大写,以句点结尾。
命名
-
静态最终常量的名称必须全部大写(例如,RED、DEFAULT_NAME)。
-
参数、局部变量和方法的名称必须以小写字母开头,或者由单个大写字母组成。
-
类型(类)的名称,包括类型参数,必须以大写字母开头。
-
包的名称必须以小写字母开头。
-
实例变量和非最终类(静态)变量必须以小写字母或"_"开头。
导入
1. 不要 use 'import PACKAGE.*', unless the package 是 java.lang.Math, java.lang.Double, or org.junit.Assert. 'import static CLASS.*' 是 确定.-
不要重复导入同一个类或静态成员。
-
不要导入您不使用的类或成员。
Java 风格惯例
-
数组类型的"[]"应写在元素类型名称之后,而不是声明符之后。写"String[] names",而不是"String names[]"。
-
方法、类或字段的修饰符应按以下顺序编写:
- public、protected 或 private。
- abstract 或 static。
- final、transient 或 volatile。
- synchronized。
- native。
- strictfp。
-
不要在冗余的情况下显式修饰方法、字段或类:
- 不要将接口或注解中的方法标记为"public"或"abstract"。
- 不要将接口或注解中的字段标记为"static"、"public"或"final"。
- 不要将 final 类中的方法标记为"final"。
- 不要将嵌套接口标记为"static"。
-
不要在控制语句中使用空代码块(内部只有空白或注释的"{ }")。有一个例外:catch 块可以只包含如下形式的注释:
/* Ignore EXCEPTIONNAME. */ -
通过给"魔术数字"赋予符号名称来避免在代码中使用它们,例如:
public static final int MAX_SIZE = 100;例外情况是数字 -1、0、1、2、3、4、5、6、7、8、9、0.25、0.5。
-
不要尝试捕获 异常、RuntimeError 或 错误 异常。
-
写"b"而不是"b == true",写"!b"而不是"b == false"。
-
将
if (condition) { return true; } else { return false; }替换为
return condition; -
只有类的静态 final 字段才能是 public 的。其他字段必须是 private 或 protected 的。这也适用于嵌套类。
-
只有静态方法和字段的类不能有 public(或默认的)构造函数。
-
只有私有构造函数的类必须声明为"final"。
避免易错语法
-
如果一个类重写了"equals",它也必须重写"hashCode"。这将在我们学习
hashCode后适用。 -
局部变量和参数不能隐藏或遮蔽字段名。处理例如简单控制字段的 getter/setter 方法的首选方式是在字段名前加上"_"前缀,例如:
public double getWidth() { return _width; } public void setWidth(double width) { _width = width; } -
不要使用嵌套赋值,例如"if ((x = next()) != null) …"。虽然这在 C 语言中可能很有用,但在 Java 中几乎从来不需要。
-
每个"switch"语句都必须包含一个"default"分支。
-
"switch"语句的每个分支都必须以"break"语句或如下形式的注释结束:
/* fall through */ -
不要用"=="比较字符串字面量。应该写:
if (x.equals("something"))而不是:
if (x == "something")有些情况下你确实想使用"==",但你在本课程中不太可能遇到这些情况。
限制
-
任何文件不得超过2000行。
-
任何行不得超过120个字符。
-
任何方法不得超过80行。
-
任何方法不得超过8个参数。
-
每个文件必须只包含一个外部类(嵌套类可以)。