还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
43.
43.
2.3变量
53.
2.4常量
933.6注释
1033.7声明
1233.8语句
183.
3.4长度每个函数要紧逻辑语句的长度以30个自然行下列为宜,建议不要超过50行,假如超过80行就应该重新组织假如单独成行,则其所在的行不在计算的范围内,catch/finally语句块中的语句不计算在内
3.
3.5括号在大括号语法中,缩进时大括号的写法有不一致的几种,个人认为,前面所用的那种左右括号单独一行的写法最为清晰,由于能够最好地反映出括号的配对情况具体使用何种方式并不重要,重要的是,要保持方式风格的统一,不能在同一个项目中出现不一致的风格风格1看起来紧凑些,能够减少代码的行数,但是在其他代码存在换行的情况下,不容易发现配对的括号,务必要借助IDE提供的功能才能够,建议使用风格2,这样的代码看起来更清晰一些,这点比较重要;〃风格1ifcondition{doSomethinglf;}else{doSomethingElse;〃风格2ifconditiondoSomethinglf;elsedoSomethingElse;
3.
3.6注释注释是用来解释程序做什么What,为什么这样做Why,与要特别注意的地方的,而不是注释程序是怎么工作的How,你的程序本身就应该能说明这一问题,假如程序的逻辑过于复杂,添加一些注释也是有必要的比如下面的注释是务必的//go thruthe array,note thelast elementis at[len-1]for i=0;ilen;i++DoSomeThing;下面的注释是多余的//this loopstarts thei from0to len,in eachstep,it//does SomeThingfor i=0;ilen;i++DoSomeThing;Java程序有两类注释实现注释implementation comments与文档注释documentcommentso实现注释使用/*...*/与〃界定的注释文档注释是Java独有的,并由/**…*/界定切记,注释要随着程序的修改而不断更新,一个误导的Misleading注释往往比没有注释更糟糕另外,注释包含所有源代码建议只用ASCII字符,不要用中文或者其他特殊字符,它们会极大地影响程序的可移植性
3.
3.
6.1单行注释短注释能够显示在一行内,并与其后的代码具有一样的缩进层级假如一个注释不能在一行内写完,就该使用多行注释参见”多行注释单行注释之前应该有一个空行比如if condition{/*Handle thecondition.*/或者者if condition{//Handle thecondition.
3.
3.
6.2多行注释多行注释通常用于提供对方法,数据结构与算法的描述多行注释常被置于每个类与方法开始处,或者者用于需要对某一实现细节做全面说明时比如:*Here isa blockcomment.
3.
3.
6.3行末注释极短的注释与它们所要描述的代码位于同一行,注释界定符是“〃”或者者/**/,能够注释掉整行或者者一行中的一部分比如:if a==2return true;//special case}else returnfalse;/*special case*/
3.
3.
6.4文档注释文档注释描述Java的类、接口、构造器,方法,与字段field每个文档注释都会被置于注释定界符/**.•.*/之中,一个注释对应一个类、接口或者成员该注释应位于声明之前,文档注释的第一行/**不需缩进,随后的文档注释每行都缩进1格使星号纵向对齐比如:*The Exampleclass provides...*/public classExample/***the fielddescription...*/private int iCount=0;/***the methoddescription...*@param*@return*@throws*/public voiddoSomething若你想给出有关类、接口、变量或者方法的信息,而这些信息又不适合写在文档中,则可使用实现块注释或者紧跟在声明后面的单行注释比如,有关一个类实现的细节,应放入紧跟在类声明后面的实现块注释中,而不是放在文档注释中文档注释不能放在一个语句块内使用
3.
3.7声明变量的声明推荐一行声明一个变量,由于这样以利于写注释;尽量在声明变量的同时进行初始化,唯一不这么做的理由是变量的初始值依靠于某些先前发生的计算;避免声明的局部变量覆盖上一级声明的变量比如,不要在内部代码块中声明相同的变量名;只在代码块的开始处声明变量,不要在首次用到该变量时才声明定义类的成员变量时,总的定义顺序是先定义静态变量后定义实例变量,在每种类型的变量中,变量顺序依次为公共public变量,受保护protected变量,私有private变量
3.
3.8语句if、for、do、while case、switch default等语句自占一行,且if、for、do、while等语句的执行语句部分不管多少都要加括号{}尽量减少嵌套语句的层数,最好不好超过4层,假如多于4层,则应该对函数进行重构
3.
3.
8.1if-else只有if的语句ifcondition//do something含有else的语句ifcondition//do something}else{//do something含有else-if的语句ifcondition//do something}else ifcondition2{//do something
3.
3.
8.2for语句一个for语句应该具有如下格式for initialization;condition;updatestatements;一个空的for语句所有工作都在初始化,条件推断,更新子句中完成应该具有如下格式for initialization;condition;update{}当在for语句的初始化或者更新子句中使用逗号时,避免因使用三个以上变量,而导致复杂度提高若需要,能够在for循环之前为初始化子句或者for循环末尾为更新子句使用单独的语句
3.
3.
8.3while语句一个while语句应该具有如下格式while conditionstatements;}一个空的while语句应该具有如下格式while condition{}
3.
3.
8.4do-while语句一个do-while语句应该具有如下格式do statements;}while condition;
3.
3.
8.5switch语句关于有多个分支的代码,每个分支一行,且务必包含默认default分支一个switch语句应该具有如下格式switch condition{case ABC:statements;break;case XYZ:statements;break;default:statements;break;}
3.
3.
8.6try语句一个try-catch语句应该具有如下格式try statements;catch ExceptionClassestatements;}finally{statements;其中finally语句块是可选的
3.
3.
8.7空语句空行将逻辑有关的代码段分隔开,以提高可读性下列情况应该总是使用两个空行
3.
3.
8.8口声明之间下列情况应该总是使用一个空行
1、两个方法之间
2、语句块内的局部变量与方法的第一条语句之间
3、注释之前
4、一个方法内的两个逻辑段之间
3.
3.
8.8空格下列情况应该使用空格:
1、一个紧跟着括号的关键字应该被空格分开,比如:while true
2、空白应该位于参数列表中逗号的后面;obj.doSomethingargl,arg2,arg3;
3、所有的二元运算符,除了〃.〃,应该使用空格将之与操作数分开一元操作符与操作数之间不因该加空格,比如负号〃-〃、自增〃++〃与自减〃一〃比如a+=c+d;a=a+b/c*d;n++;printSize,/size is〃+foo+〃\n〃;
4、for语句中的表达式应该被空格分开,比如for exprl;expr2;expr
35、强制转型后应该跟一个空格,比如myMethodbyte aNum,Object x;myMethodint cp+5,inti+3+1;
3.4特殊处理系统中捕获的特殊,在无法采取补救措施或者补救措施失败后,一律不同意单独处理特殊,全部要向上级代码抛出,由系统统一处理系统提供了通用的特殊封装类BaseException与在代码中程序员需把捕获到的具体特殊与相应的特殊描述代码一同封装入BaseException中,“向外”抛出,最终由系统统一处理当在业务层代码handler中有特殊发生时,需在特殊try/catch的catch块中创建BaseException,将捕获到的具体特殊封装入BaseException,并将BaseException向外抛出至servlet中,交由上级代码统一处理,并记录全面的日志信息比如:try}catchIOException e{log.eirorC系统发生特殊无法进行XXX操作,e;thrownew BaseExceptionIErrorCode.lO_Exception,e;}当在逻辑操纵层代码servlet中有特殊发生,或者有特殊被抛出至servlet中时,不同意在servlet中出现try/catch块对产生的特殊进行处理servlet中的方法一律将特殊“向外”抛出,由系统级代码统一处理比如protected voidperformTaskthrows NumberFormatException{
3.5其他规范
1、限制外部包的使用假如需要使用一个外部包需要听取项目经理的意见在项目经理批准往常,严禁擅自使用一个外部的包;
2、关于只有一行的方法体,能够与方法声明写在一行上;
3、在类内部尽量不要定义main方法,请使用TestMain运行待测试的类,假如已经定义了,那么它应该写在类的底部;
4、程序中用到的资源,比如文件流、数据库连接等,要遵循哪里获取哪里释放的原则;
225.
225.
235.
235.
4.1JSP文件名命名规则以功能名称+操作名称作为JSP文件名称,比如用户管理的用户保护的功能名称之USER_MANAGE_MAINTAIN,当前操作名称之增力口,则该JSP的名称之userManageMaintainAdd.jsp操作名称一览表:操作名称代码增加Add修改Mod ify明细Deta i1删除De1ete查询Search审核操作Audit列表List
4.2JSP头格式JSP头部通常需要遵循下列格式%@page language=java pageEncoding=nGBK n%%@page import=n java.util.*n%%@page import=n java.io.File%//jdk标准包%@page import=n javax.mail.Transport*1%//java扩展包%@page import=org.apache.xml.serialize%//使用的夕卜部库的包%@page import=n com.icss.login.LoginHandler n%//使用的模块的其他包%@include file=nsome.j spn%//include其他的j sp%String contextPath=request.getContextPath;//用于设置相对路径%
4.3JSP页面中按钮的快捷键操作名称快捷键查询ALT+Q储存ALT+S笔数ALT+S笔数与金额ALT+S返回ALT+R修改确认ALT+C拒绝ALT+X请示删除ALT+D确认ALT+C新建ALT+A停用ALT+T导入ALT+1导出ALT+E高级ALT+A
4.4SERVLET命名规贝以功能编号+Servlet作为Servlet的名称,比如用户管理的用户保护的功能编号为USER_MANAGE_MAINTAIN,当前操作名称之增加,则该Servlet的名称之UserManageMaintainServletmethod=add,操作的名称列表要紧包含下列几种
4.5HTML格式
1、HTML头通常需要遵循下列格式:head titlesometitle/title linkrel=nstylesheet nhref=nstyle.css”type=ntext/css nscript language=j avascriptsrc=common.j snx/script scriptlanguage=nj avascriptn//some javascript/script/head注意务必指定一个有意义的〈title),严禁出现untitled”或者“未命名”之类的title
02、输入框的maxlength属性关于text类型的输入域,务必根据数据库字段的长度设置相应的max length,比如数据库类型是VARCHAR
(64),那么maxlength是32(由于中文浏览器关于中文也认为是一个字符)
4.6web.xml书写规范
1、在web.xml中,将新添加的元素,放在同类元素的最下面,并用注释说明;
2、web.xml的servlet-mapping元素中servlet-name与url-pattern值保持——致;
3、要保持web.xml有良好的格式,每级元素与上级元素保持一个TAB(4个空格)的缩进;
4.7其他规范
1、限制session的使用在代码中使用session需要听取项目经理的意见,项目经理需要在设计文档中登记项目中所有使用到的session的名字与作用
2、若是待提交的参数含有中文,或者参数过多,过长,用post方式,不用get方式;第五章数据库规范
5.1命名规则
5.
1.1基本规则
1、所有标识符全部使用英文大写,表名以名词或者名词词组命名,多个名词间下列划线分隔
2、表名以TBL_开头、存储过程以PR_开头、视图以VIEW_开头、触发器以TRIG开头,索引以IDX_开头
3、字段名称尽量不用缩写
4、字段名称长度在16个字符下列
5.
1.2常用名称字段名称名称缩写XXX代码xxxCODE XXX类型xxxTYPE XXX名称xxxNAME XXX地址xxxADDR XXX号码xxxNO XXX状态xxxSTSTUS XXX用户xxxlISER XXX日期xxxDATE XXX标识xxx1D XXX属性xxxATTR XXX描述xxxDESC XXX版本序号xxxVER上级XXX PARENTxxx
5.2数据类型
5.
2.1基本规则尽量使用流行数据库通用的数据类型,某种数据库特殊的数据类型,如boolean类型能够用charl代替,分别以Y/N代表True/Faleo字符类型的字段,若长度不定,并有可能超过10的,定义成varchar型
5.
2.2常用类型字段名称名称缩写字符/字符串varcharXXX数字number大量文本CLOB文件流BLOB浮点数f1oat
24.2日期YYYY-MM-DD varcharlO时间HH24:MI:SS varchar8时间日期varchar19时间戳number20说明varcharNN,NN指具体的字节数,一个中文字占两个字节
5.3SQL语句
1、代码中书写的sql语句除数值部分以外,全部要求使用大写
2、对较为复杂的SQL语句加上注释,说明算法、功能
3、多表连接时,使用表的别名来引用列
5.4注释规则
1、所有数据库对象都要有注释,包含表、字段、试图、存储过程、函数、触发器等;
2、SQL语句注释单独成行、放在语句前面
3、应对SQL语句中不易懂得的分支条件表达式加注释;
4、应对SQL语句中对重要的计算应说明其功能;
5、过长SQL语句块,应将其语句按实现的功能分段加以概括性说明;
5.5JDBC操作
1、关于数据库连接,要遵循在哪获得在哪释放的原则,即在获得连接的代码块内释放连接;
2、建议使用PreparedStatement,尽量避免使用Statement o
5.6优化规则
1、禁止使用SELECT*FROM,应列出所有字段;
2、尽量少用嵌套查询;
3、大量的排序操作影响系统性能,如非务必使用排序操作,尽量减少ORDER BY与GROUP BY排序操作
4、如结果集不需唯一,使用UNION ALL代替UNION
5、索引的使用1注意比较值与索引列数据类型的一致性;2关于索引的比较,尽量避免使用!=;
6、任何对列的操作都将导致表扫描,它包含数据库方法、计算表达式等等,查询时要尽可能将操作移至等号右边
7、IN、OR子句常会使用工作表,使索引失效;假如不产生大量重复值,能够考虑把子句拆开;拆开的子句中应该包含索引
8、用多表连接代替EXISTS子句
9、关于ORACLE数据库应注意下列几点:1系统可能选择基于规则的优化器,因此将结果集返回数据量小的表作为驱动表,关于Oracle指FROM后边最后一个表2查询的WHERE过滤原则,应使过滤记录数最多的条件放在最后面3WHERE条件中表连接关系在前,其它条件在后
5.7注意事项
1、除非特别必要,尽量少使用视图
2、关于数据库中的对象,要以注释的方式简要说明什么地方使用到了,即时修改说明,及时删除没有用到的对象
3、避免使用复杂的SQL嵌套语句,在实现程序的功能后,对SQL进行优化
4、只有同时操作不一致数据库的表时,才能使用DBLINK,否则不同意通过DBLINK访问其他数据库的对象,应该直接获取要访问的数据库对象对应的链接第一章概述1-1编写目的为规范FSOP项目的开发实施工作,特制定本规范为了提高软件开发质量,降低开发周期,增强代码的可重用性与易读性,使软件便于保护,开发人员间便于交流与协作,特总结出开发规范,以为参考
1.2面向读者从事FSOP项目的开发、实施工作的有关人员
1.3名词解释本节对手册中涉及到的术语进行简单描述第二章程序结构
2.1包结构项目中的所有代码,务必符合如下的结构
1、各子系统的模块com.icss.fsop.{subsys}.{module}.servlet.[xxServlet]其中subsys是子系统的名称,module是模块的名称,xxServlet与xxHandler是模块下面的Servlet与Handler,同意有多个Servlet与Handler同时存在,建议同一个模块下,用多套Servlet与Handler处理不一致的业务对象;util存放该模块专用的类;package/class能够任意级别的包或者者类;
2、子系统之外的模块com.icss.fsop.sm.{module}.servlet.[xxServlet]其中sm是system manage的简写,其他同上;
3、公共的类含义同上
2.2有关类
1、关于Servlet,务必继承ServletBase,务必在Servlet中处理与request与response有关的操作,通常是取参数与设置属性等操作;2>关于Handler,务必继承HandlerBase,该类的方法中,不能用request与response作为参数,更不能用Servlet作为参数;
3、程序中使用到的SQL,一律在XXXSQLBuilder中进行拼写,该类属于util包,需要继承SQLBuilderBase,其构造函数为私有类型,同时要实现静态方法getSQLBuilderconn,根据不用的数据库类型,返回不一致的实例第三章JAVA规范
3.1核心原则
1.软件工程化
2.面向对象
3.能简单不复杂
4.强调团队协作
3.2命名规范程序内的所有标识符(包含包名、类名、接口名、方法名、变量名)都应由字母、数字与下划线构成,并以字母开头;统一使用英文命名,用词应当准确,禁止使用中英文混合的方式命名,假如可能的话,尽量使用有意义的英文单词或者多个单词的缩写命名(缩写应该是被广泛使用的缩写),做到见名知意;标识符的长度应当符合min-lengthmax-information”原则;程序中不要出现仅靠大小写区分的相似的标识符;在使用英文字母起标识作用时要注意,尽量不使用“0”,“Z”,“I”等单个字符,以避免与数字“0”,“2”,“1”混淆321包、类与接口
1、所有包名全部小写,只能使用英文字母,不得使用数字与其他符号;
2、类名使用有意义的英文单词或者单词的组合,每个单词的首字母大写,假如是实现接口的类,可酌情使用Imp结尾,英文单词通常为名词
3、接口名使用有意义的名词与形容词的组合,每个单词的首字母大写,名称前不需要添加前缀“I”,英文字母i的大写
3.
2.2方法方法命名使用动词或者“动词+名词”的组合,名称的首字母小写,名称中其他词的首字母大写关于取值的方法getter method,力口“get”作前缀;关于设置的方法setter method,加“set”作前缀;关于布尔型的方法boolean method,加“is”作前缀;用正确的反义词组命名具有互斥意义或者相反动作的函数,比如getValue,setValueo
3.
2.3变量变量命名使用名词或者名词形容词+名词〃的组合,名称的首字母小写,名称中其他词的首字母大写尽量避免单个字符的变量名,除非是一次性的临时变量临时变量通常被取名为i,j,k,m与n,它们通常用于整型;c,d,e,它们通常用于字符型用正确的反义词组命名具有互斥意义的变量,比如int minValue与int maxValue尽量避免名字中出现数字编号,如Valuel,Value2等,除非逻辑上的确需要编号命名应尽量使用匈牙利命名法,成员变量用长名字,参数与局部变量用短名字,通常由小写字母开头的单词组合而成类成员变量前通常应加上m_,静态变量应加上s-紧接着是变量的类型只限于JDK内置类型临时变量应参照如下类似的格式书写,如Itmp ztmpStr,tempStr等比如m_nTotaINum,m_strPath,s_bRcving类型前缀整型n,i长整型1无符号整型U字符ch布尔量b浮点数f双精度浮点d字符串str,sz
3.
2.4常量常量(static final变量卜名字的每个字母都大写,同时指出完整含义,词与词之间用下划线分隔
3.3代码结构代码组织要清晰,严格操纵函数的长度与每行代码的长度,{,},(,),if,else,do,while,for,case等要对应整齐,缩进全部用Tab键(4个空格)变量的定义要集中,函数间要有空行分开,一个程序中的空行数目最好占8%-16%多态函数与功能相近的函数集中放在一起代码应该简洁、清晰并讲述了所发生的一切,我们的目标应该是写出最清晰的代码,而不是最巧妙的代码有些不易懂得的变量或者函数应作注释,难懂的代码要有注解,在文件的开始处有该文件的用途描述一定要保持注释的一致性代码的重用要认真,删掉从来没有用过的函数或者变量,大篇幅注释掉的代码行也应删除,以免使程序混乱难读工程中不起作用的文件或者类应删除,工程目录下的非工程文件也应该移走,保持工程的清洁,避免混淆难于管理
3.
3.1缩进代码缩进是指通过在每行代码前键入空格或者制表符的方式,表示每行代码之间的层次关系任何编程语言都需要代码缩进规范程序的结构,使用代码缩进的编程风格有利于代码的阅读与懂得在本项目的开发中,统一使用TAB(4个空格)进行代码缩进在遇到有关类、结构、函数或者过程、与枚举等等复杂程序结构的定义的时候,我们通常需要将它的内容缩进一层在C/C++/C#/Java语言中,大括号是一个非常明显的标志,凡是遇到大括号,都应该直接联想到缩进
3.
3.2行宽当一条语句太长而超出一定的宽度时,应该折行书写,尽量避免一行的长度超过80个字符
3.
3.3换行需要折行时,从第二行起到该语句结束之间的各行应该缩进一层,至下一条语句时再恢复原先的缩进位置这一点我相信大家都能懂得并愿意遵循,然而问题的焦点并不在于要不要换行,而在于在什么位置换行当一个表达式不能在一行内写完,参照下面的标准换行逗号后换行,操作符后换行,,换行时保证代码意义的连贯性在换行时,我们通常在一个变量或者者常量之前换行,把逗号之类的分隔符、运算符留在前一行的行尾函数调用时,假如参数个数很多,或者者要传递的表达式写起来很长,那么也会涉及到长语句换行问题;在一些必要的情况下,我们为了清晰地列出函数的每一个参数,能够每行只书写一个参数,原则是尽可能地在参数与参数之间换行,并将逗号保留在上一行行末下面是经常使用的一些换行的示例代码代码示例1由于代码过长而进行断行bitmap=new Bitmapsize.Width,size.Height,System.Drawing.Imaging.Pixel Format.Format32bppArgb;代码示例2关于一个超长表达式,我们能够在某两个表达式项之间断开:if f==ImageFormat.Jpeg.Guid||f==ImageFormat.Tiff.Guid11f==ImageFormat.Png.Guid11f==ImageFormat.Exif.Guid supportsPropertyltems=true;else supportsPropertyltems=false;}原本一个很长的条件表达式,通过在“II”运算符处换行,显得更加地清晰有一点需要我们注意的是,当我们进行折行时,要将折行位置处的分隔符如前一例中的逗号,这一例中的“II”运算符等留在上一行的行末,给人以“此行并未结束”的直观印象代码示例1-3寻找最佳的断行位置double containerAspectRatio=doublecontainer.ClientWidth/container.ClientHeight;如此一来,这个除法算术表达式就显得较为完整,相比前一种写法而言更能表达其内在的逻辑关系通常我们会选择整个表达式中最高的关系层次进行断行,比如上述代码中的“赋值号”与“除号”都是能够考虑的断行点,但相比较而言,除号连接的这个算术表达式只是整个赋值表达式的右半部分,假如在除号处断行,那么不但整个表达式会被截断,连局部的这个除法表达式也会被截断;反之,我们选择在赋值号处换行,能够保持除法表达式的完整,最大限度地减少换行对语句整体结构的破坏,能够更加清晰地表达出原先的逻辑代码示例1-4将函数调用中的每一个参数都分行书写Rectangle imageBounds=new RectangleitemBounds.X+padding,itemBounds.Y+padding,itemBounds.Width-padding*2,itemBounds.Height-padding*2;当参数数量较多,参数较长或者者包含表达式的时候,这种排版比起单独写成一行更为直观醒目。