版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选文档Java代码标准说明 1. 环境配置21.1. 软件21.2. 项目导入21.3. 项目编码配置32. 项目通用命名规章62.1. 命名方式62.2. 方法命名规章62.3. 变量命名规章62.4. 常量命名规章72.5. 注释72.6. 注释范围82.7. Controller、Service、Dao 等中的方法命名92.8. JSP页面命名103. 代码书写规范103.1. 返回值103.2. 特别113.3. 换行(Wrapping Lines)133.4. 声明(Declaration)143.5. 初始化(Initialization)153.6. 布局(Placement)
2、153.7. 简洁语句(Single Statement)163.8. 复合语句(Compound Statements)163.9. 返回语句(return Statements)163.10. for语句(for Statements)173.11. while语句switch(while Statements)173.12. 空行(Blank Lines)183.13. 空格(Blank Spaces)183.14. 圆括号(Parentheses)193.15. 变量赋值(Variable Assignments)203.16. 去除警告204. 代码质量214.1. 统一编码规范、代
3、码样式214.2. 静态代码分析214.3. 单元测试214.4. 持续集成224.5. 代码评审和重构221. 环境配置1.1. 软件软件名称版本备注Myeclipse6.5试用版JDKJdk.1.6.0_45sunJDK开源Tomcat6.0.37Apache开源Mysql5.0.18/5.1开源SQLyog9.6.2试用版SVNsubeclipse-site-1.6.5插件SVN客户端TortoiseSVN 1.6.7插件1.2. 项目导入1、选择SVN地址 输入帐号密码完成即可1.3. 项目编码配置文项目全部编码格式统一接受UTF-8 设置修改types 和methods注释的方法修改
4、以上则类名自动加注释,需要修改里边的信息 方法名注释:在方法的前面输入” /* ” b然后回车自动消灭注释调整样式即可。 2. 项目通用命名规章2.1. 命名方式文件名、变量名称使用有意义的英文(或缩写)进行命名,名称与数据表结构的名称命名保持全都,便于提高查阅效率。全部由多个单词组成的名称统一用驼峰法则进行命名。驼峰法则是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单字以小写字母开头,其次个单字的首字母大写或每一个单字的首字母都接受大写字母,例如: 业务名称为角色,则命名为 RoleController 、RoleServiceImpl 、findUniqueEntity 等。全
5、部的命名依据业务名称的英文或者中文拼音,优先接受英文。2.2. 方法命名规章方法名应是一个动词或动名结构,接受大小写混和的方式,其中第一个单词的首字母用小写,其后单词的首字母大写。例如:Xxxxx.getBmList();每个方法前必需加说明包括:参数说明、返回值说明、特别说明。假如方法名实在是太长可以对变量名缩写,但是必需添加相应的说明。2.3. 变量命名规章变量命名一般接受大小写混和的方式,第一个单词的首字母小写,其后单词的首字母大写,变量名一般不要用下划线或美元符号开头。变量名应简短且有意义,即,能够指出其用途。除非是一次性的临时变量,应尽量避开单个字符的变量名。(1)类的实例对象定义如
6、下:Person person;(2)同一个类的多个对象可以接受一下定义方式:Person person1;Person person2;(3)集合类的实例命名使用集合包含元素的英文名称的复数表示,例如:Vector persons;(4)假如变量名实在是太长可以对变量名缩写,但是必需在类说明或方法说明部分(视缩写的范围而定)进行说明。(5)数组的声明要用"int packets"的形式,而不要用"int packets"。2.4. 常量命名规章类常量和ANSI常量的命名应全部用大写,单词间用下划线隔开。例如:final static int MIN_W
7、IDTH = 4;2.5. 注释Java程序有两类注释:实现注释(implementation comments)和文档注释(document comments)。实现注释是那些在C+中见过的,使用/*/和/界定的注释。文档注释(被称为“doc comments”)是Java独有的,并由/*/界定。文档注释可以通过javadoc工具转换成HTML文件。实现注释用以注释代码或或者实现细节。文档注释从实现自由(implemtentation-free)的角度描述代码的规范。它可以被那些手头没有源码的开发人员读懂。注释应被用来给出代码的总括,并供应代码自身没有供应的附加信息。注释应当仅包含与阅读和理
8、解程序有关的信息。例如,相应的包如何被建立或位于哪个名目下之类的信息不应包括在注释中。在注释里,对设计决策中重要的或者不是显而易见的地方进行说明是可以的,但应避开供应代码中已清楚表达出来的重复信息,多余的注释很简洁过时。通常应避开那些代码更新就可能过时的注释。类以及类中的每个方法必需有注释。方法中的代码关键部分必需有注释,解释代码的意思。Ø 文本注释 类注释 /* * <b>function:</b> 增删改查组件规范接口 * project Xcj * package com.xcj.admin.base * fileName BaseDao.java *
9、createDate 2010-03-30 下午05:28:03 * author xx_xx * email xx */Ø 类中方法注释 /* * <b>function:</b> 增加一个entity对象,返回是否添加成功 * createDate 2010-03-30 下午05:28:38 * author su_jian * param <T> 对象类型 * param entity 对象 * return boolean true/false * throws DataAccessException */Ø 单行注释/猎取系统管
10、理员的全部权限2.6. 注释范围 a) 类的方法名和类名必需有注释。例如 /* * <b>function:</b> 增加一个entity对象,返回是否添加成功 * createDate 2014-03-30 下午05:28:38 * author su_jian * param <T> 对象类型 * param entity 对象 * return boolean true/false * throws DataAccessException */ b) 类调用的方法以及关键代码注释。例如/进行静态化处理staticService.buidSingleAr
11、ticle(article.getId();/生成二维码图片staticService.buidQRcode(article.getId(); c) 配置文件(Spring、DB、等)代码注释。例如<!-初始化时猎取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -> <property name="initialPoolSize"> <value>$c3p0.initialPoolSize</value> </property> <!-连接池中保留的最小连接数。-
12、> <property name="minPoolSize"> <value>$c3p0.minPoolSize</value>2.7. Controller、Service、Dao 等中的方法命名方法类型命名规章举例(参数自己定义)初始化init+操作对象init ()新增save+操作对象save()、saveObject()删除del+操作对象sdel()、delObject ()修改update+操作对象update()、updateObject ()新增+修改edit+操作对象edit()、editObject ()查看v
13、iew+操作对象view()、viewObject ()猎取单个对象get+操作对象get()、getObject ()猎取列表数据getListBypage+操作对象sgetXxListByPage()猎取集合数据getXList+操作对象sgetXxList()、getXxList Object()猎取树形数据getXTree+操作对象sgetXxTree()、getXxTreeObject ()前后插入save(Before/After)+操作对象 saveObject ()/saveBeforeObject ()禁用disabled+操作对象disabled()、disabledObj
14、ect()启用或激活active+操作对象sactive()、activeObject()授权assign+操作对象sassign()、assignObject ()撤销unassign+操作对象sunassign()、unassignObject ().2.8. JSP页面命名页面类型命名规章举例(参数自己定义)主页操作对象index.jspobjectindex.jsp新增页面操作对象save .jspobjectsave.jsp修改页面操作对象edit.jspobjectedit.jsp查看页面操作对象detail.jspobjectdetail.jsp授权操作对象assign.jspo
15、bjectassign.jsp. 3. 代码书写规范类的方法的代码行数不能过长,尽量把握在100行(90%),长的方法要拆分成私有函数。3.1. 返回值返回值的状况,假如只需要一个对象里边的属性值,则无需返回整个对象。返回值就行。 在一般状况下,方法返回值不应返回null。而是尽量使用特别代替返回null。假如在特殊状况必需返回null, 必需在方法说明中加以特殊说明,如使用“特殊留意”等字样。例如:从一个集合类实例中提取一个对象,由于有些集合类实例是允许null作为键或值的,这个时候用特别取代返回null就不合适了。假如方法的返回值是集合类对象,而且返回的集合对象不包含任何元素时,则应返回0
16、长度或0大小的集合对象。不能返回null。3.2. 特别整个应用系统使用自行设计的唯一特别类,该类包括message(表示错误信息)和ID号(整型,表示特别类型)两部分,该类在创建时是自动获得类名、方法名、行号等信息。在系统开发和上线之后的一段时间内,特别信息要直接发送到扫瞄器页面,以便于开发人员快速定位错误。 全部的Controller必需捕获特别,全部的Service、Dao必需把特别抛到上一层进行相应的处理。假如没有相应的Controller则在方法的最前面进行特别的捕获处理。一个try-catch语句应当具有如下格式: try statements; catch (ExceptionC
17、lass e) statements; 一个try-catch语句后面也可能跟着一个finally语句,不论try代码块是否顺当执行完,它都会被执行。 try statements; catch (ExceptionClass e) statements; finally statements; 特别DEMO如下: RequestMapping(value = "/save", method = RequestMethod.POST)public String save(ValidatedArticle article, Model model) try article.s
18、etCreateDate(DateUtil.getCurrentTimeByDate();article.setModifyDate(DateUtil.getCurrentTimeByDate();article.setBoring(1);article.setLoves(1);Integer id = articleService.saveAndGetIdByInteger(article);/以下是猎取方法String checkboxs=article.getCheckbox();if(checkboxs!=null)String strs=checkboxs.split(",
19、");for (int i = 0; i < strs.length; i+) ArticleTag articleTag= new ArticleTag();articleTag.setArticleId(id);articleTag.setTagId(Integer.valueOf(strsi);articleTagService.save(articleTag); /进行静态化处理staticService.buidSingleArticle(id);/生成二维码图片staticService.buidQRcode(id); catch (Exception e) log
20、.error("文章:保存对象出错:" + e.getMessage();e.printStackTrace();return "redirect:/admin/article/articleList_jsp" 其中红色部分为特别处理。即全部的Controller中方法必需进行特别的处理。 常用工具类中特别DEMO如下: public static String readTxtFile(String filePath)InputStreamReader inputReader = null; BufferedReader bufferReader = n
21、ull; OutputStream outputStream = null; try InputStream inputStream = new FileInputStream(filePath); inputReader = new InputStreamReader(inputStream); bufferReader = new BufferedReader(inputReader); / 读取一行 String line = null; StringBuffer strBuffer = new StringBuffer(); while (line = bufferReader.rea
22、dLine() != null) strBuffer.append(line); return strBuffer.toString(); catch (IOException e) return null; finally 3.3. 换行(Wrapping Lines)尽量避开一行长度超过80个字符,由于很多终端和工具不能很好处理之。留意:用于文档是的例子应当使用更短的行长,长度一般不超过70个字符。假如超过则使用换行来处理。 / 使用这种方式来换行if (condition1 && condition2)| (condition3 && condition4
23、)| !(condition5 && condition6) doSomethingAboutIt();/ OR USE THISif (condition1 && condition2) | (condition3 && condition4) | !(condition5 && condition6) doSomthingAoutIt();这里有三种可行的方法用于处理三元运算表达式:alpha = (aLongBooleanExpression) ? beta : gamma;alpha = (aLongBooleanExpr
24、ession) ? beta : gamma;alpha = (aLongBooleanExpression) ? beta : gamma;3.4. 声明(Declaration)每行声明变量的数量(Number Per Line)推举一行一个声明,由于这样以利于写注释。亦即,int level; / indentation levelint size; / size of table要优于,int level, size;不要将不同类型变量的声明放在同一行,例如:int foo, fooarry; / WRONG!留意:上面的例子中,在类型和标识之间放了一个空格,另一种被允许的替代方法是使
25、用制表符:int level; / indentation levelint size; / size of tableObject currentEntry; / currently selected table entry3.5. 初始化(Initialization)尽量在声明局部变量的同时进行初始化。唯一 不这么做理由是变量的初始值依靠于某些从前发生的计算。假如类存在父类,且父类没有被初始化,先初始化父类。 留意:初始化父类时第一被
26、初始化的类永久是object类,父类总在子类之前被初始化。 假如类存在一个初始化对象,就执行该方法。 除接口以外,初始化一个类之前必需保证其直接超类已被初始化,并且该初始化过程是由 Jvm 保证线程平安的。另外,并非全部的类都会拥有一个 <clinit>() 方法,在以下条件中该类不会拥有 <clinit>() 方法:该类既没有声明任何类变量,也没有静态初始化语句;该类声明白类变量,但没有明确使用类变量初始化语句或静态初始化语句初始化;该类仅包含静态 final 变量的类变量初始化语句,并且类变量初始化语句是编译
27、时常量表达式。 留意:<clinit>() 方法类变量初始化语句和类型的静态初始化语句与在类中声明的挨次全都 类初始化后,即可调用它的静态方法,或者创建实例。父类静态初始化->子类静态初始化->父类初始化块->父类构造方法->子类初始化块->子类构造方法。3.6. 布局(Placement)只在代码块的开头处声明变量(一个块是指任何被包含在大括号“”和“”中间的代码)。不要在首次用于该变量时才声明之,这会把留意力不集中的程序员搞糊涂,同时会阻碍代
28、码在该作用域内的可移植性。 void myMethod() int int1 = 0; if (condition) int int2 = 0; 该规章的一个例外是for循环的索引变量 for (int i = 0; I < maxLoops; i+) 避开声明的局部变量掩盖上一级声明的变量。例如,不要在内部代码块中声明相同的变量名: int count; myMethod() if (condition) int count = 0; / AVOID 3.7. 简洁语句(Single Statement) 每行至多包含一条语句,例如: argv+; / Correct argc-; /
29、 Correct argv+; argc-; / AVOID!3.8. 复合语句(Compound Statements)复合语句是包含在大括号中的语句序列,形如“ 语句 ”。例如下面各段。 被括其中的语句应当较之复合语句缩进一个层次。 左大括号“”应位于复合语句起始行的行尾;右大括号“”应另起一行并与复合语句首行对齐。 大括号可以被用于全部语句,包括单个语句,只要这些语句是诸如if else或for把握结构的一部分。这样便于添加语句而无需担忧由于忘了加括号而引入bug.3.9. 返回语句(return Statements) 个带返回值的return语句不使用小括号“()”,除非它们以某种方
30、式使返回值更显见。例如: return; return myDisk.size(); return (size ? size ; defaultSize);3.10. for语句(for Statements)一个for语句应当具有如下格式: for (initialization; condition; update) statements; 一个空的语句(全部工作都在初始化,条件推断,更新子句中完成)应当具有如下格式: for (initialization; condition; update);当在for语句的初始化或更新子句中使用逗号时,避开因使用三个以上变量,而导致简单度提高。若需
31、要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句。3.11. while语句switch(while Statements)一个while语句应当具有如下格式: while (condition) statements; 一个空的while语句应当具有如下格式: while (condition);do-while语句(do-while Statements)一个do-while语句应当具有如下格式: do statements; while (condition);switch语句(switch Statements)一个switch语句应当具有如下格式:
32、 switch (condition) case ABC: statements; / * falls through */ case DEF: statements; break; case XYZ: statements; break; 3.12. 空行(Blank Lines)空行将规律相关的代码段分隔开,以提高可读性。下列状况应总是使用两个空行: 一个源文件的两个片段(section)之间。 类声明和接口声明之间。下列状况应当总是使用一个空行: 两个方法之间。 方法内的局部变量和方法的第一条语句之间。 块注释(参见“5.1.1”)或单行注释(参见5.1.2)之前。 一个方法内的两个规律
33、段之间,用以提高可读性。3.13. 空格(Blank Spaces)下列状况应当使用空格: 一个紧跟着括号的关键应当被空格分开,例如: while (true) . 留意:空格不应当置于方法名与其左括号之间,这将有助于区分关键字和方法调用。 空白应当位于参数列表中逗号的后面。 全部的二元运算符,除了“.”,应当使用空格将之与操作数分开。一元操作符和操作数之间不应当加空格,比如:负号(“-”),自增(“+”)和自减(“-”)。例如: a += c + d; a = (a + b) / (c * d); while (d+ + s+) n+; printSize(“size is ” + foo
34、+ “n”); for语句中的表达式应当被空格分开,例如: for (expr1; expr2; expr3)强制转型后应当跟一个空格,例如:myMethod(byte) aNum, (Object) x);myMethod(int) (cp + 5), (int) (i + 3) + 1);3.14. 圆括号(Parentheses) 一般而言,在含有多种运算符的表达式中使用括号来避开运算符优先级问题,是个好方法。即便运算符的优先级对你而言可能很清楚,但对其他人未必如此。你不能假设别的程序员和你一样清楚运算符的优先级。 if (a = b && c =d) / AVOID!
35、if (a = b) && (c = d) / RIGHT 返回值(Returning Values)设法让你的程序结构符合目的。例如: if (booleanException) return true; else return false; 应当代之以如下方法: return booleanException;类似地:if (condition) return x; return y;应当写为: return (condition ? x : y);3.15. 变量赋值(Variable Assignments)避开在一个语句中给多个变量赋相同的值。它很难读懂。例如:foo
36、Bar.fChar = barFoo.lchar = c; / AVOID!不要将赋值运算符用在简洁与相等关系运算符混淆的地方。例如: if (c+ = d+) / AVOID! (Java disallows) . 应当写成 if (c+ = d+) ! = 0) 不要使用内嵌(embedded)赋值运算符试图提高运行时效率,这是编译器的工作。例如:d = (a = b +c) + r; / AOVID!应当写成 a = b + c; d = a + r;3.16. 去除警告在eclipse 中警告会以感叹号的形式消灭, 编码尽量去除警告。一般去除的警告包括一下几类。1、导入未使用的类,请删
37、除。2、未使用的变量,请删除。3、实现序列话的类,没有版本信息,请添加版本信息。4、没有使用泛型的,请加上泛型。4. 代码质量Java项目开发过程中,由于开发人员的阅历、Java代码编写习惯,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维 护,需要较大的测试投入和周期等问题。这些问题在一个项目组初建、需求和设计均具有不完全可预期性和完备性的全新项目中将尤为突出。可以接受以下步骤来保证和提高整个项目的代 码质量:统一编码规范、代码样式;静态代码分析(staticcodereview);单元测试;持续集成;代码评审和重构 (Review&Refactor)。4.1. 统一编码规范、代码样式规范统一的编码会增加项目代码的可读性和可维护性,但实际状况往往是项目组内的Java代码开发人员的编码风格经常各不相同,这可能是由于不同 的阅历习惯或者缺乏编码规范方面的学习造成的。这样一来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 业务需求分析调研模板行业版
- 人力资源管理及培训工具
- 电工毕业考试题库及答案
- 电工基础双控考试题库及答案
- 风险评估与管理工具企业风险识别与应对策略手册
- 行业的项目风险管理工具包
- 2025年生态环境行业生态环境保护与可持续发展研究报告及未来发展趋势预测
- 企业宣传资料与素材标准化模板
- 2025年人工智能行业智能客服应用案例分享报告
- 2025年网红经济行业网红营销与社交媒体变现模式研究报告及未来发展趋势预测
- ICU镇痛镇静药物使用
- 中西医临床医学五年发展规划纲要
- 史记商君列传的课件
- 云南省楚雄彝族自治州双柏县2024-2025学年五年级上学期语文11月期中试卷(含答案)
- 广东省广州市花都区2024-2025学年六年级上学期语文期中试卷(含答案)
- 消毒供应中心包装技术
- DB14∕T 3147-2024 纯电动后背式换电载货汽车换电站建设指南
- 肥厚性心肌病病例汇报
- DBJ50-T-306-2024 建设工程档案编制验收标准
- 华为驻外员工管理办法
- 三基工作培训课件
评论
0/150
提交评论