本文为《code conventions-150003》(JAVA代码规范)笔记。
文件组织
1、超过2000行代码的源文件将会比较难以阅读,应该避免。
2、每个Java源文件都包含单一的公共类或接口。如果私有类和接口与一个公共类有联系,可以把它们与这个公共类放在同一个源文件中。公共类必须是文件中的第一个类或接口。
3、JAVA源文件内容应该遵循以下顺序:
import java.applet.Applet; import java.awt.*; import java.net.*;
/* *Classname * *Version info * *Copyright notice */
package java.awt; import java.awt.peer.CanvasPeer;
类/接口声明的各部分 | 备注 | |
1 | 类/接口的文档注释 | 该注释所需包含的信息可以参见下面的文档注释 |
2 | 类/接口的声明 | |
3 | 类/接口的实现注释(/*...*/),如果有必要的话 | 该注释应该包含所有与类或接口有关的信息,而这些信息又不适合作文档注释。 |
4 | 类(静态)变量 | 首先是类的公有(public)变量,然后是保护(protected)变量,之后是私有(private)变量。 |
5 | 实例变量 | 首先是公有的(public),接着是保护的(protected),之后是私有的(private)。 |
6 | 构造方法 | |
7 | 方法 | 这些方法应该按功能,而非作用域或访问权限来分组。例如,一个私有的类方法可以在两个公有的实例方法之间,其目的是为了更利于代码的阅读与理解。 |
function(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = function1(longExpression1, function2(longExpression2, longExpression3));
longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; // PREFER longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; // AVOID下面是两个方法声明的缩进例子。第一个例子是常规情况。而第二个例子,如果使用常规的缩进方式,它会使第二行和第三行的代码太过于偏右,所以以缩进8个空格的方式代替。
//常规缩进 someMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) { ... } //以8个空格来代替,以避免缩进太严重 private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) { ... }if语句的换行通常应该使用8个空格的规则,因为常规的缩进(使用4个空格)会使语句体比较难以阅读。例如:
//请勿使用这种缩进 if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { //BAD WRAPS doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS } //使用这种缩进来代替 if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } //或这种缩进 if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); }
alpha = (aLongBooleanExpression) ? beta : gamma; alpha = (aLongBooleanExpression) ? beta : gamma; alpha = (aLongBooleanExpression) ? beta : gamma;
/* * Here is a block comment. */
/* * Here is a block comment with some very special * formatting that I want indent(1) to ignore. * * one * two * three */注意:如果你不使用indent(1),你就不必要在你的代码中使用/*-,或为其他人可能对你的代码运行indent(1)作出其他的让步。
if (condition) { /* Handle the condition. */ ... }
if (a == 2) { return TRUE; /* special case */ } else { return isprime(a); /* works only for odd a */ }
if (foo > 1) { // Do a double-flip. ... } else return false; // Explain why here. //if (bar > 1) { // // // Do a triple-flip. // ... //} //else // return false;
/** * The Example class provides ... */ class Example { ...