java开发学习编码_第1页
java开发学习编码_第2页
java开发学习编码_第3页
java开发学习编码_第4页
java开发学习编码_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

JAVA开发编码规范公司管理规范JAVA开发编码规范江苏七葫芦信息科技有限公司研发部二零一五年四月二十二日

1. 引言 21.1. 目的 21.2. 文档概述 21.3. 概念和术语 21.4. 参考文档 22. 命名规范 32.1. 总则 32.2. 类、接口、包命名 32.3. 成员函数命名 32.4. 字段命名 32.5. 常量的命名 32.6. 局部变量命名 32.7. 函数参数的命名 33. 注释规范 33.1 注释的方式 33.2 注释的内容 33.3 注释的规则 34. 书写规范 34.1 基本格式 34.2 对齐 34.3 空行空格 34.4 断行 34.5 局部变量的声明 34.6 类成员的声明顺序 34.7 表达式与语句 35 数据库设计规范 35.1 通用规范 35.2 表的命名 35.3 表的设计表 35.4 列的设计 3引言目的本规范的用于指导公司所有Java应用程序开发编码。制定编码规范的首要考虑的目标是:提高代码的可读性。从而使现有的项目成员能够互相快速地读懂代码;使后加入的程序员很快熟悉已有代码;使维护人员容易、高效地维护代码。规范编码的同时要考虑的目标还有:代码质量、生产效率、调式效率、维护效率。但当可读性和编写效率在某些局部问题上冲突时,可读性优先。因为可读性是调式效率、维护效率的基础,是保证代码质量的前提。文档概述本规范的制定前提是尽量与行业规范一致,主要是sun的java规范,同时吸收了一些实用的公司级规范,例如Ambysoft公司提出的一套比较实用的规范。附录中的编程技巧仅供参考和作为技巧积累的开始。概念和术语块(block):成对括号{}中的代码。包(package) 局部包(localpackage):一个开发组织内部使用的包,不在开发组织之外分发和使用。 全局包(globepackage):分发给多个组织使用的包。类(class)接口(interface)常量(constant)局部变量(localvariable)参考文档《WritingRobustJavaCode,TheAmbySoftInc.C》,ScottW.Ambler《CodeConventionsfortheJavaTMProgrammingLanguage》《ThinkinginJava》命名规范总则好的命名规则能极大地增加可读性和可维护性。同时,对于一个有上百个人共同完成的。大项目来说,统一命名约定也是一项必不可少的内容。本章对程序中的所有标识符(包括包、变量名、常量名、方法名、类名、接口等)的命名做出约定。三种命名规范说明:Pascal规范:第1个字符大写,目标名中的每个单词的第1个字母也大写,比如:InvoiceNumber或者PrintInvoice。其他的所有字符都小写。Camel规范:第1个字符不大写,但目标名中的每个单词的第1个字母大写,比如:invoiceNumber。其他的所有字符都小写。匈牙利规范:在目标名中加入表示类型的前缀,如strName。长度适宜。最好小于15个字符,测试类/函数的命名例外。类、接口、包命名包的命名对于包的声明,要遵循统一的命名规范来对包的声明进行说明。包名总是小写,不要出现下划线等符号,名词用有意义的缩写,并且前缀是一个顶级域名(如当前的com,edu,gov,mil,net,org)。包名称的随后部分根据织自身的命名规范变化。这样的规范可通过指定分公司、项目等来确定。样例:com.项目名称.模块名.类的命名类名采用大小写结合的方法,构成类名的每个单词的首字母的首字母也必须大写,即采用Pascal规范。在构成类名的单词之间不用下划线。接口命名接口命名和类命名规范相同。以“I”作为前缀,标识此类为接口“Interface”。成员函数命名动宾结构或动词,函数的目的很明确。动词小写,其它词首字母大写。例如: openAccount() printMailingLabel() delete() save()存取函数setter和getter存取函数getter和setter分别用于读取或设置字段的值。一般字段的存取函数名称的格式如下: set+字段名、get+字段名例如:setAccountNumber()、getCustomerIDbool型字段的存取函数的命名根据字段内容可用is作前缀。例如:isClosed(),setClose()。Constructor的命名必须与class同名。此规范由Sun规定,必须严格遵守。字段命名用英文全拼,表明字段内容。集合字段(数组、向量)用复数。举例: orderItems customers discountRate unitPrice zipCode常量的命名 常量名都要使用大写字母,用下划线‘_’分割单词例如:staticfinalintMIN_WIDTH=4;staticfinalintMAX_WIDTH=999;staticfinalintGET_THE_CPU=1;局部变量命名第一个字母小写,中间单词的第一个字母大写。不要用_或&作为第一个字母。尽量使用短而且具有意义的单词。一般变量名不得取单个字符(如i、j、k等)作为变量名,单个字符一般用于局部循环变量。如果变量是集合,则变量名应用复数。命名组件采用匈牙利命名法,所有前缀均应遵循同一个组件名称缩写列表。局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)函数参数的命名函数参数的命名约定与局部变量的相同。用正确的反义词命名具有互斥意义的变量或相反动作的函数等。说明:下面是一些在软件中常用的反义词。add/remove;begin/end;create/destroy;insert/delete;first/last;get/set;increment/decrement;put/get;add/delete;lock/unlock;open/close;min/max;old/new;start/stop;next/previous;source/target;show/hide;send/receive;source/destination;cut/paste;up/down;

如下单词的缩写能够被大家认可:argumentargOperatingsystemOSbufferbufparameterparamclearclrpreviousprevclockclkprioritypriocomparecmpreadrdconfigurationcfgreadyrdycontextctxregisterregdelaydlyschedulescheddevicedevsemaphoresemdisabledisstackstkdisplaydispsynchronizesyncenableentimertmrerrorerrtriggertrigfunctionfnctwritewrhexadecimalhexmaximummaxinitializeinitmessagemsgmailboxmboxminimumminmanagermgrmultiplexmux注释规范注释有于理解代码,有效的注释是指在代码的功能、意图层次上进行注释,提供有用、额外的信息,而不是代码表面意义的简单重复。注释的方式行注释:“//注释内容”和“/**注释内容*/”两种注释形式。文档型注释:“/**注释内容*/”分成多行书写的形式,注释内容里包含标签。一般类公共变量的声明采用行注释。类、接口、构造函数、方法等的声明采用文档型注释。注释的内容注释使用中文注释。与doc有关的标准文单词标签保留。说明:文档型注释描述了Java类(Javaclasses),接口(interfaces),构造函数(constructors)、方法(methods)和域(fields)。每一个文档注释都包含在/**…*/分隔符中,每一个类(class)、接口(interface)或成员(member)都有一个注释。这些注释应该只出现在声明(declaration)。标签用处用途@author作者的名称类、接口说明特定某一段程序代码的作者。每一个作者各有一个标记。@deprecated类、方法说明该类的应用程序程接口(API)已被废弃,因此应不再使用。@exceptionname方法说明由方法发出的异常。一个异常采用一个标记,description并要给出异常的完整类名。@paramname参数名的描述方法用来说明传递给一个方法的参数,其中包括参数的类型/类和用法。每个参数各有一个标记。@return方法返回值的描述方法若方法有返回值,对该返回值进行说明。应说明返回值的类型/类和可能的用途。@since类、方法例如:sinceJDK1.1:说明自从有JDK1.1以来,该项已存在了多长时间。@see类名类、接口、方法、字段在文档中生成指向特定类的超文本链接。可以并且应该采用完全合法的类名。@seeClassName#memberfunctionName类、接口、方法、字段在文档中生成指向特定方法的超文本链接。可以并且应该采用完全合法的类名。@version版本号类、接口说明特定一段代码的版本信息。注释的规则类、接口头部必须进行注释。说明:注释必须列出:类、接口的名称、内容摘及作者等。/***类名称:*内容摘要://说明主要功能。*@author*/公共方法前面应进行文档型注释。说明:注释必须列出:方法编号、主要功能、参数类型、输入参数、返回值、调用的前置条件和后置条件、异常说明、关键算法、可见性决策等。下面是公共方法头部的注释:/***方法名称:*内容摘要:<列出主要功能、调用说明、异常说明、业务逻辑等>*@param*@return*@throws*/publicStringgetName(Stringname){returnname;}注释应与其描述的代码相近说明:在使用缩写时或之前,应对缩写进行必要的说明。避免在代码行的末尾添加注释;对代码的注释应放在其上方(需与其上面的代码用空行隔开)或右方(对单条语句的注释)相邻位置,不可放在下面。如下书写结构比较清晰//获得子系统索引subSysIndex=data.getSysIndex;//代码段1注释[代码段1]/*代码段2注释*/[代码段2]注释与所描述内容进行同样的缩进。说明:这样可使程序排版整齐,并方便注释的阅读与理解。如下注释结构比较清晰intdoSomething(){/*代码段1注释*/[代码段1]/*代码段2注释*/[代码段2]}包含在{}中代码块的结束处要加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句。说明:此时注释可以用文,方便查找对应的语句。voiddoSomething(){if(…){…while(…){…}//endofwhile(…)//指明该条while语句结束…}//endofif(…)//指明是哪条语句结束}//endofvoidmain()//指明函数的结束对分支语句(条件分支、循环语句等)必须写注释。说明:这些语句往往是程序实现某一特殊功能的关键,对于维护人员来说,良好的注释有于更好的理解程序,有时甚至优于看设计文档。书写规范基本格式源代码文件(.java)的布局顺序是:包、import语句、类。遵循统一的布局顺序来书写import语句,不同类别的import语句之间用空行分隔。说明:package语句其后可跟import语句,而且与package间隔一个空行。import包的排列顺序为java开头的包在最前面,接下来是引自外部的包,再接下来是应用程序自身的包,即import中标准的包名要在本地的包名之前,而且按照字母顺序排列。 packagecom.zte; importjava.awt.peer.CanvasPeer;//java自身的包 importjava.io.*; importcom.klg.field.*;//第三方的包 importcom.zte.ums.uep.*;//程序自身的包if、else、elseif、for、while、do等语句独占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。说明:这样可以防止书写失误,也易于阅读。if(varible1<varible2){varible1=varible2;}源程序中关系较为紧密的代码应尽可能相邻。说明:这样便于程序阅读和查找。length=10;width=5;//矩形的长与宽关系较密切,放在一起。strCaption=Test”;对齐一般禁止使用制表符,必须使用空格进行缩排。缩进为4个空格。程序的分界符‘{’紧随类名、方法名和判断条件之后,‘}’应独占一行,‘}’同时与引用它们的语句左对齐。{}之内的代码块使用缩进规则对齐。说明:这样使代码便于阅读,并且方便注释。do…while语句可以例外,while条件可与}在同一行。voidfunction(intvar){while(condition){doSomething();//与{}缩进4格}//与引用它们的模块左对齐}多维的数如果在定义时初始化,按照数的矩阵结构分行书写。int[][]number={{1,1,1},{2,4,8},{3,9,27},{4,16,64}};相关的赋值语句等号对齐。width=50;length=20;height=40;空行空格不同逻辑程序块之间要使用空行分隔。说明:空行起着分隔程序段落的作用。适当的空行可以使程序的布局更加清晰。voiddoSomething(){Connectioncon=null;//数据库连接booleanreturnParameter=false;//返回//空一行//if代码的注释if(reconsign==null){returnfalse;}一元操作符如“++”、“--”、“!”、“~”、(类型)等前后不加空格。“[]”“.”这类操作符前后不加空格。!value~value++countnumber[i]=5;box.getWidth();多元运算符和它们的操作数之间至少需要一个空格。说明:空格的多少根据上下文调整。value=oldValue;total+value;number+=2;方法名之后不要留空格。说明:方法名后紧跟左括号‘(’。‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空格。‘;’不是行结束符号时其后要留空格。例子中的凵代表空格。for(i凵=凵0;凵i凵<凵MAX_BSC_NUM;凵i++){doSomething(width,凵height);}断行长表达式(超过120列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。断行方法:1.在逗号后断行2.在操作符前断行3.在低优先级操作符处断行对齐方法:1.将新行与同一级别的先前行的表达式的起始端对齐。2.条件表达式的续行在第一个条件处对齐。3.for循环语句的续行在初始化条件语句处对齐。4.函数调用和函数声明的续行在第一个参数处对齐。5.赋值语句的续行应在赋值号处对齐。6.如果上述规则导致代码排列混乱或代码左边界少于两个缩进,可用两倍缩进替代。方法声明时,修饰符、类型与名称不允许分行书写。publicstaticdoublecalculateArea(doublewidth,doubleheight);局部变量的声明在JAVA中,局部变量可以随用随声明,也可以在成员函数的代码段之前集中声明。前者用起来比较方便,但很难控制程序的易读性,有可能声明语句和首次使用它的语句中间有一些其它代码,成员函数用到哪些变量也很难一下看出来。建议使用后者,这样程序易读性更好。无论使用哪种方式,一个人在一个项目的代码风格应该一致。坚持一个局部变量只代表一个事物。循环变量可例外。一行只声明一个变量。一个变量有且只有一个功能,不能把一个变量用于多种用途。类成员的声明顺序静态成员变量/StaticFields静态初始化块/StaticInitializers成员变量/Fields初始化块/Initializers构造器/Constructors静态成员方法/StaticMethods成员方法/Methods重载自Object的方法如toString(),hashCode()和main方法类型(内部类)/Types(InnerClasses)

注意:同等的类型,按public,protected,默认,private的顺序排列,实现同一功能的多个方法应放在一起,如果两个规则有冲突,以后一条为准。表达式与语句表达式是语句的一部分,它们是不可分割的。表达式和语句虽然看起来比较简单,但使用时隐患比较多。本章归纳了正确使用表达式和if、for、while、switch等基本语句的一些每一行应该只包括一个语句。说明:复杂的语句阅读起来难于理解,并容易隐含错误。在表达式中使用括号,使表达式的运算顺序更清晰。说明:由于将运算符的优先级与结合律熟记是比较困难的,为了防止产生歧义并提高可读性,即使不加括号时运算顺序不会改变,也应当用括号确定表达式的操作顺序。if(((iYear%4==0)&&(iYear%100!=0))||(iYear%400==0))当复合语句作为控制流程的一部分时,应该用‘{}’把所有的复合语句括起来,即使只有一句简单语句。说明:这样可以更方便地加入语句而不会由于忘掉加括号而引起的偶然性的错误。intcount;...myMethod(){if(condition){count=1;}}不可将浮点变量用“==”或“!=”与任何数字比较。说明:无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该转化成“>=”或“<=”形式。if((fResult>=-EPSINON)&&(fResult<=EPSINON))if(fResult==0.0)//隐含错误的比较其中EPSINON是允许的误差(即精度)。在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。说明:避免漏掉break语句造成程序错误。有时编程逻辑需要,可以几个case语句共用一个语句块,对这种情况必须加注释进行说明。switch(iMessage){caseSPAN_ON:[处理语句]break;caseSPAN_OFF:[处理语句]break;default:[处理语句]break;}避免在“if”条件中赋值。说明:Java编译器对boolean型变量在if条件语句中的赋值时合法的,对整型变量的赋值是不合法的。带值的返回语句不需要用括号‘()’。说明:除非有时不得不用括号使返回结构更加明显。return;returnmyDisk.size();return(size?size:defaultSize);//用括号使返回结构更加明显。循环嵌套次数不大于3次。禁止在循环语句对数据进行操作(CRUD)。dowhile语句和while语句仅使用一个条件。说明:保持程序简洁。如果需要判断的条件较多,建议用临时布尔变量先计算是否满足条件。booleanbCondition;do{……..bCondition=((tAp[iPortNo].bStateAcpActivity!=PASSIVE)||(tAp[iPortNo].bStateLacpActivity!=PASSIVE))&&(abLacpEnabled[iPortNo])&&(abPortEenabled[iPortNo])}while(bCondition);在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。编程惯例常量位于for循环中作为计数器值的数字常量,除了-1,0和1之外,不应被直接写入代码。变量赋值避免在一个语句中给多个变量赋相同的值,它很难读懂。例如: fooBar.fChar=barFoo.lchar='c';//AVOID!不要将赋值运算符用在容易与相等关系运算符混淆的地方。例如: if(c++=d++){//AVOID!(Javadisallows) ... }应该写成: if((c++=d++)!=0){ ... } 不要使用内嵌(embedded)赋值运算符试图提高运行时的

温馨提示

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

评论

0/150

提交评论