Java编程规范V011.docx
- 文档编号:9478668
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:16
- 大小:23.86KB
Java编程规范V011.docx
《Java编程规范V011.docx》由会员分享,可在线阅读,更多相关《Java编程规范V011.docx(16页珍藏版)》请在冰点文库上搜索。
Java编程规范V011
Java编程规范
拟制:
罗京志
日期:
2008年05月17日
审核:
林文波
日期:
2008年05月20日
批准:
林磊
日期:
2008年05月21日
文件名称:
版本:
V0.1
文件编号:
FUNO-IS-TS-005
机密等级:
Companyconfidential
生效日期:
2008年05月26日
发行日期:
2008年05月27日
修改记录
修订号
作者
日期
简要说明
V0.1
罗京志
2008年05月17日
新作成
目录
Java编程规范1
1.引言4
编写目的4
适用范围4
读者对象4
缩略词4
参考资料4
2.排版、格式4
3.命名6
4.对象、变量8
5.注释8
6.方法11
7.其它12
8.逻辑走查14
1.引言
编写目的
提供一整套编写高效可靠的Java代码的标准、约定和指南。
它们以安全可靠的软件工程原则为基础,使代码易于理解、维护和增强。
适用范围
本文档适用于福建福诺移动通信技术有限公司IS软件开发组所有项目中的JAVA代码编写部分。
所有新编写的JAVA代码必须严格遵循本文档。
对于已有代码维护,也尽量采用本文档的相关约定。
读者对象
本文档供以下相关人员阅览:
Ø编程规范编写人员
ØJAVA/JSP程序开发人员
Ø代码走查人员
缩略词
参考资料
2.排版、格式
【规则3-2-1】所有的缩进定义为4个空格。
【规则3-2-2】在代码中不要使用TAB键,应该使用4个空格键代替,因为在不同的编辑器下因为TAB设置的空格数目不一致会引起格式混乱。
【规则3-2-3】页宽设置为120,通常一行代码不应该超过这个宽度,如超过,应该在一个逗号或者一个操作符后折行,语句折行后,应该比原来的语句再缩进4个字符。
【规则3-2-4】长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
例:
if(((nUserType==0)&&(getUserState==1))
||((nUserType==1)&&(getUserState==0)))
{
......
}
【规则3-2-5】"{"与"}"应该作为单独的一行,"{"与"}"语句应该位于同一列的位置,与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
例如:
if(i>0)
{
i++;
};
for(i=0;i { ...... } 【规则3-2-6】不允许把多条语句写在同一行。 如以下情况应该避免: inti=1;floatf=0; 【可选3-2-7】相对独立的程序块之间、变量说明之后必须加空行。 如: inti=0; intnAge=0; if(checkUserValid(strUserId)) { ...... } 【规则3-2-8】在代码中操作符、关键字和空格的关系应遵守以下规范: (1)if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。 if(a>=b&&c>d) (2)函数名之后不要留空格,紧跟左括号‘(',以与关键字区别。 (3)逗号、分号只在后面加空格。 inti,j=0; (4)比较操作符,赋值操作符"="、"+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等二元操作符的前后加空格。 a+=1; a=b+c; (5)"! "、"~"、"++"、"--"、"&"(地址运算符)等一元操作符前后不加空格。 i++; 3.命名 【规则3-3-1】使用可以准确说明变量/字段/类的完整的英文描述符。 例如,采用类似firstName,grandTotal或CorporateCustomer这样的名字。 虽然象x1,y1或fn这样的名字很简短,输入起来容易,但是我们难以知道它们代表什么、结果是什么含义,因而使代码难以理解、维护和改进。 【可选3-2-2】应该尽量采用软件产品相应领域的术语。 如在DSDP项目中用户手机号码起名为msisdn,而不是mobileNumber。 【规则3-3-3】采用大小写混合,提高名字的可读性。 一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中间单词的首字母应该大写。 如: intnUserState=0; 【规则3-3-4】除了部分被大家公认的缩写,尽量少用缩写,如果有使用了缩写则一定要注释注明。 【可选3-2-5】避免使用长名字(最好不超过15个字母)。 虽然PhysicalOrVirtualProductOrService看起来似乎是个不错的类名,但是这个名字太长了,应该考虑重新给它起个短一点的名字,比如象Offering。 【规则3-3-6】避免使用相似或者仅在大小写上有区别的名字。 例如,不应同时使用变量名persistentObject和persistentObjects,以及anSqlDatabase和anSQLDatabase。 【规则3-3-7】避免使用下划线作为名字的首末字母。 以下划线为首末字母的名字通常为系统保留,除预处理定义之外,一般不用作用户命名。 更重要的是,下划线经常造成麻烦而且难输入,所以尽量避免使用。 【规则3-3-8】对于变量命名,禁止取单个字符(如i、j、k...),除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。 例: intnUserType=0;//用户类型 inti=0;//循环变量 【可选3-3-9】package的名字原则应该都是由一个小写单词组成;如果package名字由多个单词组成,所有的单词都应是小写。 福诺公司package的命名格式如下: com.funo.xxxx.yyyy(xxxx为项目简称,yyyy为package名)。 【规则3-3-10】Class的名字必须由大写字母开头而其他字母都小写的单词组成,最好用有意义的单词命名。 如: classGetTreeInfo,classTransToXml等。 【规则3-3-11】属性的命名必须遵循命名基本规范,建议按照匈牙利命名法进行命名。 在某些情况下如果需要明确区分属性和方法内部局部变量,建议属性名称以"m_"为前缀,例如: m_nUserNumber。 【规则3-3-12】类方法的命名应采用完整的英文描述符,大小写混合使用: 所有中间单词的第一个字母大写。 类方法名称的第一个单词常常采用一个有强烈动作色彩的动词。 示例: openAccount() printMailingLabel() 这种约定常常使人一看到类方法的名称就能判断它的功能。 虽然这种约定要使开发者多做一些输入的工作,因为类方法名常常较长,但是回报是提高代码的可理解性。 【建议3-3-13】一般说来,命名局部变量遵循与命名字段一样的约定,即使用完整的英文描述符,任何非开头的单词的第一个字母要大写。 但是为方便起见,对于如下几个特殊的局部变量类型,这个约定可以放宽: 1)流 当有一个单输入和/或单输出流在一个成员函数中被打开、使用和关闭时,通常的约定是对这些流分别采用in和out[GOS96]来命名。 对于既用于输入又用于输出的流,采用inOut来命名。 2)循环计数器 因为局部变量常用作循环计数器,并且它为C/C++所接受,所以在Java编程中,可以采用i,j或k作为循环计数器。 若采用这些名字作为循环计数器,要始终使用它们。 3)异常 因为在Java代码中异常处理也非常普遍,所以字母e作为一般的异常符被广泛地接受。 【可选3-3-14】静态常量字段(staticfinal)全部采用大写字母,单词之间用下划线分隔。 示例: MIN_BALANCE DEFAULT_DATE。 4.对象、变量 【可选3-4-1】在进行字符串操作时尽量使用StringBuffer对象,而不是直接使用String。 在处理String的时候要尽量使用StringBuffer类,StringBuffer类是构成String类的基础。 String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。 当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。 比如: 如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer对象和她的append()方法。 如果我们用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。 【建议3-4-2】避免不必要的使用关键字synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。 【建议3-4-3】谨慎使用Vector和ArrayList类。 Vector是同步的。 这个类中的一些方法保证了Vector中的对象是线程安全的。 而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。 因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。 从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。 当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。 所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。 【可选3-4-4】对于不使用的对象显示的设置为null,以提高java虚拟机的垃圾回收效率。 例: Vectorvt=newVector(); ...... vt.Clear; vt=null;//主动释放内存,尽量减少对内存的占用时间。 5.注释 【规则3-5-1】必须用javadoc来为类生成文档。 不仅因为它是标准,这也是被各种java编译器都认可的方法。 【规则3-5-2】在文件的开始部分应该有文件的说明信息,应包含如下信息: (1)版权信息; (2)文件名及其注释; (3)作者,完成日期; (4)版本信息; (5)修改记录; 示例: /** *Copyright(c)2008, 福建福诺移动通信技术有限公司Allrightsreserved。 *文件名称: StringUtil.java *描述: 字符串处理类 *@authorxxx *@date2007年2月27日 *@version1.0 *修改记录: *修改时间: 2008年2月27日 *修改人: xxx *修改内容: 增加字符串分割方法 */ 【规则3-5-3】应按照javadoc的规范自动生成类方法中的注释信息。 示例: /** *获取三个整数的最小值(功能描述) *@paramnum1[in],int.整数1 *@paramnum2[in],int.整数2 *@paramnum3[in],int.整数3 *@returnint.三个整数中的最小值; */ privateintminOfThree(intnum1,intnum2,intnum3) { …… } 【建议3-5-4】变量名字要求含义明确,可以没有注释。 如果需要添加注释,请按照如下格式: protectedintiSize;//队列长度 【规则3-5-5】注释应该增加代码的清晰度,内容要清楚、明了,含义准确,防止注释二义性。 代码注释的目的是要使代码更易于被同时参与程序设计的开发人员以及其他后继开发人员理解。 【规则3-5-6】保持注释的简洁。 最好的注释应该是简单明了的注释。 注释不必洋洋洒洒,只需提供足够的信息,使别人能够理解你的代码。 【规则3-5-7】注释与代码应保持一致。 修改代码同时修改相应的注释;不再有用的注释要删除。 【规则3-5-8】注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。 【规则3-5-9】如果代码中有需要日后补充的内容,必须添加注释说明,格式如下: /**@todo非正式定义子系统编号,需要删除*/ 【规则3-5-10】注释与所描述内容进行同样的缩排。 例: 错误的注释格式: publicbooleancheckUserValid(intnUserState) { //如果用户状态正常,则返回正确;否则返回错误 return(nUserState==1); } 正确的注释格式: publicbooleancheckUserValid(intnUserState) { //如果用户状态正常,则返回正确;否则返回错误 return(nUserState==1); } 【规则3-5-11】对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。 例: for(nUserState! =1)//如果用户状态不正常 { ...... } 【建议3-5-12】在程序块的结束行右方加注释标记,以表明某程序块的结束。 说明: 当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。 例: if(nUserState! =1)//如果用户状态不正常 { for(......) { ....... } }//endofif(nUserState! =1) 6.方法 【规则3-6-1】函数的规模尽量限制在200行以内。 【可选3-6-2】一个方法仅完成一件功能。 如果一个方法实现多个功能,可以考虑分拆成多个方法,每个方法实现一个功能。 【可选3-6-3】如果多段代码重复做同一件事情,那么可考虑提供一个公用的方法实现这个功能,供其它方法调用。 【建议3-6-4】减少函数本身或函数间的递归调用。 【可选3-6-5】检查函数所有参数输入的有效性。 例如参数传入ArrayList对象为空,如果直接使用会导致程序异常。 【可选3-6-6】对方法的异常中应有全面的处理,不要想当然在try块中实现的功能中只可能发生某一种异常,实际上可能会发生很多异常,如: IOException、NullPointerException等,对抛出的异常最后应加上捕捉默认的Exception,并进行处理。 例: try { ...... } catch(SQLExceptionsqle) { ...... } catch(Exceptione)//捕捉其它所有的Exception { ......//处理异常 } 【可选3-6-7】对所调用函数的错误返回码要仔细、全面地处理。 【规则3-6-8】去掉没有用、没必要的变量、代码。 程序中的垃圾代码不仅占用额外的空间,而且很可能给程序的测试、维护等造成不必要的麻烦。 【规则3-6-9】某些语句经编译后产生告警,但如果你认为它是正确的,那么应通过某种手段去掉告警信息。 必须打开编译器的所有告警开关对程序进行编译。 【建议3-6-10】exit除了在main中可以被调用外,其他的地方不应该调用。 因为这样做不给任何代码机会来截获退出。 一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。 【可选3-6-11】位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码。 7.其它 【规则3-7-1】项目组提前设定调试信息的打印方式和打印级别,并设定统一的调试标识,在系统上线后应关闭调试标识,写调试日志前尽量先判断日志级别,再写日志,避免不必要的字符串开销,如if(debug()){myLogger.debug(“用户状态获取成功”);}。 编码过程中应严格遵守调试信息的打印规定,严禁使用System..out.println("……");输出调试信息。 【建议3-7-2】要将系统包,插件包,自定义包区分开来,如系统包放在一起,然后是插件包,自定义包等。 例如: importjava.io.InputStream; importjava.util.Observable; importcom.nl.fjvip.tool.*; 尽量明确指明需要包括的package中的类,不要使用"importjava.io.*"这样运行速度会更快些,查错也方便。 【规则3-7-3】数据库操作必须把连接关闭代码放置到finally模块中,以保证数据库连接被有效释放。 Connectionconnection=null; Statementstmt=null; ResultSetresultSet=null; try { //Createaconnectiontothedatabase ...... //创建statement stmt=connection.createStatement(); //Createaresultset resultSet=stmt.executeQuery("SELECT*FROMmy_table"); //处理查询结果 } catch(SQLExceptionsqle) { //处理异常情况 ...... } catch(Exceptione) { //处理异常情况 ...... } finally { try { if(resultSet! =null) resultSet.close(); if(stmt! =null) stmt.close(); if(connection! =null) connection.close(); } catch(Exceptione) { //处理异常情况 ....... } } 【规则3-7-4】数据库操作中尽量使用绑定变量的语句,如果大量使用未绑定变量的SQL,会占用数据库的librarycache,影响数据库性能。 示例: Connectionconnection=null; PrepareStatementpStmt=null; ...... try { StringsSql="select*frommy_tablewherefield=? "; pStmt=connection.prepareStatement(sSql); pstmt.setString(1,sCode);//sCode为传入变量 pstmt.executeUpdate();//执行动态SQL语句 ...... } catch(Exceptione) { ...... } finally { //关闭连接 ...... } 8.逻辑走查 包括纯代码方面的逻辑和业务逻辑。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 编程 规范 V011