Java编程规范(参考二)_第1页
Java编程规范(参考二)_第2页
Java编程规范(参考二)_第3页
Java编程规范(参考二)_第4页
Java编程规范(参考二)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、密级:内部公开文档编号:版本号:V1.0分册名称:第1册/共1册Java编码规范编制:生效日期:审核:批准:文件更改摘要:日期版本号修订说明修订人审核人批准人目录1. 介绍41.1为什么要有编码规范 41.2注意事项42. 文件名42.1文件后缀42.2常用文件名43. 文件组织53.1 JAVA源文件53.1.1包和引入语句53.1.2类和接口声明54. 缩进排版64.1行长度64.2换行64.3 对于 85. 注释85.1实现注释的格式 85.1.1块注释85.1.2单行注释95.1.3尾端注释95.1.4行末注释95.2文档注释105.3注释内容105.3.1方法注释105.3.2算法注

2、释 115.3.3可精简的注释内容115.3.4推荐的注释内容115.3.5 Null 的规约115.3.6特殊代码注释 126. 声明126.1 每行声明变量的数量 126.2初始化126.3布局126.4类和接口的声明 136.5声明规则147. 语句147.1简单语句147.2复合语句147.3返回语句147.4 IF , IF - ELSE IF ELSE-IF ELSE 语句157.5 FOR 语句157.6 WHILE 语句167.7 Dd WHILE语句167.8 SWITC H 语句167.9 TRY-CATCH语句168. 空白178.1空行178.2空格179. 命名规范1

3、89.1命名规则199.1.1包命名199.1.2类、接口命名199.1.3方法命名199.1.4变量命名209.1.5常量命名2010. 编程惯例 2110.1提供对实例以及类变量的访问控制 2110.2引用类变量和类方法 2110.3 常量2210.4变量赋值2210.5异常处理 2210.6其它惯例 2210.6.1圆括号2210.6.2返回值2310.6.3条件运算符 “ ?前的表达式* 2311. 信息输出2312. 代码范例2312.1 JAVA源文件范例 231. 介绍1.1为什么要有编码规范编码规范对于程序员而言尤为重要,有以下几个原因:一个软件的生命周期中, 80%的花费在于

4、维护;几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码; 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误, 一如你已构建的其它任何产品。制定本规范的目的是为了让代码清晰整洁、增强可读性。所有编码必须围绕此原则,即使是本规范中未特别指明1.2注意事项本文档未特别标注的都必须遵守(不遵守将代表代码不合格,会给团队其他成员带来不便和 困扰,大大提高总体维护成本 )2. 文件名这部分列出了常用的文件名及其后缀。2.1文件后缀Java程序使用下列文件后缀:文件类别文件后缀Java源文件.javaJa

5、va字节码文件.classJSP文 件jspXML文件.xml资源文件.properties日志文件ogTag lib文件.tldJava包文件.jar层叠样式表文件.css2.2常用文件名常用的文件名包括:文件名用途Build.xmlWeb.xmlSpertieshibernate.cfg.xmlApplicati on RpertiesApplicati on Resources_zh_CN.properties struts-c on fig-*.xml applicationContext-*.xmlAnt编译配置Java W

6、eb程序的配置文件 Tomcat的配置文件Log4j配置文件 Hibernate配置文件 程序的英文资源文件 程序的gbk资源文件Struts配置文件Spring配置文件3. 文件组织一个文件由被空行分割而成的段落以及标识每个段落的可选注释共同组成。超过2000行的程序难以阅读,应该尽量避免。“Java源文件范例”提供了一个布局合理的 Java程序范例。3.1 Java源文件每个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关 联,可以将它们和公共类放入同一个源文件。公共类必须是这个文件中的第一个类或接口。 Java源文件还遵循以下规则:? 包和引入语句 ? 类和接口

7、声明3.1.1包和引入语句在Java源文件中,第一个非注释行是包语句。在它之后可以跟引入语句。例如:package java.awt;import java.awt.peer.Ca nvasPeer;import顺序:系统,第三方,自定义3.1.2类和接口声明F表描述了类和接口声明的各个部分以及它们出现的先后次序。参见代码范例类/接口声明的各部分注释1类/接口文档注释(/*/)该注释中所需包含的信息,参见“文档注释”2类或接口的声明3类/接口实现的注释 (/*/ 如果有必要的话)该注释应包含任何有关整个类或接口的信息,而这些 信息又不适合作为类/接口文档注释。4类的(静态)变量首先是类的公共变

8、量,随后是保护变量,再后是包一 级别的变量(没有访问修饰符),最后是私有变量。5实例变量首先是公共级别的,随后是保护级别的,再后是包一 级别的(没有访问修饰符),最后是私有级别的。6构造器7方法这些方法应该按功能,而非作用域或访问权限,分组。 例如,一个私有的类方法可以置于两个公有的实例方 法之间。其目的是为了更便于阅读和理解代码。(实现同一功能的多个方法应放在一起)4. 缩进排版对于用eclipse开发的项目,每个java源文件,必须使用 eclipse工具中自带的排版组合键 ctrl+shift+F4个空格常被作为缩进排版的一个单位。将制表符设为4个空格。4.1行长度尽量避免一行的长度超过

9、80个字符,因为很多终端和工具不能很好处理。注意:用于文档中的例子应该使用更短的行长,长度一般不超过70个字符。4.2换行当一个表达式无法容纳在一行内时,可以依据如下一般规则断开:在一个逗号后面断开;在一个操作符前面断开;宁可选择较高级别(higher-level)的断开,而非较低级别 (lower-level) 的断开;新的一行应该与上一行同一级别表达式的开头处对齐;如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。以下是断开方法调用的一些例子:someMethod(l on gExpressi on 1, l on gExpressi on 2, l on g

10、Expressi on3.Ion gExpressi on4. Ion gExpressi on 5);var = someMethod1(l on gExpressi on1,someMethod2(l on gExpressi on2.Ion gExpressi on 3);以下是两个断开算术表达式的例子。前者更好,因为断开处位于括号表达式的外边,这是个较高级别的断开。Ion gName1 = Ion gName2 * (Ion gName3 + Ion gName4 - Ion gName5)+ 4 * longn ame6; /PREFFERIon gName1 = Ion gName

11、2 * (Ion gName3 + Ion gName4-Io ngName5) + 4 * longn ame6; /AVOID以下是两个缩进方法声明的例子。前者是常规情形,后者若使用常规的缩进方式将会使第二行和第三行移得很靠右,所以代之以缩进8个空格。/CONVENTIONAL INDENTATIONsomeMethod(int anArg, Object anotherArg, String yetAnotherArg,Object andStillAnother) /INDENT 8 SPACES TO AVOID VERY DEEP INDENTSprivate static syn

12、chroni zed hork ingLon gMethodName(i nt an Arg,Object ano therArg, String yetA no therArg,Object an dStillA nother) if语句的换行通常使用 8个空格的规则,因为常规缩进(4个空格)会使语句体看起来比 较费劲。比如:/DON T USE THIS INDENTATIONif (co nditio n1 & con ditio n2)| (co nditio n3 & con ditio n4)|!(co nditio n5 & con ditio n6) /BAD WRAPS do

13、Somethi ngAboutlt();/MAKE THIS LINE EASY TO MISS/USE THIS INDENTATION INSTEADif (co nditio n1 & con ditio n2)| (co nditio n3 & con ditio n4)|!(co nditio n5 & con ditio n6) doSomethi ngAboutlt();/OR USE THISif (con ditio n1 & con ditio n2) | (co nditio n3 & con ditio n4)|!(co nditio n5 & con ditio n6

14、) doSomethi ngAboutlt();这里有三种可行的方法用于处理三元运算表达式:alpha = (aL on gBoolea nExpressi on) ? beta : gamma;alpha = (aL on gBoolea nExpressi on) ? beta:gamma;alpha = (aL on gBoolea nExpressi on)? beta :gamma;4.3对于if,for,while语句只有单句时,如果该句可能引起阅读混淆,需要用 ” 和括起来。II错误,需要使用花括号括起来if (con diti on)if(con diti on) doSome

15、th in g();elsedoSometh in g();5. 注释Java 程序有两类注释:实现注释 (implementation comments) 和文档注释(document comments)。实现注释是那些在 C+中见过的,使用/*.*/ 和/界定的注释。文档注释 (被 称为doc comments)是Java独有的,并由/*.*/ 界定。文档注释可以通过 javadoc工具 转换成HTML文件。实现注释用以注释代码或者实现细节。文档注释从实现自由(implementation-free)的角度描述代码的规范。它可以被那些手头没有源码的开发人员读懂。注释应被用来给出代码的总括,

16、并提供代码自身没有提供的附加信息。注释应该仅包含与阅读和理解程序有关的信息。例如,相应的包如何被建立或位于哪个目录下之类的信息不应包括在注释中。在注释里,对设计决策中重要的或者不是显而易见的地方进行说明是可以的,但应避免提供代码中己清晰表达出来的重复信息。多余的注释很容易过时。通常应避免那些代码更新就可能过时的注释。注意:频繁的注释有时反映出代码的低质量。当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。注释不应写在用星号或其他字符画出来的大框里。注释不应包括诸如制表符和回退符之类的特殊字符。5.1实现注释的格式程序可以有 4种实现注释的风格:块 (block)、单行(single-li

17、ne)、尾端(trailing)禾口行末(end-of-line)。5.1.1块注释块注释通常用于提供对文件, 方法,数据结构和算法的描述。 块注释被置于每个文件的 开始处以及每个方法之前。 它们也可以被用于其他地方, 比如方法内部。在功能和方法内部 的块注释应该和它们所描述的代码具有一样的缩进格式。块注释之首应该有一个空行,用于把块注释和代码分割开来,比如:/* Here is a block comme nt.*/块注释可以以/*-开头,这样in de nt(1)就可以将之识别为一个代码块的开始,而不会 重排它。/*-* Here is a block comme nt with some

18、 very special* formatt ing that I want inden t(1) to ignore.* one* two* three*/注意:如果你不使用in de nt(1),就不必在代码中使用/*-,或为他人可能对你的代码运行indent(1)作让步。5.1.2单行注释短注释可以显示在一行内,并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完,就该采用块注释。单行注释之前应该有一个空行。以下是一个Java代码中单行注释的例子:if (condition) /* Handle the condition. */5.1.3尾端注释极短的注释可以与它们所要描述的

19、代码位于同一行,但是应该有足够的空白来分开代码和注释。若有多个短注释出现于大段代码中,它们应该具有相同的缩进。以下是一个Java代码中尾端注释的例子:if (a = 2) /* special case */* works only for odd a */return true; else return isPrime(a);5.1.4行末注释注释界定符“ /”可以注释掉整行或者一行中的一部分。它一般不用于连续多行的注 释文本;然而,它可以用来注释掉连续多行的代码段。以下是所有三种风格的例子:if (foo 1) / Do a double-flip. else return false;

20、/ Explain why here./if (bar 1) / / Do a triple-flip./ ./ else / return false;/5.2文档注释文档注释描述Java的类、接口、构造器,方法,以及字段 (field)。每个文档注释都会 被置于注释定界符/*.*/ 之中,一个注释对应一个类、 接口或成员。该注释应位于声明之 刖:/* The Example class provides .*/public class Example .注意顶层(top-level)的类和接口是不缩进的,而其成员是缩进的。描述类和接口的文档注释的第一行(/*)不需缩进;随后的文档注释每行都

21、缩进1格(使星号纵向对齐)。成员,包括构造函数在内,其文档注释的第一行缩进4格,随后每行都缩进 5格。若你想给出有关类、接口、变量或方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释(见5.1.1)或紧跟在声明后面的单行注释(见5.1.2)。例如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中。文档注释不能放在一个方法或构造器的定义块中,因为Java会将位于文档注释之后的第一个声明与其相关联。5.3注释内容5.3.1方法注释为了让别人能够很快看懂该方法。方法注释语包括一下几部分:方法的描述:该方法有什么作用参数介绍(可选,有参数必须注释)方法返回值(

22、可选,有返回值必须注释)是否抛出异常(可选,有异常必须注释)作者(可选,当该方法不是当前文件的创建者需要注释)范例如下:/*名称 主接口 远程接口 实现类*把指定的SessionBean部署到 Mock的容器环境中。* param jndi JNDI* param home* param remote* param bea n* return void* throws Exceptio n* author*/public void deploySessi on Bea n (Stri ngjn di,Class home,Class remote, Class bea n) throws Ex

23、cepti onSessi on Bea nDescriptor descriptor =new Sessi on Bea nDescriptor(jn di, home, remote, bea n);mockC ontain er.deploy(descriptor);532算法注释对于业务算法比较复杂的语句,要写上相应的注释语。5.3.3可精简的注释内容注释中的每一个单词都要有其不可缺少的意义,注释里不写param 这样的废话。5.3.4推荐的注释内容? 对于API函数如果存在契约,必须写明它的前置条件(precondition),后置条件(postcondition),及不变式(inv

24、ariant)。? 对于调用复杂的 API尽量提供代码示例。? 对于已知的Bug需要声明。? 在本函数中抛出的unchecked exception 尽量用 throws说明。5.3.5 Null的规约如果方法允许Null作为参数,或者允许返回值为Null,必须在 JavaDoc中说明。的。果没有说明,方法的调用者不允许使用Null作为参数,并认为返回值是 Null Safe*获取对象* retur n the object to found or n ull if not found.*/Object get(I nteger id)5.3.6特殊代码注释? 代码质量不好但能正常运行,或者还

25、没有实现的代码用? 存在错误隐患的代码用/FIXME:声明6. 声明6.1每行声明变量的数量推荐一行一个声明,因为这样以利于写注释。亦即,int level; /inden tatio n levelint size; / size of table要优于,int level, size;不要将不同类型变量的声明放在同一行,例如:int foo, fooarray; /WRONG!注意:上面的例子中,在类型和标识符之间放了一个空格, 使用制表符:intlevel;/inden tati on levelintsize;/ size of tableObjectcurre ntEn try; /

26、 curre ntly selected table entry/TODO:或 /XXX:声明另一种被允许的替代方式是6.2初始化尽量在声明局部变量的同时初始化。唯一不这么做的理由是变量的初始值依赖于某些先前发生的计算。6.3布局只在代码块的开始处声明变量。(一个块是指任何被包含在大括号“”和“”中间的代码。)不要在首次用到该变量时才声明之。这会把注意力不集中的程序员搞糊涂,同时会妨碍代码在该作用域内的可移植性。void myMethod() int inti = 0;/ begi nning of method blockif (con diti on) in t i nt2 = 0;/ b

27、eg inning of if block该规则的一个例外是 for循环的索引变量for (i nt i = 0; i = 0) ? x : -x;11 .信息输出所有的提交到服务器上的编码(单元测试代码除外)不允许出现不可关闭的信息输出,如:System.out.println (”);/ 错误12.代码范例12.1 Java源文件范例下面的例子,展示了如何合理布局一个包含单一公共类的Java源程序。接口的布局与其相似。package java.blah;import java.blah.blahdy.BlahBlah;* Class descripti on goes here.类描述* version2009-07-24 创建时间* author First name Last name仓 U建人*/public class Blah exte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论