版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目代码编程规范应用范围本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)JS代码、HTML代码及数据库设计均应遵守这个规范。同时,也可作为其它项目的参考。设计类和方法创建具有很强内聚力的类方法的重要性往往比类的重要性更容易理解,方法是指执行一个独立逻辑的一段代码。类常被错误的视为是一个仅仅用于存放方法的容器。有些开发人员甚至把这种思绪作了进一步的发挥,将他们的所有方法放入单个类之中。之所以不能对的的结识类的功能,因素之一是类的实现事实上并不影响程序的执行。当一个工程被编译时,假如所有方法都放在单个类中或者放在几十个类中,这没有任何关系。虽然类的数量对代码的执行并无太大的影响,但是当创建便于调试和维护的代码时,类的数量有时会带来很大的影响。类应当用来将相关的方法组织在一起。当类包含一组紧密关联的方法时,该类可以说具有强大的内聚力。当类包含许多互不相关的方法时,该类便具有较弱的内聚力。应当努力创建内聚力比较强的类。大多数工程都包含许多并不十分适合与其他方法组合在一起的方法。在这种情况下,可认为这些不合群的方法创建一个综合性收容类。创建类时,应知道“模块化”这个术语的含义是什么。类的基本目的是创建相称独立的程序单元。创建松散连接和高度专用的方法使所有方法都执行专门的任务每个方法都应执行一项特定的任务,它应杰出的完毕这项任务。应避免创建执行许多不同任务的方法。创建专用方法有许多好处。一方面调试将变得更加容易。尽量使方法成为自成一体的独立方法当一个方法依赖于其他方法的调用时,称为与其他方法紧密连接的方法。紧密连接的方法会使调试和修改变得比较困难,由于它牵涉到更多的因素。松散连接的方法优于紧密连接的方法,但你不也许使每个方法都成为独立的方法。若要使方法具有较强的独立性,方法之一是尽量减少类变量。创建方法时,设法将每个方法视为一个黑箱,其他例程不应规定了解该方法的内部工作情况,该方法也不应规定了解它外面的工程情况。这就是为什么你的方法应依靠参数而不应依靠全局变量的因素。创建专用方法时,请考虑下列指导原则:1)将复杂进程放入专用方法。假如应用程序使用复杂的数学公式,请考虑将每个公式放入它自己的方法中。这样使用这些公式的其他方法就不包含用于该公式的实际代码。这样也可以更容易发现与公式相关的问题。2)将数据输入/输出(I/O)放入专用方法。3)将专用方法中也许要修改的代码隔离。假如你知道某个进程经常变更,请将这个多变的代码放入专用方法,以便以后可以更容易的进行修改,并减少无意中给其他进程带来问题的也许性。4)将业务规则封装在专用方法中。业务规则常属于要修改的代码类别,应与应用程序的其余部分隔开。其他方法不应知道业务规则,只有要调用的方法才使用这些规则。设计类和方法时,要达成下列目的:1)创建更加容易调试和维护的方法2)创建具有强大内聚力的类3)创建高度专用的方法4)创建松散连接的方法5)尽量使方法具有独立性6)提高方法的扇入性7)减少方法的扇出性编程原则为方法和类赋予表义性强的名字为了使代码更加容易理解,最容易的方法之一是为你的方法赋予表义性强的名字。函数名DoIt、GetIt的可读性很难与CalculateSalesTax、RetrieveUserID相比。由缩写方法名组成的代码很难理解和维护,没有理由再这样做了。给方法对的的命名,可使程序工程的调试和维护工作大大的改观。请认真对待方法命名的工作,不要为了减少键入操作量而减少方法的可理解度。实际应用举例:1)给方法命名时应大小写字母混合使用。假如句子全使用大写字母,那么阅读起来就非常困难,而大小写字母混合使用的句子,阅读起来就很容易。2)定义方法名时不要使用缩写。假如你认为应用程序中的某些工程应使用缩写,那么请将这些情况加上注释,并保证每个人在所有时间内都使用这些缩写。决不要在某些方法中对某些单词进行缩写,而在别的方法中却不使用缩写。3)定义方法名要统一使用英文单词或者计算机专业英语,要做到见名知意。创建方法时,始终都应显式地定义它的作用域。1)假如你真的想创建一个公用方法,请向代码阅读者说明这一点。2)通过为每个方法赋予一个明拟定义的作用域,可以减少代码阅读者需要投入的工作量。应保证你为方法赋予最故意义的作用域。假如一个方法只被同一类中的另一个方法调用,那么请将它创建成私有方法。假如该方法是从多个类中的多个方法中调用,请将该说明为公用方法。用参数在方法之间传递数据应尽量避免使用类变量。一般来说,变量的作用域越小越好。为了减少类变量,方法之一是将数据作为参数在不同方法之间传递,而不是让方法共享类变量。1)为每个参数指定数据类型。2)始终要对数进行检查,决不要假设你得数据没有问题。程序员常犯的一个错误是在编写方法时假设数据没有问题。在初始编程阶段,当编写调用方法时,这样的假设并无大碍。这时你完全可以知道什么是参数的许可值,并按规定提供这些值。但假如你不对参数的数据进行检查,那么下列情况就会给你带来很大麻烦:此外某个人创建了一个调用方法,但此人不知道允许的值;你在晚些时候添加了新的调用方法,并错误的传递了坏数据。其他编程建议注意释放资源,如文献关闭,数据库操作后关闭ResultSet,Statement,Connection等,其他涉及IO操作的如:各种Reader,Writer,InputStream,OutputStream等等。使用StringBuffer对象
在解决String的时候要尽量使用StringBuffer类,StringBuffer类是构成String类的基础。String类将StringBuffer类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应当用StringBuffer来实现大部分的工作,当工作完毕后将StringBuffer对象再转换为需要的String对象。比如:假如有一个字符串必须不断地在其后添加许多字符来完毕构造,那么我们应当使用StringBuffer对象和它的append()方法。假如我们用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。避免太多的使用synchronized关键字
避免不必要的使用关键字synchronized,应当在必要的时候再使用它,这是一个避免死锁的好方法。必须使用时,也尽量控制范围,最佳在块级控制。避免使用java.util.Vector等那些在jdk1.3前就有的集合类
由于"Unlikethenewcollectionimplementations,Vectorissynchronized.",所以使用java.util.Vector类在性能上会有所减低。尽量使用接口而不是一个具体的类
比方如下需求,给定一个SQL语句,返回一个对象的列表,实现中用java.util.ArrayList实现,于是定义方法为:
publicjava.util.ArrayListgetObjectItems(Stringsql)
上面的方法存在一个问题,当getObjectItems内改用Vector或LinkedList实现,外部类必须做相应更改。一个更好的方法是定义返回值为java.util.AbstractList更合适:
publicjava.util.AbstractListgetObjectItems(Stringsql)
这样即使更改实现,外部类也不必做相应更改。避免使用索引来调用数据库中间层组件返回的结果集
如:
for(inti=1;i<=dt.getRowCount();i++){Stringfield1=dt.getField(i,0).toString();……}
而应用字段名来存取结果集:
for(inti=1;i<=dt.getRowCount();i++){Stringfield1=dt.getField(i,"field1").toString();……}
这样在数据库设计更改或查询的SQL语句发生变化时,不会影响到程序的执行。命名约定所有变量的定义应当遵循匈牙利命名法,由表意性强的一个单词或多个单词组成的名字,并且每个单词的首写字母大写,其它字母小写,这样保证了对变量名可以进行对的的断句。工程的命名工程的命名直接使用projectname.工程目录的分派(参照各类开发工具的设立)设计文档(design):design源代码(source):src.引用的库文献(library):lib生成的代码(class):classes5.生成的文档(document):docs包约定根级目录以com.**开头!各项目名称为下一级包!本级目录为项目的控制类所在(即:实现重要流程的类和涉及项目系统管理的类)。再下级的重要并列目录名:Cloudframework云存储开发框架包Cngi具体的应用系统名所有小写使用英语单词,不要使用汉语拼音标记符用点号分隔开来举例类,接口约定类的名字应当使用名词使用英语单词,不要使用汉语拼音每个单词首字母应当大写避免使用单词的缩写,除非它的缩写已经广为人知,如HTTP实现类一般采用接口类名+Impl来展现举例ClassHello;ClassHelloWorld;InterfaceApple;ClassAppleImplimplementsApple;方法约定第一个单词一般是动词。使用英语单词,不要使用汉语拼音第一个单词是小写,但是中间单词的首字母是大写。假如方法返回一个成员变量的值,方法名一般为get+成员变量名,如若返回的值是bool变量,一般以is作为前缀。假如方法修改一个成员变量的值,方法名一般为:set+成员变量名。举例getName();setName();isFirst();变量约定单词的首字母大写;但是首个单词字母都必须小写使用英语单词,不要使用汉语拼音不要用_或&作为第一个字母。尽量使用短并且具故意义的单词。单字符的变量名一般只用于生命期非常短暂的变量。i,j,k,m,n一般用于int/integers;c,d,e一般用于characters。假如变量是集合,则变量名应用复数。boolean/Boolean类型的使用is前缀命名组件采用匈牙利命名法。举例StringfileName;int[]students;inti;intn;booleanisPass;常量约定所有常量名均所有大写,单词间以‘_’隔开。使用英语单词,不要使用汉语拼音特殊情况下可以使用全拼,但是请注释说明举例intI_MAX_NUM;jsp,html,xml等文献约定使用英语单词,不要使用汉语拼音首单词小写,其它单词首字母应当大写避免使用单词的缩写,除非它的缩写已经广为人知,如HTTP举例register.jsp注册,新增view.jsp查询页面视图infoMaintain.jsp维护页面视图dateView.jsp按日期查询页面视图数据库表、视图约定所有小写以“_”分隔单词尽量表义使用英语单词,不要使用汉语拼音主表用“info”表达,每个表名都加“t_”用来辨认为表对象举例t_user_info缩写ui用户主表t_user_type用户类型字典表数据库字段约定首单词小写,其他单词首字母大写使用英语单词,不要使用汉语拼音举例idnameuserTypeuserId使用常量常数很容易在数据输入时犯错常数存在的重要问题之一是你很容易在键入数字时犯错,从而颠倒了数字的位置。例如,当你键入数字10876时,很容易的键入10867或18076。与解决变量和保存字的方法不同,编译器并不在乎颠倒了位置和不对的的数字,有时简朴的错误导致的问题不会立即表现出来,而当问题表现出来时,它们会以随机的计算错误的形式出现,这些错误很难准拟定位。用常量来取代常数时,编译器将在编译时检查常量的有效性。假如常量不存在,编译器便将这一情况告知你,并拒绝进行编译,这可以消除错误键入的数字带来的问题,只要常量拥有对的的值,使用该常量的所有代码也有使用该对的值。常数很难不断更新常量使代码更容易阅读使用常量后,得到的一个额外好处是可使创建的代码更容易阅读。常数很不直观。也许你对常数非常了解,但其别人则主线看不明白。通过合理的给常量命名,使用这些常量的代码就变得比较直观了,更容易阅读。为常量赋予较宽的作用域,这与使用变量时的情况不同。在一个应用程序中你决不应当两次创建相同的常量。假如你发现自己复制了一个常量,请将原始的常量说明转至较宽的作用域,直到该常量可供引用它的所有方法为止。变量定义有焦点的变量用于多个目的的变量称为无焦点(多焦点)的变量。无焦点变量所代表的意义与程序的执行流程有关,当程序处在不同位置时,它所表达的意义是不固定的,这样就给程序的可读性和可维护性带来了麻烦。只对常用变量名和长变量名进行缩写假如需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。例如,假如在代码的某些区域中使用Cnt,而在另一些区域中又使用Count,就会给代码增长不必要的复杂性。变量名中尽量不要出现缩写。使用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。量词列表:First、Last、Next、Prev、Cur量词后缀说明First一组变量中的第一个Last一组变量中的最后一个Next一组变量中的下一个变量Prev一组变量中的上一个Cur一组变量中的当前变量使用肯定形式的布尔变量给布尔变量命名时,始终都要使用变量的肯定形式,以减少其它开发人员在理解布尔变量所代表的意义时的难度。为每个变量选择最佳的数据类型这样即能减少对内存的需求量,加快代码的执行速度,又会减少犯错的也许性。用于变量的数据类型也许会影响该变量进行计算所产生的结果。在这种情况下,编译器不会产生运营期错误,它只是迫使该值符合数据类型的规定。这类问题很难查找。尽量缩小变量的作用域假如变量的作用域大于它应有的范围,变量可继续存在,并且在不再需要该变量后的很长时间内仍然占用资源。它们的重要问题是,任何类中的任何方法都能对它们进行修改,并且很难跟踪究竟是何处进行修改的。占用资源是作用域涉及的一个重要问题。对变量来说,尽量缩小作用域将会相应用程序的可靠性产生巨大的影响。代码的格式化对代码进行格式化时,要达成的目的1.通过代码分割成功能块和便于理解的代码段,使代码更容易阅读和理解;2.使用空行和注释行,将程序中逻辑上不相关的代码块分开。比如:变量声明部分和代码语句间的分隔;较长的方法中,完毕不同功能的代码块间的分隔。要避免出现逻辑上混乱的分隔,如:某一逻辑功能代码块中间用空行进行了分隔,但是在相邻功能代码块之间却没有分隔,这样会给程序阅读者导致错觉。3.减少为理解代码结构而需要做的工作;4.使代码的阅读者不必进行假设;5.使代码结构尽也许做到格式清楚明了。编程原则1.不要将多个语句放在同一行上。不管是变量声明,还是语句都不要在一行上书写多个。2.缩进后续行当你将变量设立为某个值时,所有后续行的缩进位置应与第一行的变量值相同;当你调用一个方法时,后续行缩进到第一个参数的开始处;当你将变量或属性设立为等于表达式的计算结果时,请从后面分割该语句,以保证该表达式尽也许放在同一行上。3.在if语句后缩进;在else语句后缩进在switch语句后缩进在case语句后缩进在do句后缩进已经用行接续符分割的语句的各个行要缩进对从属于行标注的代码进行缩进。4.在执行统一任务的各个语句组之间插入一个空行。好的代码应由按逻辑顺序排列的进程或相关语句组构成。代码的注释使用代码注释的目的1.文字说明代码的作用(即为什么要用编写该代码,而不是如何编写);2.确指出该代码的编写思绪和逻辑方法;3.方便人们注意到代码中的重要转折点;4.使代码的阅读者不必在他们的头脑中仿真运营代码的执行方法.5.说明代码的使用条件。编程原则用文字说明代码的作用:简朴的反复代码做写什么,这样的注释几乎不能给注释增长什么信息.假如你使用好的命名方法来创建直观明了的代码那么这些类型的注释绝对增长不了什么信息.假如你想违反好的编程原则,请说明为什么有的时候你也许需要违反好的编程原则,或者使用了某些不正规的方法,.碰到这种情况时,请用内部注释来说明你在做什么和为什么要这样做。技巧性特别高的代码段,一定要加具体的注释,不要让其他开发人员花很长时间来研究一个高技巧但不易理解的程序段。用注释来说明何时也许犯错和为什么犯错在编写代码前进行注释给代码加注释的方法之一是在编写一个方法前一方面写上注释.假如你乐意,可以编写完整句子的注释或伪代码.一旦你用注释对代码进行了概述,就可以在注释之间编写代码.在要注释的代码前书写注释注释一定出现在要注释的程序段前,不要在某段程序后书写对这段程序的注释,先看到注释对程序的理解会有一定帮助。假如有也许,请在注释行与上面代码间加一空行。纯色字符注释行只用于重要注释注释中要分隔时,请使用一行空注释行来完毕,不要使用纯色字符,以保持版面的整洁、清楚。避免形成注释框用星号围成的注释框,右边的星号看起来很好,但它们给注释增长了任何信息吗?事实上这会给编写或编辑注释的人增长许多工作。增强注释的可读性注释是供人阅读的,而不是让计算机阅读的。1)使用完整的语句。虽然不必将注释提成段落(最佳也不要提成段落),但你应尽量将注释写成完整的句子。2)避免使用缩写。缩写常使注释更难阅读,人们常用不同的方法对相同的单词进行缩写,这会导致许多混乱,假如必须对词汇缩写,必须做到统一。3)将整个单词大写,以突出它们的重要性。若要使人们注意注释中的一个或多个单词,请所有使用大写字母。对注释进行缩进,使之与后随的语句对齐。注释通常位于它们要说明的代码的前面。为了从视觉上突出注释与它的代码之间的关系,请将注释缩进,使之与代码处在同一个层次上。为每个方法和类赋予一个注释标头每个方法都应有一个注释标头。方法的注释标头可包含多个文字项,比如输入参数、返回值、原始作者、最后编辑该方法的程序员、上次修改日期、版权信息。当行尾注释用在上面这种代码段结构中时,它们会使代码更难阅读。使用多个行尾注释时(比如用于方法顶部的多个变量说明),应使它们互相对齐。这可使它们稍容易阅读一些。何时书写注释1)请在每个if语句的前面加上注释。2)在每个switch语句的前面加上注释。与if语句同样,switch语句用于评估对程序执行产生影响的表达式。3)在每个循环的前面加上注释。每个循环都有它的作用,许多情况下这个作用不清楚直观。注释那些部分类类的目的参数:参数类型参数用来做什么任何约束或前提条件已知的问题类的开发/维护历史注释出采用的不变量并行策略编译单元每一个类/类内定义的接口,含简朴的说明文献名和/或标记信息版权信息接口目的它应如何被使用以及如何不被使用类属性用处目的不同值的含义成员函数注释成员函数做什么以及它为什么做这个哪些参数必须传递给一个成员函数成员函数返回什么已知的问题任何由某个成员函数抛出的异常可见性决策成员函数是如何改变对象的包含任何修改代码的历史如何在适当情况下调用成员函数的例子合用的前提条件和后置条件成员函数内部注释控制结构代码做了些什么以及为什么这样做局部变量难或复杂的代码解决顺序对if-else语句的各个条件,要说明其含义。示例块注释:重要用来描述文献,类,方法,算法等。一般用在文档和方法的前面,也可以放在文档的任何地方。以‘/*’开头,‘*/’结尾。例:……/**注释*/……行注释:重要用在方法内部,对代码,变量,流程等进行说明。与块注释格式相似,但是整个注释占据一行。例:……/*注释*/……尾随注释:与行注释功能相似,放在代码的同行,但是要与代码之间有足够的空间,便于分清。例:intm=4;/*注释*/假如一个程序块内有多个尾随注释,每个注释的缩进应当保持一致。行尾注释:与行注释功能相似,放在每行的最后,或者占据一行。以‘//’开头。文档注释:与块注释相似,但是可以被javadoc解决,生成HTML文献。以‘/**’开头,‘*/’结尾。文档注释不能放在方法或程序块内。例:/**注释*/表达式和语句每行应当只有一条语句。if-else,if-elseif语句,任何情况下,都应当有“{”,“}”,格式如下:if(num1>10&&isOK==true){statement;}elseif(condition){statements;}else{statements;}for语句格式如下:for(initialization;condition;update){statements;}假如语句为空:for(initialization;condition;update);while语句格式如下:while(condition){statements;}假如语句为空:while(condition);do-while语句格式如下:do{statements;}while(condition);switch语句,每个switch里都应包含default子语句,格式如下:switch(condition){caseABC:statements;/*fallsthrough*/caseDEF:statements;break;caseXYZ:statements;break;default:statements;break;}try-catch语句格式如下:try{statements;}catch(ExceptionClasse){statements;}finally{statements;}错误解决和异常事件法则通常的思想是只对错误采用异常解决:逻辑和编程错误,设立错误,被破坏的数据,资源耗尽,等等。通常的法则是系统在正常状态下以及无重载和硬件失效状态下,不应产生任何异常。方法异常解决采用日记机制来报告异常(调用系统LOG4J接口统一管理),涉及异常发生的时刻。不要使用异常实现来控制程序流程结构。每一个类或文献都要解决异常或错误。异常封装Dao层的类中统一封装所有异常为DBExceptionSer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年方法论11月交通安全培训内容
- 2026年防火防滑安全培训内容详细教程
- 2026年班组安全培训内容例子核心技巧
- 贵阳市清镇市2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 红河哈尼族彝族自治州屏边苗族自治县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年院校消防安全培训内容高频考点
- 2026年塑料改性安全培训内容核心要点
- 宜宾市翠屏区2025-2026学年第二学期五年级语文第六单元测试卷(部编版含答案)
- 南充市顺庆区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 枣庄市峄城区2025-2026学年第二学期五年级语文期中考试卷(部编版含答案)
- 2026重庆酉阳自治县城区学校选聘教职工91人笔试模拟试题及答案解析
- 2026湖北松滋金松投资控股集团有限公司招聘28人笔试备考试题及答案解析
- 2026江苏无锡惠高新运产业招商发展有限公司招聘6人笔试备考题库及答案解析
- T∕CEA 3030-2026 乘运质量等级 第2部分:自动扶梯和 自动人行道
- 2025年云南省中考数学-26题二次函数降次幂题35道
- 高效音频放大器设计毕业论文
- 实验诊断学第八章 心脑血管疾病实验诊断
- 幼儿园安全教育管理PPT(37P)
- XX集团公司“揭榜挂帅”实施办法
- 冲压模具设计冲孔落料级进模设计说明书
- 消化内镜切除术
评论
0/150
提交评论