软件编程规范—Java1.1.1目录目录.........................................................I前言.........................................................11基本原则.................................................22文件结构.................................................32.1基本格式......................................32.2对齐..............................................52.3空行空格......................................62.4断行..............................................83注释.......................................................114命名规则...............................................175声明.......................................................226表达式与语句.......................................247类和接口...............................................28附录.........................................................31附录A编程模版............................311.1.2前言软件编程规范的目的是为了统一公司软件编程风格,提高软件源程序的可读性、可靠性和可重用性,提高软件源程序的质量和可维护性,减少软件维护成本,最终提高软件产品生产力。本规范是针对JAVA语言的编程规则。本规范适用于公司所有产品的软件源程序,同时考虑到不同产品和项目的实际开发特性,本规范分成规则性和建议性两种:对于规则性规范,要求所有软件开发人员严格执行;对于建议性规范,各项目编程人员可以根据实际情况选择执行。本规范的示例都以JAVA语言描述。本规范的内容包括:基本原则、文件结构、注释、命名规则、声明、表达式与语句、类和接口等。规范最后给出了标准模板供软件人员参考。本规范自生效日期起,对以后新编写的和修改的代码有约束力。对以前的代码不要求进行修改。对于由开发工具自动生成的代码可以不约束。对本规范中所使用的术语解释如下:原则:编程时应该坚持的指导思想。规则:编程时必须遵守的约定。建议:编程时必须加以考虑的约定。说明:对此规则或建议的必要的解释。正例:对此规则或建议给出的正确例子。反例:对此规则或建议给出的反面例子。2011年1月8日1.1.31基本原则说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。说明:编程时以公司的规范为准,公司的规范没有规定的内容参考上面的标准。说明:编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,其次考虑程序的效率和资源占用。说明:尽量选择可借用的代码,对其修改优化以达到自身要求。说明:事实上,我们无法做到完全消除错误,但通过不懈的努力,可以减少同样的错误出现的次数。【原则1-1】首先是为人编写程序,其次才是计算机。【原则1-2】保持代码的简明清晰,避免过分的编程技巧。【原则1-3】所有的代码尽量遵循SUN的《CodeConventionsfortheJavaTMProgrammingLanguage》标准(参见:)。【原则1-4】编程时首先达到正确性,其次考虑效率。【原则1-5】保持一致性,尽可能多的使用相同的规则。【原则1-6】尽可能复用、修正原有的代码。【原则1-7】尽量减少同样的错误出现的次数。1.1.42文件结构程序布局的目的是显示出程序良好的逻辑结构,提高程序的准确性、连续性、可读性、可维护性。更重要的是,统一的程序布局和编程风格,有助于提高整个项目的开发质量,提高开发效率,降低开发成本。同时,对于普通程序员来说,养成良好的编程习惯有助于提高自己的编程水平,提高编程效率。因此,统一的、良好的程序布局和编程风格不仅仅是个人主观美学上的或是形式上的问题,而且涉及到产品质量,涉及到个人编程能力的提高,必须引起大家重视。1.1.4.12.1基本格式正例:packagecom.longtop;importjava.awt.peer.CanvasPeer;importjava.io.*;importcom.longtop.ums.uep.*;/***p文件名称:题目名称/p*p文件描述:本类描述/p*p版权所有:版权所有(C)2011/p*p公司:东南融通系统工程(北京)有限公司/p*p内容摘要://简要描述本文件的内容,包括主要模块、函数及其功能的说明/p*p其他说明://其它内容的说明/p*p完成日期://输入完成日期,例:2011年2月25日/p*p修改记录1://修改历史记录,包括修改日期、修改者及修改内容/p*pre*修改日期:*版本号:*修改人:*修改内容:*/pre*p修改记录2:…/p*@version1.0*@author作者姓名*/【规则2-1-1】源代码文件(.java)的布局顺序是:包、import语句、注释、类。publicclassClassName{}说明:package语句其后可跟import语句,而且与package间隔一个空行。import包的排列顺序为java开头的包在最前面,接下来是引自外部的包,再接下来是应用程序自身的包,即import中标准的包名要在本地的包名之前,而且按照字母顺序排列。正例:packagecom.zte;importjava.awt.peer.CanvasPeer;//java自身的包importjava.io.*;importcom.klg.field.*;//第三方的包importcom.zte.ums.uep.*;//程序自身的包说明:包括空格在内不超过120列。说明:这样可以防止书写失误,也易于阅读。正例:if(varible1varible2){varible1=varible2;}反例:下面的代码执行语句紧跟if的条件之后,而且没有加{},违反规则。if(varible1varible2)varible1=varible2;【规则2-1-2】遵循统一的布局顺序来书写import语句,不同类别的import语句之间用空行分隔。【规则2-1-3】程序中一行的代码和注释不能超过120列。【规则2-1-4】if、else、elseif、for、while、do等语句独占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{}。〖建议2-1-1〗源程序中关系较为紧密的代码应尽可能相邻。说明:这样便于程序阅读和查找。正例:length=10;width=5;//矩形的长与宽关系较密切,放在一起。strCaption=“Test”;反例:length=10;strCaption=“Test”;width=5;1.1.4.22.2对齐说明:对于利用JBuilder等编程工具的,可以设置TAB键为4个空格代替。消除不同编辑器对制表符处理的差异。说明:这样使代码便于阅读,并且方便注释。do…while语句可以例外,while条件可与}在同一行。正例:voidfunction(intvar){while(condition){doSomething();//与{}缩进4格}//与引用它们的模块左对齐}反例:voidfunction(intvar){while(condition){doSomething();}}【规则2-2-1】一般禁止使用制表符,必须使用空格进行缩排。缩进为4个空格。【规则2-2-2】程序的分界符‘{’和‘}’应独占一行,‘}’同时与引用它们的语句左对齐。{}之内的代码块使用缩进规则对齐。【规则2-2-3】多维的数组如果在定义时初始化,按照数组的矩阵结构分行书写。正例:int[][]number={{1,1,1},{2,4,8},{3,9,27},{4,16,64}};正例:width=50;length=20;height=40;1.1.4.32.3空行空格说明:空行起着分隔程序段落的作用。适当的空行可以使程序的布局更加清晰。正例:voiddoSomething(){//[doSomething实现代码]}//空一行voiddoOtherThing(){[doOtherThing实现代码]}反例:voiddoSomething(){[doSomething实现代码]}voiddoOtherThing(){[doOtherThing实现代码]}//两个函数的实现是两个逻辑程序块,应该用空行加以分隔。【规则2-2-4】相关的赋值语句等号对齐。【规则2-3-1】不同逻辑程序块之间要使用空行分隔。正例:!value~value++countnumber[i]=5;box.getWidth();说明:空格的多少根据上下文调整。正例:value=oldValue;total+valuenumber+=2;说明:方法名后紧跟左括号‘(’。正例:例子中的凵代表空格。for(i凵=凵0;凵i凵凵MAX_BSC_NUM;凵i++){doSomething(width,凵height);}正例:/*注释内容*///注释内容反例:/*注释内容*/【规则2-3-2】一元操作符如“++”、“--”、“!”、“~”、(类型)等前后不加空格。“[]”“.”这类操作符前后不加空格。【规则2-3-3】多元运算符和它们的操作数之间至少需要一个空格。【规则2-3-4】方法名之后不要留空格。【规则2-3-5】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空格。‘;’不是行结束符号时其后要留空格。【规则2-3-6】注释符与注释内容之间要用一个空格进行分隔。//注释内容1.1.4.42.4断行说明:断行方法:1.在逗号后断行2.在操作符前断行3.较高级别断行优于较低级别的断行对齐方法:1.将新行与同一级别的先前行的表达式的起始端对齐。2.条件表达式的续行在第一个条件处对齐。3.for循环语句的续行在初始化条件语句处对齐。4.函数调用和函数声明的续行在第一个参数处对齐。5.赋值语句的续行应在赋值号处对齐。6.如果上述规则导致代码排列混乱或代码左边界少于两个缩进,可用两倍缩进替代。下面是一些断行方法调用的示例:正例:someMethod(longExpression1,longExpression2,longExpression3,longExpression4,longExpression5);var=someMethod1(longExpression1,someMethod2(longExpression2,longExpression3));下面是两个断行算术表达式例子,第一个是优选方法,因为断行出现在括号表达式之外,属于较高级别的断行。正例:longName1=longName2*(longName3+longName4-longName5)+4*longname6;//允许的断行方法反例:longName1=longName2*(longN