




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA编码规范vl.O目录1. 关于32. 项目结构32.1 命名空间32.2 源文件32.3 文件目录存放33. 命名约定44. 排版55. Java文件格式66. 注释规范67. 代码编译88. 性能89. 测试及维护910. 异常911. 编程技巧101) )使用StringBuffer对象102) 避免太多的使用synchronized关键字103) 避免使用java.util.Vector类104) )面向接口编程105) 避免使用索引来调用数据库中间层组件返回的结果集116) 对于自己创建的每一个类,都考虑置入一个main()117) 应将方法设计成简要的、功能性单元118) )
2、设计一个类时,请设身处地为客户程序员考虑一下119) 使类尽可能短小精悍,而且只解决一个特定的问题。1210) 采用内部类1211) )采用注释1212) 避免使用"魔术数字"1213) 接口和抽象类的使用1214) )日志调试1312. JSP编码规范1313. 日志框架1414. 事务处理161. 关于本文档以JAVA编程语言为基础,提供编码规范的指导,以统一开发人员的书写标准,提高代码的可读性。代码体系、接口规约、命名规则等,这是项目小组今后共同作战的基础,有了编码规范和程序模块之间和项目成员彼此之间的接口规则、方式方法,大家就有了共同的工作语言、共同的工作平台,使整
3、个软件开发工作可以协调有序地进行。2. 项目结构2.1 命名空间每个命名空间对应一个目录。采用完整的英文描述符,应该都是由小写字母组成。对于全局,将你的Internet域名反转并接上包名如java.awt,com.ambysoft.www.persistenee。全局命名空间下的其它则按照功能进行划分,每个功能包下则按照放置的不同文件性质进行设置。2.2 源文件以类名作为文件名。一个文件只应该有一个命名空间,避免将多个类或命名空间放在同一个文件里面:一个文件除去IDE产生的代码后最好不要超过500行的代码,一个方法的代码长度最好不要超过25行,超出后应考虑拆分代码或重构以降低耦合;每行代码不要
4、超过80个字符;避免方法中有超过5个参数的情况。如果超过了,则应将参数封装为类或集合类型进行传递。2.3 文件目录存放JSP存放目录按子系统存放,同一子系统中的JSP文件不再分设单独的目录。图片存放目录为”/images”,JS文件存放目录为:专用的JS文件和jsp文件在同一目录下,公用的放在”/js”下;所有的样式表都存放在”/css”下;子系统目录采用完整的英文描述说明,第一个单词的首字母小写,其他单词首字母大写3. 命名约定命名方式使用匈牙利表示法,命名时应始终采用完整的英文描述符,一般应采用小写字母。命名规则1 )包的命名包的命名一般都有小写字母组成。如packagecom.util2
5、 )类的命名类的名字必须由大写字母开头而其他字母都小写的单词组成,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。如PublicclassUserService3)类的变量命名变量的名字必须由一个小写字母开头,后面的单词用大写字母开头。如userName4)静态变量的命名静态变量的名字应该都大写,并且指出完整含义。如publicstaticfinalStringLOG_CONFIG=”W-INEBF/Lperties”5)参数的命名参数的名字必须和变量的命名规范一致。6)数组的命名数组应该总是用下面的方式来命名。bytebuffer;而不是bytebuffer;7)
6、方法的参数使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名4?排版换行1 )较长的语句、表达式要等分成多行书写。2 )长表达式要在低优先级操作符处划分新行,操作符放在新行之首。3 )循环、判断等语句中若有较长的表达式或语句,则要进行适当的划分。4 )若函数中的参数较长,则要进行适当的划分。5 )不允许把多个短语句写在一行中,即一行只写一句语句。缩进和间隔缩进应该是每行2个空格。不要在源文件中保存Tab字符,在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度。1 )关键词和操作符之间加适当的空格。2 )相对独立的程序块与块之间加空行。3 )函数或过程的开始
7、、结构的定义及循环、判断等语句中的代码都要采用缩进风格。'和'应各独占一行并位于同一列,同时与引用它们的语句左对齐。4 )划分出的新行要进行适应的缩进,使排版整齐,语句可读。5) 可以使用IDE工具中的格式化功能进行代码的排版。如Eclipse中,CTRL+SHIFT+F代码片段1 )避免使用不易理解的数字,用有意义的表示来替代。2 )不要使用难懂的技巧性很高的语句。3)远程中关联较为紧密的代码应尽可能相邻。4)编写完成后,检查代码,将代码中没有使用的各类引用包删除,程序的有效、完整性。5. Java文件格式所有的Java文件都必须遵守如下的样式规则。1 )版权信息2 )Pac
8、kage/lmports3 )类的注释4 )类属性5 )存取方法6 )构造函数7 )类方法8 )main方法6. 注释规范1 )注释要简单明了。Stringusername=null;/用户2 )编写代码边注释,修改代码同时修改相应的注释,以保证注释和代码的致性。3 )在必要的地方注释,注释量要适中。注释的内容要清楚、明了、含义准确,防止注释二义性。保持注释与其描述的代码相邻,即注释的就近原则。4 )对代码的注释应放在其上方相邻位置,不可放在下面。对数据结构的注应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在右方;统一结构中不同域的注释要对齐。保持释此域的5 )变量、常量的注释
9、应该放在其上方相邻位置或右方。6 )全局变量要有较详细的注释,包括对其功能、功能范围、那些函数或过程存取它以及存取时注意事项等的说明。7 )在每个源文件的头部要有必要的注释信息,包括:作者;生成日期;模块功能描述;文件历史修改记录等。/* 预警监控明细纳税人信息指标* 业务规则说明:*authorxx* /8)在每个函数或过程的前面要有必要的注释信息。包括:功能描述;输入、输出及返回值说明;* 返回预警明细信息字符串* paramyjxxID预警信息ID* paramyjzbID预警指标ID* return* throwsServiceException*/9)javadoc注释标签语法。pa
10、ram对方法中参数的说明return对方法返回值的说明author表明开发此类的作者7?代码编译编写代码时要注意随时保存,并定期备份,防止由于断电、磁盘损坏等原因造成代码丢失。同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。合理的设计软件系统目录,方便开发人员使用。打开编译器的所有告警开发对程序进行编译。搭建必要的CVS或SVN项目组开发人员可以及时的上传、更新项目程序代码,保证代码的一致性。代码编译之前,需修改程序的参数,以适应不同的环境,如日志的级别、数据库的连接方式在测试环境和生产环境都是不同的。8?性能写代码的时候,一定要考虑性能问题,在完成功能的同时也要保证所写代码的执行效
11、率。如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现。不必要的对象构造,不要在循环中构造和释放对象,使用StringBuffer对象。在进行文件的读取操作,除了可以正常的捕捉异常外,必须在文件读取完毕后,关闭整个流,特别是在系统发生异常时也要保证相关流操作能够正常关闭。在进行数据库的读写操作中,在完成操作后,务必要关闭对数据库的连接,特别是在系统发生异常时也要保证数据库的连接能够正常关闭。在代码编写的过程中,尽量减少方法中临时变量以及类中全局静态变量的使用,这些变量都将增加系统的额外开销。在进行数据库编程中,数据的提取、更新、删除这些都需要优化相应的
12、语句。特别是对于大量数据使用时,语句的优化相当重要。9. 测试及维护单元测试要求至少达到语句覆盖。编写测试用例,将用到的各种情况都考虑进去,保证测试的全面及测试结果的准确性。单元测试开始要跟踪每一条语句,并观察数据流及流量的变化。清理、整理或优化后的代码要经过审核及测试。代码版本升级要经过严格测试。系统开发中可以将已完成的功能交由用户进行使用,可以从不同的角度收集功能测试信息。系统交付客户使用之前,一定要经过压力测试,保证程序并发运行时达到要求的性能。10. 异常在系统运行过程中,不论是系统本身的错误,还是由于用户的非法操作导致的错误,系统能够正确的捕捉,且能及时的响应客户,这是评价程序优劣很
13、重要的方面。因此需要程序捕捉特定的异常,并给出友好的消息给用户,并记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。不必每个方法都用try-catch,当特定的异常可能发生时才使用。比如,当写文件时,处理异常FilelOException,不要写太大的try-catch模块。如果需要,为每个执行的任务编写单独的try-catch模块。如果应用程序需要,可以编写自己的异常类。自定义异常应从System.Exception或System.RuntimeException派生。11. 编程技巧1 )使用StringBuffer对象在处理String的时候要尽量使用StringBuffer类
14、,StringBuffer类是构成String类的基础。String类将StringBuffer类封装了起来,为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用StringBuffer来实现大部分的工作,当工作完成后将StringBuffer对象再转换为需要的String对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer对象和它的即pend()方法。如果我们用String对象代替StringBuffer对象的话,会花费许多不必要的创建和释放对象的CPU时间。2 )避免太多的使用synchronized关键字避免不必要的
15、使用关键字synchronized,应该在必要的时候再使用它,这是一个避免死锁的好方法。必须使用时,也尽量控制范围,最好在块级控制。3 )避免使用java.util.Vector类因为此类属于单线程,所以使用它操作大量数据时,在性能上会有很大的损失。4 )面向接口编程在程序的开发中,建议尽可能的采用面向接口进行编程,即系统业务方法都必须继承自相应的接口。系统间的方法调用也是通过接口而非具体实现类完成,期间如果业务方法发生变化或者系统应用环境发生变化,则采用新的方法实现已定义的接口,替换以前的实现即可,而无需修改已有的代码。总之就是要对修改封闭,对扩展开放。比方如下需求,给定一个SQL语句,返回
16、一个对象的列表,实现中用java.util.ArrayList实现,于是定义方法为:publicjava.util.ArrayListgetObjectltems(Stringsql)上面的方法存在一个问题,当getObjectItems内改用Vector或LinkedList实现,外部类必须做相应更改。一个更好的方法是定义返回值为java.util.AbstractList更合适:publicjava.util.AbstractListgetObjectltems(Stringsql)这样即使更改实现,外部类也不必做相应更改。5 )避免使用索引来调用数据库中间层组件返回的结果集如:for(i
17、nti=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语句发生变化时,不会影响到程序的执行。6 )对于自己创建的每一个类,都考虑置入一个main()其中包含了用于测试那个类的代码。为使用一个项目中的类,我们没必要删除测试代码。若进行了任何形式的改动,可方便地
18、返回测试。这些代码也可作为如何使用类的一个示例使用。7 )应将方法设计成简要的、功能性单元用它描述和实现一个不连续的类接口部分。理想情况下,方法应简明扼要。若长度很大,可考虑通过某种方式将其分割成较短的几个方法。这样做也便于类内代码的重复使用(有些时候,方法必须非常大,但它们仍应只做同样的一件事情)。8 )设计一个类时,请设身处地为客户程序员考虑一下(类的使用方法应该是非常明确的)。然后,再设身处地为管理代码的人考虑一下(预计有可能进行哪些形式的修改,想想用什么方法可把它们变得更简单)。9 )使类尽可能短小精悍,而且只解决一个特定的问题。下面是对类设计的一些建议:一个复杂的开关语句:考虑采用&
19、quot;多形"机制;数量众多的方法涉及到类型差别极大的操作:考虑用几个类来分别实现;许多成员变量在特征上有很大的差别:考虑使用几个类。10 )采用内部类任何时候只要发现类与类之间结合得非常紧密,就需要考虑是否采用内部类,从而改善编码及维护工作。11 )采用注释尽可能细致地加上注释,并用javadoc注释文档语法生成自己的程序文档。12 )避免使用"魔术数字"这些数字很难与代码很好地配合。如以后需要修改它,无疑会成为一场噩梦.因为根本不知道"100"到底是指"数组大小"还是"其他全然不同的东西"。所以,我
20、们应创建一个常数,并为其使用具有说服力的描述性名称,并在整个程序中都采用常数标识符。这样可使程序更易理解以及更易维护。13 )接口和抽象类的使用接口有如下特点:1. 接口中的方法可以有参数列表和返回类型,但不能有任何方法体。2. 接口中可以包含字段,但是会被隐式的声明为static和final。3. 接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。4. 接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理。5. 当实现一个接口时,需要将被定义的方法声明为public类型的,否则为默认访问类型,Java编译器不允许这种情况。6. 如果没有实现接口中所有
21、方法,那么创建的仍然是一个接口。7. 扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements。接口和抽象类基本类似,具体选择则依据以下规则:1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。2. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。14) 日志调试尽量减少程序使用System.out.println()向屏幕输出追踪的信息,System.out.prin
22、tln()为单线程处理,因此在输出的时候,程序资源属于独占状态。采用日志控制进行信息的追踪,如log.debug,,log.warn不同的级别输出不同的信息,给用户带来的不同的提示。在系统开发阶段将日志级别设置为DEBUG莫式,而在项目运行期则设置为ERR0模式。12. JSP编码规范整个JSP表示层应当尽可能的简单化,牢记大多数的JSP都应当是用来显示信息的,具体的数据由其他实体提供。在尽可能合理的情况下,把业务逻辑从JSP中移走。尽量把条件逻辑放在控制器中而不是放在试图中。采用完整的英文描述命名JSP尽可能包括一个生动的动词,第一个字母小写,如viewMessage.jsp
23、,命名要有意义。应当在JSP中避免使用页面引入命令。Import指令会促使类的实例化而不是JSPbean的实例化:不用:<%pageimport="com.java.util.*">而用:<%java.util.Listl=newjava.util.LinkedList()%>JSP不应该直接去访问请求参数。应当有程序可以执行这样的处理过程并且输出所处理的模型数据。应当避免设计既显示表单又处理结果的页面。在JSP中避免代码重复,要把重复的功能放在一个包含的JSP中使得它能够被重用。在JSP中应当避免使用out.println()方法来产生页面内容。J
24、SP层不应该直接访问数据。有专门的处理数据程序执行此功能。应当谨慎地使用<jsp:forward>标记,在JSP中它是一个等价的goto。在JSP中避免进行异常处理,如果没有充分的理由,不要在JSP中定义方法。13. 日志框架日志主要用来在项目开发过程中,用以跟踪关注的各类信息,如执行的SQL语句,系统加载的对象等,对开发人员来说,这是一个有用的辅助工具。在已有项目中采用Log4j作为基本的日志框架。Log4j框架采用Lperties为基础配置文件,开发人员可以灵活设置。在程序中,具体的使用方法如下:Loggerlogger=Logger.getLogger(thi
25、s.class);logger.debug();(调试级别)logger.warn();(警告级别)logger.error();(错误级别 )logger.i nfo();(正常级别)Servlet 加载和通过Spring 进行Log4j的加载方式有好多,主要介绍两种,通过加载。1 使用Servlet读取配置文件,在web容器启动时自动加载。ServletContextcontext=getServletContext();StringrealPath=context.getRealPath("/");StringlogPath=realPath+/WEB-INF/log
26、4perties"PropertyConfigurator.configure(logPath);2 、使用与Spring结合的方式,在Spring配置文件applicationContext.xml中加入监听配置,在系统加载Spring时,加载Log4j。<context-param>vparam-name>log4jConfigLocation</param-name>vparam-value>/WEB-INF/classes/perties</param-value>v/context-param>
27、;vlistener>vlistener-class>org.springframework.web.util.Log4jConfigListenerv/listener-class>v/listener><servlet>vservlet-name>log4j</servlet-name><servlet-class>org.springframework.web.util.Log4jConfigServletv/servlet-class>vload-on-startup>1</load-on-startu
28、p</servlet>14. 事务处理依据在现有的项目中使用到的事物处理方式,将事物处理分为以下类型。1 、程序中采用JDBC进行硬编码,那么其事务的控制,则是通过在代码中捕捉异常,如果异常发生,则进行数据回滚。通常的操作处理都在trycatchfinally语句块中。2 、程序中采用框架进行数据库编程。因现有开发的大部分项目都采用Ibatis作为基本的数据库编程框架。其事务控制完成如下:trysc.startTransaction();具体的数据库操作mitTransaction();sc.endTransaction();catchsc.endTransaction();3 、程序中采用Ibat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人手房购房合同
- 素混凝土坐凳施工方案
- 房屋土地转让协议书
- 楚雄公园景观灯施工方案
- 三农产品电商企业战略规划与实施路径研究
- 湖北省武汉市武昌区八校2024-2025学年上学期10月九年级物理试题(含答案)
- 广告代理委托授权协议书
- 铜陵单体民宿施工方案
- 室外广告牌拆除施工方案
- 市政电气管网工程施工方案
- 石泉县安沟钛磁铁矿矿山地质环境保护与土地复垦方案
- 部编版四年级语文下册 第一单元模考练习
- C#经典教材(打印版)
- 初轧机设计论文
- 第二章政治文化与政治发展
- 艺术生文化课承诺班本科协议书
- 新能源汽车三电系统详解(图文并茂)
- 簸箕上的麻雀三声部合唱简谱
- 短视频营销对消费者购买行为的影响因素研究
- 2016版公路工程施工监理规范
- 监理大纲合同信息管理
评论
0/150
提交评论