Java语言编码规范Word格式文档下载.docx
《Java语言编码规范Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java语言编码规范Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
-包和引入语句(参见"
包和引入语句"
-类和接口声明(参见"
类和接口声明"
)
3.1.1开头注释
所有的源文件都应该在开头有一个C语言风格的注释,其中列出类名、版本信息、日期和版权声明:
/*
*Classname
*
*Versioninformation
*Date
*Copyrightnotice
*/
3.1.2包和引入语句
在多数Java源文件中,第一个非注释行是包语句。
在它之后可以跟引入语句。
例如:
packagejava.awt;
importjava.awt.peer.CanvasPeer;
3.1.3类和接口说明
下表描述了类和接口声明的各个部分以及它们出现的先后次序。
参见"
中一个包含注释的例子。
类/接口声明的各部分
注解
1
类/接口文档注释(/**……*/)
该注释中所需包含的信息,参见"
文档注释"
2
类或接口的声明
3
类/接口实现的注释(/*……*/)如果有必要的话
该注释应包含任何有关整个类或接口的信息,而这些信息又不适合作为类/接口文档注释。
4
类的(静态)变量
首先是类的公共变量,随后是保护变量,再后是包一级别的变量(没有访问修饰符,accessmodifier),最后是私有变量。
5
实例变量
首先是公共级别的,随后是保护级别的,再后是包一级别的(没有访问修饰符),最后是私有级别的。
6
构造器
7
方法
这些方法应该按功能,而非作用域或访问权限,分组。
例如,一个私有的类方法可以置于两个公有的实例方法之间。
其目的是为了更便于阅读和理解代码。
4.缩进排版
4个空格常被作为缩进排版的一个单位。
缩进的确切解释并未详细指定(空格vs.制表符)。
一个制表符等于8个空格(而非4个)。
4.1行长度
尽量避免一行的长度超过80个字符,因为很多终端和工具不能很好处理之。
注意:
用于文档中的例子应该使用更短的行长,长度一般不超过70个字符。
4.2换行
当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:
-在一个逗号后面断开
-在一个操作符前面断开
-宁可选择较高级别(higher-level)的断开,而非较低级别(lower-level)的断开
-新的一行应该与上一行同一级别表达式的开头处对齐
-如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。
以下是断开方法调用的一些例子:
someMethod(longExpression1,longExpression2,longExpression3,
longExpression4,longExpression5);
var=someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
以下是两个断开算术表达式的例子。
前者更好,因为断开处位于括号表达式的外边,这是个较高级别的断开。
longName1=longName2*(longName3+longName4-longName5)
+4*longname6;
//PREFFER
longName1=longName2*(longName3+longName4
-longName5)+4*longname6;
//AVOID
以下是两个缩进方法声明的例子。
前者是常规情形。
后者若使用常规的缩进方式将会使第二行和第三行移得很靠右,所以代之以缩进8个空格
//CONVENTIONALINDENTATION
someMethod(intanArg,ObjectanotherArg,StringyetAnotherArg,
ObjectandStillAnother){
...
}
//INDENT8SPACESTOAVOIDVERYDEEPINDENTS
privatestaticsynchronizedhorkingLongMethodName(intanArg,
ObjectanotherArg,StringyetAnotherArg,
if语句的换行通常使用8个空格的规则,因为常规缩进(4个空格)会使语句体看起来比较费劲。
比如:
//DON'
TUSETHISINDENTATION
if((condition1&
&
condition2)
||(condition3&
condition4)
||!
(condition5&
condition6)){//BADWRAPS
doSomethingAboutIt();
//MAKETHISLINEEASYTOMISS
//USETHISINDENTATIONINSTEAD
condition6)){
//ORUSETHIS
condition2)||(condition3&
这里有三种可行的方法用于处理三元运算表达式:
alpha=(aLongBooleanExpression)?
beta:
gamma;
beta
:
alpha=(aLongBooleanExpression)
?
5.注释
Java程序有两类注释:
实现注释(implementationcomments)和文档注释(documentcomments)。
实现注释是那些在C++中见过的,使用/*...*/和//界定的注释。
文档注释(被称为"
doccomments"
)是Java独有的,并由/**...*/界定。
文档注释可以通过javadoc工具转换成HTML文件。
实现注释用以注释代码或者实现细节。
文档注释从实现自由(implementation-free)的角度描述代码的规范。
它可以被那些手头没有源码的开发人员读懂。
注释应被用来给出代码的总括,并提供代码自身没有提供的附加信息。
注释应该仅包含与阅读和理解程序有关的信息。
例如,相应的包如何被建立或位于哪个目录下之类的信息不应包括在注释中。
在注释里,对设计决策中重要的或者不是显而易见的地方进行说明是可以的,但应避免提供代码中己清晰表达出来的重复信息。
多余的的注释很容易过时。
通常应避免那些代码更新就可能过时的注释。
频繁的注释有时反映出代码的低质量。
当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。
注释不应写在用星号或其他字符画出来的大框里。
注释不应包括诸如制表符和回退符之类的特殊字符。
5.1实现注释的格式
程序可以有4种实现注释的风格:
块(block)、单行(single-line)、尾端(trailing)和行末(end-of-line)。
5.1.1块注释
块注释通常用于提供对文件,方法,数据结构和算法的描述。
块注释被置于每个文件的开始处以及每个方法之前。
它们也可以被用于其他地方,比如方法内部。
在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式。
块注释之首应该有一个空行,用于把块注释和代码分割开来,比如:
*Hereisablockcomment.
块注释可以以/*-开头,这样indent
(1)就可以将之识别为一个代码块的开始,而不会重排它。
/*-
*Hereisablockcommentwithsomeveryspecial
*formattingthatIwantindent
(1)toignore.
*one
*two
*three
如果你不使用indent
(1),就不必在代码中使用/*-,或为他人可能对你的代码运行indent
(1)作让步。
5.1.2单行注释
短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。
如果一个注释不能在一行内写完,就该采用块注释(参见"
块注释"
)。
单行注释之前应该有一个空行。
以下是一个Java代码中单行注释的例子:
if(condition){
/*Handlethecondition.*/
5.1.3尾端注释
极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释。
若有多个短注释出现于大段代码中,它们应该具有相同的缩进。
以下是一个Java代码中尾端注释的例子:
if(a==2){
returnTRUE;
/*specialcase*/
}else{
returnisPrime(a);
/*worksonlyforodda*/
5.1.4行末注释
注释界定符"
//"
,可以注释掉整行或者一行中的一部分。
它一般不用于连续多行的注释文本;
然而,它可以用来注释掉连续多行的代码段。
以下是所有三种风格的例子:
if(foo>
1){
//Doadouble-flip.
else{
returnfalse;
//Explainwhyhere.
//if(bar>
//
////Doatriple-flip.
//...
//}
//else{
//returnfalse;
5.2文档注释
此处描述的注释格式之范例,参见"
若想了解更多,参见"
HowtoWriteDocCommentsforJavadoc"
,其中包含了有关文档注释标记的信息(@return,@param,@see):
若想了解更多有关文档注释和javadoc的详细资料,参见javadoc的主页:
文档注释描述Java的类、接口、构造器,方法,以及字段(field)。
每个文档注释都会被置于注释定界符/**...*/之中,一个注释对应一个类、接口或成员。
该注释应位于声明之前:
/**
*TheExampleclassprovides...
publicclassExample{...
注意顶层(top-level)的类和接口是不缩进的,而其成员是缩进的。
描述类和接口的文档注释的第一行(/**)不需缩进;
随后的文档注释每行都缩进1格(使星号纵向对齐)。
成员,包括构造函数在内,其文档注释的第一行缩进4格,随后每行都缩进5格。
若你想给出有关类、接口、变量或方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释(见5.1.1)或紧跟在声明后面的单行注释(见5.1.2)。
例如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中。
文档注释不能放在一个方法或构造器的定义块中,因为Java会将位于文档注释之后的第一个声明与其相关联。
6声明
6.1每行声明变量的数量
推荐一行一个声明,因为这样以利于写注释。
亦即,
intlevel;
//indentationlevel
intsize;
//sizeoftable
要优于,
intlevel,size;
不要将不同类型变量的声明放在同一行,例如:
intfoo,fooarray[];
//WRONG!
上面的例子中,在类型和标识符之间放了一个空格,另一种被允许的替代方式是使用制表符:
intlevel;
intsize;
ObjectcurrentEntry;
//currentlyselectedtableentry
6.2初始化
尽量在声明局部变量的同时初始化。
唯一不这么做的理由是变量的初始值依赖于某些先前发生的计算。
6.3布局
只在代码块的开始处声明变量。
(一个块是指任何被包含在大括号"
{"
和"
}"
中间的代码。
)不要在首次用到该变量时才声明之。
这会把注意力不集中的程序员搞糊涂,同时会妨碍代码在该作用域内的可移植性。
voidmyMethod(){
intint1=0;
//beginningofmethodblock
intint2=0;
//beginningof"
if"
block
该规则的一个例外是for循环的索引变量
for(inti=0;
i<
maxLoops;
i++){...}
避免声明的局部变量覆盖上一级声明的变量。
例如,不要在内部代码块中声明相同的变量名:
intcount;
myMethod(){
intcount=0;
//AVOID!
6.4类和接口的声明
当编写类和接口是,应该遵守以下格式规则:
-在方法名与其参数列表之前的左括号"
("
间不要有空格
-左大括号"
位于声明语句同行的末尾
-右大括号"
另起一行,与相应的声明语句对齐,除非是一个空语句,"
应紧跟在"
之后
classSampleextendsObject{
intivar1;
intivar2;
Sample(inti,intj){
ivar1=i;
ivar2=j;
intemptyMethod(){}
-方法与方法之间以空行分隔
7语句
7.1简单语句
每行至多包含一条语句,例如:
argv++;
//Correct
argc--;
7.2复合语句
复合语句是包含在大括号中的语句序列,形如"
{语句}"
。
例如下面各段。
-被括其中的语句应该较之复合语句缩进一个层次
应位于复合语句起始行的行尾;
右大括号"
应另起一行并与复合语句首行对齐。
-大括号可以被用于所有语句,包括单个语句,只要这些语句是诸如if-else或for控制结构的一部分。
这样便于添加语句而无需担心由于忘了加括号而引入bug。
7.3返回语句
一个带返回值的return语句不使用小括号"
()"
,除非它们以某种方式使返回值更为显见。
return;
returnmyDisk.size();
return(size?
size:
defaultSize);
7.4if,if-else,ifelse-ifelse语句
if-else语句应该具有如下格式:
statements;
}elseif(condition){
}else{
if语句总是用"
括起来,避免使用如下容易引起错误的格式:
if(condition)//AVOID!
THISOMITSTHEBRACES{}!
statement;
7.5for语句
一个for语句应该具有如下格式:
for(initialization;
condition;
update){
一个空的for语句(所有工作都在初始化,条件判断,更新子句中完成)应该具有如下格式:
update);
当在for语句的初始化或更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高。
若需要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句。
7.6while语句
一个while语句应该具有如下格式
while(condition){
一个空的while语句应该具有如下格式:
while(condition);
7.7do-while语句
一个do-while语句应该具有如下格式:
do{
}while(condition);
7.8switch语句
一个switch语句应该具有如下格式:
switch(condition){
caseABC:
/*fallsthrough*/
caseDEF:
break;
caseXYZ:
default:
每当一个case顺着往下执行时(因为没有break语句),通常应在break语句的位置添加注释。
上面的示例代码中就包含注释/*fallsthrough*/。
7.9try-catch语句
一个try-catch语句应该具有如下格式:
try{
}catch(ExceptionClasse){
一个try-catch语句后面也可能跟着一个finally语句,不论try代码块是否顺利执行完,它都会被执行。
}finally{
8空白
8.1空行
空行将逻辑相关的代码段分隔开,以提高可读性。
下列情况应该总是使用两个空行:
-一个源文件的两个片段(section)之间
-类声明和接口声明之间
下列情况应该总是使用一个空行:
-两个方法之间
-方法内的局部变量和方法的第一条语句之间
-块注释(参见"
5.1.1"
)或单行注释(参见"
5.1.2"
)之前
-一个方法内的两个逻辑段之间,用以提高可读性
8.2空格
下列情况应该使用空格:
-一个紧跟着括号的关键字应该被空格分开,例如:
while(true){
空格不应该置于方法名与其左括号之间。
这将有助于区分关键字和方法调用。
-空白应该位于参数列表中逗号的后面
-所有的二元运算符,除了"
."
,应该使用空格将之与操作数分开。
一元操作符和操作数之间不因该加空格,比如:
负号("
-"
)、自增("
++"
)和自减("
--"
a+=c+d;
a=(a+b)/(c*d);
while(d++=s++){
n++;
printSize("
sizeis"
+foo+"
\n"
);
-for语句中的表达式应该被空格分开,例如:
for(expr1;
expr2;
expr3)
-强制转型后应该跟一个空格,例如:
myMethod((byte)aNum,(Object)x);
myMethod((int)(cp+5),((int)(i+3))+1);
9命名规范
命名规范使程序更易读,从而更易于理解。
它们也可以提供一些有关标识符功能的信息,以助于理解代码,例如,不论它是一个常量,包,还是类。
标识符类型
命名规则
例子
包(Packages)
一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名,通常是com,