D0501系统标识规范说明书.docx
- 文档编号:11078066
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:29
- 大小:28.74KB
D0501系统标识规范说明书.docx
《D0501系统标识规范说明书.docx》由会员分享,可在线阅读,更多相关《D0501系统标识规范说明书.docx(29页珍藏版)》请在冰豆网上搜索。
D0501系统标识规范说明书
汽车租赁信息管理系统
系统编码标示规范说明书
修订历史记录
日期
版本
说明
作者
1.0
初步识别系统的角色
系统编码标示规范
名称
Java语言编码规范(JavaCodeConventions)
译者
晨光(Morning)
简介
本文档讲述了Java语言的编码规范,较之陈世忠先生《c++编码规范》的浩繁详尽,此文当属短小精悍了。
而其中所列之各项条款,从编码风格,到注意事项,不单只Java,对于其他语言,也都很有借鉴意义。
因为简短,所以易记,大家不妨将此作为handbook,常备案头,逐一对验。
声明
如需复制、传播,请附上本声明,谢谢。
原文出处:
译文出处:
目录
1介绍
∙1.1为什么要有编码规范
∙1.2版权声明
2文件名
∙2.1文件后缀
∙2.2常用文件名
3文件组织
∙3.1Java源文件
o3.1.1开头注释
o3.1.2包和引入语句
o3.1.3类和接口声明
4缩进排版
∙4.1行长度
∙4.2换行
5注释
∙5.1实现注释的格式
o5.1.1块注释
o5.1.2单行注释
o5.1.3尾端注释
o5.1.4行末注释
∙5.2文挡注释
6声明
∙6.1每行声明变量的数量
∙6.2初始化
∙6.3布局
∙6.4类和接口的声明
7语句
∙7.1简单语句
∙7.2复合语句
∙7.3返回语句
∙7.4if,if-else,ifelse-ifelse语句
∙7.5for语句
∙7.6while语句
∙7.7do-while语句
∙7.8switch语句
∙7.9try-catch语句
8空白
∙8.1空行
∙8.2空格
9命名规范
10编程惯例
∙10.1提供对实例以及类变量的访问控制
∙10.2引用类变量和类方法
∙10.3常量
∙10.4变量赋值
∙10.5其它惯例
o10.5.1圆括号
o10.5.2返回值
o10.5.3条件运算符"?
"前的表达式"?
"前的表达式
o10.5.4特殊注释
11代码范例
∙11.1Java源文件范例
1介绍(Introduction)
1.1为什么要有编码规范(WhyHaveCodeConventions)
编码规范对于程序员而言尤为重要,有以下几个原因:
-一个软件的生命周期中,80%的花费在于维护
-几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护
-编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码
-如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品
为了执行规范,每个软件开发人员必须一致遵守编码规范。
每个人。
1.2版权声明(Acknowledgments)
本文档反映的是SunMicroSystems公司,Java语言规范中的编码标准部分。
主要贡献者包括:
PeterKing,PatrickNaughton,MikeDeMoney,JonniKanerva,KathyWalrath以及ScottHommel。
本文档现由ScottHommel维护,有关评论意见请发至shommel@
2文件名(FileNames)
这部分列出了常用的文件名及其后缀。
2.1文件后缀(FileSuffixes)
Java程序使用下列文件后缀:
文件类别
文件后缀
Java源文件
.java
Java字节码文件
.class
2.2常用文件名(CommonFileNames)
常用的文件名包括:
文件名
用途
GNUmakefile
makefiles的首选文件名。
我们采用gnumake来创建(build)软件。
README
概述特定目录下所含内容的文件的首选文件名
3文件组织(FileOrganization)
一个文件由被空行分割而成的段落以及标识每个段落的可选注释共同组成。
超过2000行的程序难以阅读,应该尽量避免。
"Java源文件范例"提供了一个布局合理的Java程序范例。
3.1Java源文件(JavaSourceFiles)
每个Java源文件都包含一个单一的公共类或接口。
若私有类和接口与一个公共类相关联,可以将它们和公共类放入同一个源文件。
公共类必须是这个文件中的第一个类或接口。
Java源文件还遵循以下规则:
-开头注释(参见"开头注释")
-包和引入语句(参见"包和引入语句")
-类和接口声明(参见"类和接口声明")
3.1.1开头注释(BeginningComments)
所有的源文件都应该在开头有一个C语言风格的注释,其中列出类名、版本信息、日期和版权声明:
/*
*Classname
*
*Versioninformation
*
*Date
*
*Copyrightnotice
*/
3.1.2包和引入语句(PackageandImportStatements)
在多数Java源文件中,第一个非注释行是包语句。
在它之后可以跟引入语句。
例如:
packagejava.awt;
importjava.awt.peer.CanvasPeer;
3.1.3类和接口声明(ClassandInterfaceDeclarations)
下表描述了类和接口声明的各个部分以及它们出现的先后次序。
参见"Java源文件范例"中一个包含注释的例子。
类/接口声明的各部分
注解
1
类/接口文档注释(/**……*/)
该注释中所需包含的信息,参见"文档注释"
2
类或接口的声明
3
类/接口实现的注释(/*……*/)如果有必要的话
该注释应包含任何有关整个类或接口的信息,而这些信息又不适合作为类/接口文档注释。
4
类的(静态)变量
首先是类的公共变量,随后是保护变量,再后是包一级别的变量(没有访问修饰符,accessmodifier),最后是私有变量。
5
实例变量
首先是公共级别的,随后是保护级别的,再后是包一级别的(没有访问修饰符),最后是私有级别的。
6
构造器
7
方法
这些方法应该按功能,而非作用域或访问权限,分组。
例如,一个私有的类方法可以置于两个公有的实例方法之间。
其目的是为了更便于阅读和理解代码。
4缩进排版(Indentation)
4个空格常被作为缩进排版的一个单位。
缩进的确切解释并未详细指定(空格vs.制表符)。
一个制表符等于8个空格(而非4个)。
4.1行长度(LineLength)
尽量避免一行的长度超过80个字符,因为很多终端和工具不能很好处理之。
注意:
用于文档中的例子应该使用更短的行长,长度一般不超过70个字符。
4.2换行(WrappingLines)
当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:
-在一个逗号后面断开
-在一个操作符前面断开
-宁可选择较高级别(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,
ObjectandStillAnother){
...
}
if语句的换行通常使用8个空格的规则,因为常规缩进(4个空格)会使语句体看起来比较费劲。
比如:
//DON’TUSETHISINDENTATION
if((condition1&&condition2)
||(condition3&&condition4)
||!
(condition5&&condition6)){//BADWRAPS
doSomethingAboutIt();//MAKETHISLINEEASYTOMISS
}
//USETHISINDENTATIONINSTEAD
if((condition1&&condition2)
||(condition3&&condition4)
||!
(condition5&&condition6)){
doSomethingAboutIt();
}
//ORUSETHIS
if((condition1&&condition2)||(condition3&&condition4)
||!
(condition5&&condition6)){
doSomethingAboutIt();
}
这里有三种可行的方法用于处理三元运算表达式:
alpha=(aLongBooleanExpression)?
beta:
gamma;
alpha=(aLongBooleanExpression)?
beta
:
gamma;
alpha=(aLongBooleanExpression)
?
beta
:
gamma;
5注释(Comments)
Java程序有两类注释:
实现注释(implementationcomments)和文档注释(documentcomments)。
实现注释是那些在C++中见过的,使用/*...*/和//界定的注释。
文档注释(被称为"doccomments")是Java独有的,并由/**...*/界定。
文档注释可以通过javadoc工具转换成HTML文件。
实现注释用以注释代码或者实现细节。
文档注释从实现自由(implementation-free)的角度描述代码的规范。
它可以被那些手头没有源码的开发人员读懂。
注释应被用来给出代码的总括,并提供代码自身没有提供的附加信息。
注释应该仅包含与阅读和理解程序有关的信息。
例如,相应的包如何被建立或位于哪个目录下之类的信息不应包括在注释中。
在注释里,对设计决策中重要的或者不是显而易见的地方进行说明是可以的,但应避免提供代码中己清晰表达出来的重复信息。
多余的的注释很容易过时。
通常应避免那些代码更新就可能过时的注释。
注意:
频繁的注释有时反映出代码的低质量。
当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。
注释不应写在用星号或其他字符画出来的大框里。
注释不应包括诸如制表符和回退符之类的特殊字符。
5.1实现注释的格式(ImplementationCommentFormats)
程序可以有4种实现注释的风格:
块(block)、单行(single-line)、尾端(trailing)和行末(end-of-line)。
5.1.1块注释(BlockComments)
块注释通常用于提供对文件,方法,数据结构和算法的描述。
块注释被置于每个文件的开始处以及每个方法之前。
它们也可以被用于其他地方,比如方法内部。
在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式。
块注释之首应该有一个空行,用于把块注释和代码分割开来,比如:
/*
*Hereisablockcomment.
*/
块注释可以以/*-开头,这样indent
(1)就可以将之识别为一个代码块的开始,而不会重排它。
/*-
*Hereisablockcommentwithsomeveryspecial
*formattingthatIwantindent
(1)toignore.
*
*one
*two
*three
*/
注意:
如果你不使用indent
(1),就不必在代码中使用/*-,或为他人可能对你的代码运行indent
(1)作让步。
参见"文档注释"
5.1.2单行注释(Single-LineComments)
短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。
如果一个注释不能在一行内写完,就该采用块注释(参见"块注释")。
单行注释之前应该有一个空行。
以下是一个Java代码中单行注释的例子:
if(condition){
/*Handlethecondition.*/
...
}
5.1.3尾端注释(TrailingComments)
极短的注释可以与它们所要描述的代码位于同一行,但是应该有足够的空白来分开代码和注释。
若有多个短注释出现于大段代码中,它们应该具有相同的缩进。
以下是一个Java代码中尾端注释的例子:
if(a==2){
returnTRUE;/*specialcase*/
}else{
returnisPrime(a);/*worksonlyforodda*/
}
5.1.4行末注释(End-Of-LineComments)
注释界定符"//",可以注释掉整行或者一行中的一部分。
它一般不用于连续多行的注释文本;然而,它可以用来注释掉连续多行的代码段。
以下是所有三种风格的例子:
if(foo>1){
//Doadouble-flip.
...
}
else{
returnfalse;//Explainwhyhere.
}
//if(bar>1){
//
////Doatriple-flip.
//...
//}
//else{
//returnfalse;
//}
5.2文档注释(DocumentationComments)
注意:
此处描述的注释格式之范例,参见"Java源文件范例"
若想了解更多,参见"HowtoWriteDocCommentsforJavadoc",其中包含了有关文档注释标记的信息(@return,@param,@see):
若想了解更多有关文档注释和javadoc的详细资料,参见javadoc的主页:
文档注释描述Java的类、接口、构造器,方法,以及字段(field)。
每个文档注释都会被置于注释定界符/**...*/之中,一个注释对应一个类、接口或成员。
该注释应位于声明之前:
/**
*TheExampleclassprovides...
*/
publicclassExample{...
注意顶层(top-level)的类和接口是不缩进的,而其成员是缩进的。
描述类和接口的文档注释的第一行(/**)不需缩进;随后的文档注释每行都缩进1格(使星号纵向对齐)。
成员,包括构造函数在内,其文档注释的第一行缩进4格,随后每行都缩进5格。
若你想给出有关类、接口、变量或方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释(见5.1.1)或紧跟在声明后面的单行注释(见5.1.2)。
例如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中。
文档注释不能放在一个方法或构造器的定义块中,因为Java会将位于文档注释之后的第一个声明与其相关联。
6声明(Declarations)
6.1每行声明变量的数量(NumberPerLine)
推荐一行一个声明,因为这样以利于写注释。
亦即,
intlevel;//indentationlevel
intsize;//sizeoftable
要优于,
intlevel,size;
不要将不同类型变量的声明放在同一行,例如:
intfoo,fooarray[];//WRONG!
注意:
上面的例子中,在类型和标识符之间放了一个空格,另一种被允许的替代方式是使用制表符:
intlevel;//indentationlevel
intsize;//sizeoftable
ObjectcurrentEntry;//currentlyselectedtableentry
6.2初始化(Initialization)
尽量在声明局部变量的同时初始化。
唯一不这么做的理由是变量的初始值依赖于某些先前发生的计算。
6.3布局(Placement)
只在代码块的开始处声明变量。
(一个块是指任何被包含在大括号"{"和"}"中间的代码。
)不要在首次用到该变量时才声明之。
这会把注意力不集中的程序员搞糊涂,同时会妨碍代码在该作用域内的可移植性。
voidmyMethod(){
intint1=0;//beginningofmethodblock
if(condition){
intint2=0;//beginningof"if"block
...
}
}
该规则的一个例外是for循环的索引变量
for(inti=0;i 避免声明的局部变量覆盖上一级声明的变量。 例如,不要在内部代码块中声明相同的变量名: intcount; ... myMethod(){ if(condition){ intcount=0;//AVOID! ... } ... } 6.4类和接口的声明(ClassandInterfaceDeclarations) 当编写类和接口是,应该遵守以下格式规则: -在方法名与其参数列表之前的左括号"("间不要有空格 -左大括号"{"位于声明语句同行的末尾 -右大括号"}"另起一行,与相应的声明语句对齐,除非是一个空语句,"}"应紧跟在"{"之后 classSampleextendsObject{ intivar1; intivar2; Sample(inti,intj){ ivar1=i; ivar2=j; } intemptyMethod(){} ... } -方法与方法之间以空行分隔 7语句(Statements) 7.1简单语句(SimpleStatements) 每行至多包含一条语句,例如: argv++;//Correct argc--;//Correct argv++;argc--;//AVOID! 7.2复合语句(CompoundStatements) 复合语句是包含在大括号中的语句序列,形如"{语句}"。 例如下面各段。 -被括其中的语句应该较之复合语句缩进一个层次 -左大括号"{"应位于复合语句起始行的行尾;右大括号"}"应另起一行并与复合语句首行对齐。 -大括号可以被用于所有语句,包括单个语句,只要这些语句是诸如if-else或for控制结构的一部分。 这样便于添加语句而无需担心由于忘了加括号而引入bug。 7.3返回语句(returnStatements) 一个带返回值的return语句不使用小括号"()",除非它们以某种方式使返回值更为显见。 例如: return; returnmyDisk.size(); return(size? size: defaultSize); 7.4if,if-else,ifelse-ifelse语句(if,if-else,ifelse-ifelseStatements) if-else语句应该具有如下格式: if(condition){ statements; } if(condition){ statements; }else{ statements; } if(condition){ statements; }elseif(condition){ statements; }else{ statements; } 注意: if语句总是用"{"和"}"括起来,避免使用如下容易引起错误的格式: if(condition)//AVOID! THISOMITSTHEBRACES{}! statement; 7.5for语句(forStatements) 一个for语句应该具有如下格式: for(initialization;condition;update){ statements; } 一个空的for语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- D0501 系统 标识 规范 说明书