1、软件开发代码规范(C)(仅通普信息技术股份有限公司供内部使用)拟制:杨超日期:-3-10审核:夏峰日期:-3-10核准:冯敬刚日期:-3-17签发:韩殿成日期:-3-21文档版本:V1.11黑龙江通普信息技术股份有限公司版本历史日期版本阐明作者目录第一章 代码开发规范及其指南11.1 目11.2 程序内命名规范11.3 文献命名规范21.4 Java 文献样式21.5 代码编写格式6第二章 程序编写规范办法82.1 权限修饰82.2 其她规范82.3 编程指南10第三章 其她规定12第一章 代码开发规范及其指南1.1 目定义这个规范目是让项目中所有文档都看起来像一种人写,增长可读性,减少项目组
2、中由于换人而带来损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好可读性) 1.2 程序内命名规范l Package 命名 :Package 名字应当都是由一种小写单词构成。 l Class 命名 :Class 名字必要由大写字母开头而其她字母都小写单词构成 l Class 变量命名 :变量名字必要用一种小写字母开头。背面单词用大写字母开头。 l Static Final 变量命名 :Static Final 变量名字应当都大写,并且指出完整含义。 l 参数命名 :参数名字必要和变量命名规范一致。 l 数组命名 :数组应当总是用下面方式来命名: byte buffer;而不是 byt
3、e buffer;l 办法参数 :使用故意义参数命名,如果也许话,使用和要赋值字段同样名字: SetCounter(int size)this.size = size;1.3 文献命名规范l 文献名由英文单词构成,每个单词首字母大写,不要超过4个单词,如ShipOrder.jsp。l Java文献文献名要与程序中public类名相似。l Servet文献要以Servlet做为结尾,如AddCompanyServlet.javal 业务解决组件JavaBean要以Bean为结尾,如ProcessBean.java1.4 Java 文献样式 所有 Java(*.java) 文献都必要遵守如下样式规
4、则 l 头部版权信息 版权信息必要在 java 文献开头,例如: /* Copyright Sun Microsystems,Inc. All rights reserved.*/其她不需要出当前 javadoc 信息也可以包括在这里。l Package/Imports package 行要在 import 行之前,import 中原则包名要在本地包名之前,并且按照字母顺序排列。如果 import 行中包括了同一种包中不同子目录,则应当用 * 来解决。 package .stats;import java.io.*;import java.util.Observable;import hotl
5、ava.util.Application;这里 java.io.* 使用来代替InputStream and OutputStream 。l Class 接下来是类注释,普通是用来解释类有关信息,涉及标题、描述、。 /* * Title:Example * Description:AuditApplicationExample * Copyright:Copyright (c) 200x * Company:xxxxx * author xxxxxx * version 1.0 */接下来是类定义,包括了在不同行 extends 和 implements public class Counte
6、rSet extends Observable implements Cloneablel Class Fields 接下来是类成员变量: /* Packet counters*/protected int packets;public 成员变量必要生成文档(JavaDoc)。protected、private和 package 定义成员变量如果名字含义明确话,可以没有注释。l 存取办法 接下来是类变量存取办法。它只是简朴用来将类变量赋值获取值话,可以简朴写在一行上。 /* Get the counters* return an array containing the statistical
7、 data. This array has been* freshly allocated and can be modified by the caller.*/public int getPackets() return copyArray(packets,offset);public int getBytes() return copyArray(bytes,offset);public int getPackets() return packets;public void setPackets(int packets) this.packets = packets;其他办法不要写在一行
8、上l 构造函数 接下来是构造函数,它应当用递增方式写(例如:参数多写在背面)。 访问类型 (public,private 等.) 和 任何 static,final 或 synchronized 应当在一行中。 Public CounterSet (int size)this.size = size;l 克隆办法 如果这个类是可以被克隆,那么下一步就是 clone 办法: public Object clone() try CounterSet obj = (CounterSet)super.clone();obj.packets = (int)packets.clone();obj.size
9、 = size;return obj;catch(CloneNotSupportedException e) throw new InternalError(Unexpected CloneNotSUpportedException: + e.getMessage();l 类办法 下面开始写类办法: /* Set the packet counters* (such as when restoring from a database)*/protected finalvoid setArray(int r1,int r2,int r3,int r4)throws IllegalArgument
10、Exception/ Ensure the arrays are of equal size/if (r1.length != r2.length | r1.length != r3.length | r1.length != r4.length)throw new IllegalArgumentException(Arrays must be of the same size);System.arraycopy(r1,0,r3,0,r1.length);System.arraycopy(r2,0,r4,0,r1.length);l toString 办法 无论如何,每一种类都应当定义 toS
11、tring 办法: publicString toString() String retval = CounterSet:;for (int i = 0;i 0) i + ;/ 错误, 和 在同一行 if (i0) i + ;/ 对的, 单独作为一行 语句永远单独作为一行.如果 语句应当缩进到与其相相应 那一行相对齐位置。l 括号 左括号和后一种字符之间不应当浮现空格,同样,右括号和前一种字符之间也不应当浮现空格. 下面例子阐明括号和空格错误及对的使用:CallProc( AParameter );/ 错误 CallProc(AParameter);/ 对的 不要在语句中使用无意义括号. 括号
12、只应当为达到某种目而出当前源代码中。下面例子阐明错误和对的用法:if (I) = 42) / 错误 - 括号毫无意义 if (I = 42) or (J = 42) then / 对的 - 确需要括号 l import对于import语句,如果某一种包中引用类不超过三个(涉及三个),不容许用import xxx.*;格式。l 变量 定义及办法返回值不容许使用全包名,如java.lang.String,除非在不同包中有相似名字类,必要用全名来区别。对于类中属性存取要用办法(getXXX/setXXX,boolean值用isXXX/setXXX),不要直接引用。第二章 程序编写规范办法 2.1 权
13、限修饰 Java中权限修饰符有三个:public,private,protected,此外一种是不写这三种任何一种,称为(default).1) 对于外部类,只能用public或(default),并且一种文献中最多只能有一种public类。但是内部类这四种都可以使用。2) 如果对某些数据或办法只容许其所在类使用,用private修饰。3) 如果对某些数据或办法容许本类或同包类使用,用(default),即不写任何修饰符。4) 如果对某些数据或办法容许本类,同包类,或非同包子类使用,用protected.如果对某些数据或办法容许任何类使用,用public修饰。2.2 其她规范l exit()
14、exit 除了在 main 中可以被调用外,其她地方不应当调用。由于这样做不给任何代码代码机会来截获退出。一种类似后台服务程序不应当由于某一种库模块决定了要退出就退出。 l 异常 核心操作如涉及到数据库操作和各种核心解决环节时应当采用try,catch语句,以便于捕获异常(各类Exception)和异常解决。l 垃圾收集 JAVA使用成熟后台垃圾收集技术来代替引用计数。但是这样会导致一种问题:必要在使用完对象实例后来进行清场工作。除非输出流一出作用域就关闭,非引用计数程序语言,例如JAVA,是不能自动完毕变量清场工作。必要象下面同样写: FileOutputStream fos = new F
15、ileOutputStream(projectFile);project.save(fos,IDE Project File);fos.close();l Clone 下面是一种有用办法: implements CloneablepublicObject clone()try ThisClass obj = (ThisClass)super.clone();obj.field1 = (int)field1.clone();obj.field2 = field2;return obj; catch(CloneNotSupportedException e) throw new InternalE
16、rror(Unexpected CloneNotSUpportedException: + e.getMessage();l final 类 绝对不要由于性能因素将类定义为 final (除非程序框架规定) 如果一种类还没有准备好被继承,最佳在类文档中注明,而不要将她定义为 final 。这是由于没有人可以保证会不会由于什么因素需要继承她。 访问类成员变量 大某些类成员变量应当定义为 protected 来防止继承类使用她们。 注意,要用int packets,而不是int packets,后一种永远也不要用。 public void setPackets(int packets) this.
17、packets = packets;CounterSet(int size)this.size = size;2.3 编程指南 1、 byte 数组转换到 characters 为了将 byte 数组转换到 characters,可以这样做: Hello world!.getBytes();2、 Utility 类 Utility 类(仅仅提供办法类)应当被声明为抽象来防止被继承或被初始化。 3、 初始化 下面代码是一种较好初始化数组办法: objectArguments = new Object arguments ;4、 枚举类型 JAVA 对枚举支持不好,但是下面代码是一种很有用模板:
18、class Colour public static final Colour BLACK = new Colour(0,0,0);public static final Colour RED = new Colour(0xFF,0,0);public static final Colour GREEN = new Colour(0,0xFF,0);public static final Colour BLUE = new Colour(0,0,0xFF);public static final Colour WHITE = new Colour(0xFF,0xFF,0xFF);这种技术实现了
19、RED,GREEN,BLUE 等可以象其她语言枚举类型同样使用常量。 她们可以用 = 操作符来比较。 但是这样使用有一种缺陷:如果一种顾客用这样办法来创立颜色 BLACK new Colour(0,0,0) 那么这就是此外一种对象,=操作符就会产生错误。她 equal() 办法依然有效。由于这个因素,这个技术缺陷最佳注明在文档中,或者只在自己包中使用。 l 性能 1、 在写代码时候,从头至尾都应当考虑性能问题,要注意代码效率。 2、 不必要对象构造 3、 不要在循环中构造和释放对象 4、 使用 StringBuffer 对象 在解决 String 时候要尽量使用 StringBuffer 类,
20、StringBuffer 类是构成 String 类基本。String 类将 StringBuffer 类封装了起来,(以耗费更多时间为代价)为开发人员提供了一种安全接口。当咱们在构造字符串时候,咱们应当用 StringBuffer 来实现大某些工作,当工作完毕后将 StringBuffer 对象再转换为需要 String 对象。例如:如果有一种字符串必要不断地在其后添加许多字符来完毕构造,那么咱们应当使用 StringBuffer 对象和她 append() 办法。如果咱们用 String 对象代替 StringBuffer 对象话,会耗费许多不必要创立和释放对象 CPU 时间。 5、 避免
21、太多使用 synchronized 核心字 避免不必要使用核心字 synchronized,应当在必要时候再使用她,这是一种避免死锁好办法。 6、 可移植性 为了保证整个系统可移植性,尽量避免使用synchronized 核心字7、 PrintStream PrintStream 已经被不赞成(deprecated)使用,用 PrintWrite 来代替她。 第三章 其她规定l 在controll层或该层之后关闭数据库连接,不能在页面里关闭l 不能用select * 查询语句l 数据提取工作不在页面内完毕l 若是中文参数值,尽量用post方式,不用url方式l 在将自己代码提交到版本控制服务器之前一定要做好单元测试,不能提交具有单元测试就应当解决bug代码l 异常解决要得当,不容许任何异常都是Exception,要尽量解决可以预料到异常。l 在使用了jdbc事务时,解决结束后,一定要将事务提交如: Cmit(); 如果中间浮现了异常,要将事务回滚后再关闭连接。