培训系统代码_第1页
培训系统代码_第2页
培训系统代码_第3页
培训系统代码_第4页
培训系统代码_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

1、1. 规范正文1.1. SP1排版规则1.1.1. SP1.1文件结构Java文件按如下顺序组织各元素:表1 文件结构表1.1.2. SP1.2缩进使用4个连续空格,不要使用tab键缩进。1.1.3. SP1.3页宽页宽建议设置为80个字符, 源代码不要超过这个宽度,以免导致无法完整显示,超长的语句应在一个逗号或者一个操作符后折行; 一条语句折行后, 应缩进4个空格。1.1.4. SP1.4操作符操作符左右各用一个空格分隔。【示例】:1.1.5. SP1.5换行类定义或方法定义过长需要换行书写,【示例】:public class CounterSet extends Observable im

2、plements Cloneableprivate PortletSet getPortlets( Portlets portlets,RunData rundata,application, applicationsOnly )/Bodya = b; if (a 0);序号元素说明1排版规则编码规范中排版规则说明2源代码编写规则包括注释规则、命名规则3单元测试规则单元测试需要遵循此部分规则4开发实践规则1.1.6. SP1.6main 方法位置main 方法:main(String) 方法写在类的底部。1.1.7. SP1.7类的位置类编写在类的底部,不要编写在方法的。1.1.8. SP1.

3、8导入包规则删除未类,避免使用以“.*”结尾的,顺序如下:1)jdk标准包(例如:import java.io.IOException等)2)第的包(例如:import.dom4j.Node等)3)项目的公共包1.1.9. SP1.9代码块书写风格程序中采用下面的书写方式:【示例】: if (true)/bodyswitch (key) case :1break; default:break; 循环语句样式for(i = 0; i+; i 10)/bodydo/body(while(condition)if (true) /body ,即不允许 和代码体处于同一行。1.2. SP2源代码编写规

4、则1.2.1. SP2.1注释规则1.2.1.1. SP2.1.1源文件注释所有的程序文件应该以注释开始,在注释中列出系统名称,模块名称,版本信息,更改日期,以及等。【示例】:对程序有修改时,必须在源文件中添加修改历史和修改原因,同时,在提交到版本控制工具中时要写明注释。注:版本修订信息可根据实际情况来选择是否添加,不做硬性要求。1.2.1.2. SP2.1.2通用注释规则1)注释内容能够被jdk的 javadoc工具自动提取(不包括方法体内注释)。2)块注释的开头以第一个*号对齐。【示例】:1.2.1.3. SP2.1.3类注释格式:块注释,多行【示例】:/*第一行*第二行*/*第一行*第二

5、行*/public sic String content = null;/*/系统名称:/模块名称:/版本信息:/版本日期作者备注/1.02009/02/20新建/1.12009/02/21修改某方法/*while(condition)/body位置:类语句前内容:描写类功能描述,主要算法逻辑、类的应用场景,各部分之间的关系、该类与其它类的关系等,类调用示例。其他:注释中的标记种类没有强制要求【示例】:1.2.1.4. SP2.1.4类变量注释格式:块注释,多行【示例】:位置:变量语句前内容:变量的含义要求:1)public变量的格式和内容,必须按此规则,private的变量不做要求2)pub

6、lic 注释内容,可以通过Javadoc命令生成帮助文档【示例】:1.2.1.5. SP2.1.5类成员变量注释/*待拆分字符串*/public sic String content = null;/*第一行*第二行*/*概述:*OSGi规范中Bundle的激活器*功能:*dm本身既是一个Bundle,又是其他基于这种技术的动态模块的引擎。*see Deployer*see WebDelegate 实例化途径:* 该类由OSGi框架实例化并调用相应的方法*/public final clasivator implements BundleActivator 同类变量注释规则。1.2.1.6.

7、SP2.1.6类方法注释格式:块注释,多行【示例】:位置:在方法前内容:描述输入、输出及返回值,其中返回值说明要详细,包括返回的类型,方法执行成功返回类型,方法执行失败返回类型,如果返回值是集合,还明集合中每个元素类型。要求:1)public方法的格式和内容,必须遵从此规则,private的方法不做要求。2)public 注释内容,可以通过Javadoc命令生成帮助文档。【示例】:1.2.1.7. SP2.1.7类成员方法注释同类方法注释。1.2.1.8. SP2.1.8方法注释范围:关键变量和语句需要加注释。格式:块注释,或行注释。依实际情况确定。位置:变量或者语句的上面。【示例】:注释1:

8、/*第一行*第二行*/*查找SilverStream安装路径*pararam1 参数1*pararam2 参数2*return String 文件路径例如 c:SilverStream20*/public sic String searchInstallPath(String param1, String param2)/*第一行*第二行*/注释2 :1.2.1.9. SP2.1.9注释行量要求代码注释量不得低于文件总行数的30%。非代码注释量不得低于文件总行数的20%。1.2.2. SP2.2命名规则1.2.2.1. SP2.2.1package名规则:名字由一个小写单词组成,参见Java

9、specification 规范要求。定义:包名:=com.sgcc.项目英文缩写/cbb.组件英文缩写.子包名com:= 常量,表示商业。sgcc:= 常量,表示国家电网公司。项目英文缩写 := 在项目立项书中定义的项目英文缩写名称。组件英文缩写 := 在设计文档中定义的组件英文缩写名称。子包名由项目组自行定义。注意:如果是公共组件开发,需要写组件英文缩写。【示例】:1.2.2.2. SP2.2.2class 命名规则:首字母必须大写、必须用名词,参见Java specification规范要求。【示例】:1.2.2.3. SP2.2.3erface 命名规则:接口以I开头,后面写接口名,如

10、:【示例】:1.2.2.4. SP2.2.4变量命名【示例】:规则:变量名称是代表业务英文的拼写或缩写,首字母一定要用小写。其后单词的首字母大写。基本类型变量格式:数据类型首字母 + 代表业务英文的拼写或缩写。publicerface IPortletpublic class FileInputStreammon/待拆分字符串private String content = null;private String content = null;对象类型变量格式:对象名称首字母小写复合型变量格式:对象名称 + 集合类型缩写1.2.2.5. SP2.2.4常量命名规则:程序的常量名应该都使用大写字

11、母,并且该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。【示例】:1.2.2.6. SP2.2.5方法命名规则:方法应以动词开头,首写字母小写。增加:save,删除:delete,修改:update,查询:find/query。【示例】:1.2.2.7. SP2.2.6数据库包命名规则:PKG_开头。【示例】:1.2.2.8. SP2.2.7数据库规则:PRC_开头。【示例】:过程命名1.2.2.9. SP2.2.8数据库函数命名规则:FNC_开头。【示例】:1.2.2.10.SP2.2.9数据库触发器命名规则:TRG_开头,后续名称要求能清晰表明触发点、触为及触

12、名,触发点分为表操作前(BEFORE)和表操作后(AFTER),分别用字母B、A表示;触为分为INSERT、UPDATE、DELETE,分别用字母I、U、D表示。【示例】:1.2.2.11.SP2.2.10数据库变量&游标命名变量名符合v_X格式,其中是与变量意义相关的意义名称;TRG_BIUD_PM_PRJECT_INFOFNC_QUERY_PRJ_COUNTPRC_SAVE_PRJPKG_PROJECTsaveUserInfo();public sic final String FUNC_ROLE_GROUP_ID = “0”;private String sMaxValue = null

13、; iTotal = 0;ListVoList = null;MapPoMap = null; ObjectObj = null;过程、函数传入参数变量量意义相关的意义名称;名符合p_X格式,其中是与参数变游标变量名称;变量名称长度名符合cur_X格式,其中是与游标变量意义相关的意义过30个字符,不能采用关键字,以字母开头。1.2.2.12.SP2.2.11数据库表命名按专业缩写开头,项目管理PM_,安全管理SM_,质量管理QM_,技术管理TM_,造价管理CM_,系统通用T_SYS_。1.3.SP3单元测试规则1.3.1. SP3.1原则1.3.1.1. SP3.1.1基本要求每个工程提供一个

14、测试所有TestCase的测试类。程序运行工程的这个测试类时需要保证零个失败、零个错误。图1 测试类运行结果图1.3.1.2. SP3.1.2测试覆盖率每个工程需要对代码(包括重要的算法、处理逻辑、大量被调用的接口等)全面测试覆盖其有效性。虑到工作量和产出性价比,该规范建议不用单独地追求测试覆盖率,最重要的要求是有效性,对测试覆盖率不做硬性要求。1.3.2. SP3.2命名规则1.3.2.1.SP3.2.1testclass 命名规则:测试类名是在业务、接口、类加Test前缀。【示例】:1.3.2.2.SP3.2.2 testcase 命名规则:测试用例名规则是test+用例操作_状态。【示例

15、】:1.3.2.3.SP3.2.3 testpackage 命名规则:测试程序包名规则是在包名前加Test前缀。【示例】:mon 如montestSetMobiind如 testSetMobiind_NoSkyidFileInputStream如 TestFileInputStream1.3.2.4.SP3.2.4变量命名同 源代码编码变量命名规则。1.3.2.5.SP3.2.5常量命名同源代码编码常量命名规则。1.4. SP4开发实践规则1.4.1. SP4.1资源处理规则如果使用有限资源(如数据库连接、文件流等)的实例作为方法参数,方法中不要关闭这些资源实例;如果方法中创建了资源实例,必须

16、在本方法中关闭,关闭位置放在finally子句里。1.4.2. SP4.2异常处理规则1.4.2.1. SP4.2.1抛弃/异常异常捕获后,不处理,如下:1.4.2.2. SP4.2.2截断异常堆栈异常捕获后,对异常转译,原始异常的堆栈不抛出,如下:1.4.2.3. SP4.2.3异常转译异常捕获后,对异常转译,原始异常按异常链的方式抛出,如下:try catch NullPoerException e/ 捕获下层方法抛出的异常/ 将异常信息日志log.debug(“object is null.”);/ 将捕获后的异常,转译为新的异常,抛出。try/nothingcatch NullPoer

17、Exception e/ 捕获下层方法抛出的异常/ 将异常信息日志log.debug(“object is null.”);/ 将捕获后的异常,转译为新的异常,抛出。throw new IllegalArgumentException(“参数名为type的值为空。” )trycatch XXException e/nothing1.4.3. SP4.3重写/调用的方法1) exit()exit() 除了在main 中可以被调用外,其他的地方调用。2) System.gc()收集方法,在程序中调用。3) Object.无效。()错误!超对象实例方法,重写或调用。1.4.4. SP4.4数据库连接

18、的获得使用JNDI方式或其他的数据库连接池的方式,使用JDBC的方式:1.4.5. SP4.5代码性能1)在循环体中并实例化变量在循环体中并实例化临时变量将会增加内存消耗,增加回收次数;尤其的大对象,严格在循环并实例化。例如:应该在循环体外变量,在循环体内实例化变量,如下:import java.util.Vector; public class LOOP void method (Vector v) Object o;for (i = 0;i v.size();i+) o = v.elemen(i);import java.util.Vector; public class LOOP voi

19、d method (Vector v) for (i = 0;i v.size();i+) Object o = new Object(); / 不建议 o = v.elemen(i);假设数据源名称为:jdbc/myoracleContext initContext = new InitialContext();Context envContext= (Context)initContext.lookup(p/env); DataSource ds = (DataSource)envContext.lookup(jdbc/myoracle); Connection conn = ds.get

20、Connection();throw new IllegalArgumentException(“参数名为type的值为空。” , e )2)在循环中调用synchronized(同步)方法方法的同步需要消耗相当大的资源,不要再循环中调用同步方法:建议在同步块中,调用非同步方法。3) 建议多使用局部变量调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如实例变量等,都在堆(Heap)中创建,速度较慢。4) 建议使用System.arraycopy ()代替通过来循环数组System.arraycopy () 要比通过循环来数组快的多。例如:publi

21、c class IRBvoid method () array1 = new100;for (i = 0; i array1.length; i+) import java.util.Vector; public class SYN public void method (Object o) private void test () synchronized/在一个同步块中执行非同步方法for (i = 0; i vector.size(); i+) method (vector.elemen(i);private Vector vector = new Vector (5, 5);impor

22、t java.util.Vector; public class SYN public synchronized void method (Object o) private void test () for (i = 0; i vector.size(); i+) method (vector.elemen(i);/ violationprivate Vector vector = new Vector (5, 5);5)在循环中使用Try/Catch语句,应把Try/Catch放在循环最外层把try/catch块放入循环体内,会极大的影响性能,如果编译JIT被关闭或者你所使用的是一个不带J

23、IT的JVM,性能会将下降很多。6) 异常只能用于错误处理,用来控制程序流程,影响性能抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地方法,fillInStackTrace()方法检查栈,收集调用跟踪信息。7) 建议使用StringBuffer或StringBuilder实现字符串连接“+”建议使用StringBuffer或StringBuilder代替“+”连接符,实现字符串连接操作。StringBuffer为线程安全的。单线程环境下, StringBuilder性能高于StringBuffer。8) 建议使用StringBu

24、ffer对象时,设置初始大小StringBuffer机制使用数组实现。StringBuffer的默认容量为16,当StringBuffer的容量达到最大容量时,将自身容量增加到当前的2倍+2,也就是2*n+2;JVM创建一个新的对象数组,然后旧的对象数组到新数组中。9) Vector对象使用方法Vector与StringBuffer类似,每次扩展容量时,所有现有元素都要赋值到新的空间中。Vector的默认能力为10个元素,扩容加倍。vector.add(index,obj) 这个方法可以将元素obj到index位置,但index以及之后的元素依次都要向下移动一个位置(将其索引加 1)。除非必要

25、,否则对性能不利。同样规则适用于remove(index)方法,移除此向量中指定位置的元素。将所有后续元素将其索引减 1)。返回此向量中移除的元素。所以删除vector最后一个元素要比删除第1个元素开销低很多。删除所有元素最好用removeAllElements() 方法。如果要删除vector 里的一个元素可以使用array1 i = i; array2 = new100; System.arraycopy(array1, 0, array2, 0, 100);vector.remove(obj);而不必自己检索元素位置,再删除,如index =indexOf(obj);vector.rem

26、ove(index)。10)不建议在循环中使用表达式在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。建议改为:11)单线程使用的集合类型单线程下使用 HashMap, ArrayList,不HashTable和Vector;后者是线程安全的,性能比前者低。12)array(数组)和ArrayList的使用array 数组效率最高,但容量固定,无法动态改变,ArrayList容量可以动态增长,但牺牲了效率。13)输入和输出(I/O)尽可能的多使用缓存,注意使用缓存和不使用缓冲,在读写硬盘文件时,性能差别很大。但如果要经常对

27、缓存进行刷新(flush),则建议不要使用缓存。14)对象序列化和transient类型当序列化一个类或对象时,对于那些原子类型(atomic)或可以重建的原素要表识为transient类型。这样就不用每一次都进行序列化。尤其是序列化的对象需要在网络上传输的情况。15)数据字典的用法class CEL_fixed void method (Vector vector) size = vector.size ()for (i = 0; i size; i+); / .import java.util.Vector; class CEL void method (Vector vector) for (i = 0; i vector.size (); i+)/ Violation; / .

温馨提示

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

评论

0/150

提交评论