资源描述
,单击此处编辑母版标题样式,2012-7-9,#,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,编码规范,Java,主讲:周继俊,新马信息技术有限公司基础工程师培训系列,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,编码规范可以改善软件的可读性,可以让程序员尽快理解新代码。,几乎没有任何一个软件,在其整个生命同期中,均由最初的开发人员来维护。,一个,合格的,软件,,,生命周期中,80%,的花费在于维护。,编码,规范,的重要性,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,Java,源文件结构,1,、,开头注释,所有,的源文件都应该在开头有一个,C,语言风格的注释,其中列出类名、版本信息,创建日期和版权,声明。,Java,源文件结构,开头注释,示例,/,*,*,类名,*,*,版本信息,*,*,创建,日期,*,*,版权声明,*/,Java,源文件结构,包和,引入,先写包语句,再写引入语句。,package,行和,import,行之间留一行空行。,引入的标准包名要在本地包名之前,并且包名按照字母顺序排列。,如果,import,行中包含了同一个包中的类超过,5,个,则用*来处理。,import,的标准包和本地包之间留一行空行。,Java,源文件结构,包和,引入,示例,package,mon,;,import java.io.*;,import java.sql.DatabaseMetaData;,import java.sql.ResultSet;,import,com.xinma.plan.BaseDao,;,import,com.xinma.plan.dao.SysEquipmentDao,;,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,缩进排版,缩进采用,4,个,空格,注意:一定要使用空格键。这样可以避免使用不同的编辑器阅读程序时,因,TAB,键所设置的空格数目不同而造成程序布局不整齐,。,缩进排版,行长度,尽量,避免一行长度超过,80,个字符,因为,很多工具,不能很好,处理。,缩进排版,换行,当一个表达式无法在一行,显示,时,,,可依据如下规则断开:,在,一个逗号后面断开。,在,一个操作符前面断开。,选择,较高级别,的断开,,而非较低,级别的,断开。,新,的一行应该与上一行同一级别表达式的开头处对齐。,如果,以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进,8,个空格。,缩进,排版,换行,示例(一),someMethod(longExpression1,longExpression2,longExpression3,longExpression4,longExpression5);,var=someMethod1(Expression1,someMethod2(longExpression2,longExpression3,);,缩进排版,换行,示例(二),longName1=longName2*(longName3+longName4-longNeme5),+,4*,longName6;,longName1=longName2*(longName3+longName4,-,longName5)+4*longName6;,缩进排版,方法,声明缩进,(一),someMethod(int anArg,Object anotherArg,String,yetAnotherArg,Object,andStillAnother),缩进排版,方法声明,缩进,(二),private static synchronized horkingLongMethodName(int anArg,Object anotherArg,String yetAnotherArg,Object andStillAnother),这种情况下,如果,使用,常规的缩进方式将会使第二行和第三行移得很靠右,所以,代,之,以,缩进,8,个空格。,缩进排版,if,语句换行,if,语句的换行通常使用,8,个空格的规则,因为常规缩进,(4,个空格,),会使语句看起来比较费劲。,缩进排版,if,语句,换行,示例(一),常规缩进方式:,if,(condition1&condition2),|,(condition3&condition4),|,!(condition5&condition6),doSomethingAboutIt,();,缩进排版,if,语句换行,示例,(二),缩进八个空格:,if,(condition1&condition2),|,(condition3&condition4),|,!(condition5&condition6),doSomethingAboutIt,();,缩进排版,三元运算,表达式,缩进,alpha=(aLongBooleanExpression)?beta:gamma;,alpha=(aLongBooleanExpression)?beta,:,gamma;,alpha=(aLongBooleanExpression),?,beta,:,gamma;,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,注,释,有效的注释,注释,有助于理解代码,有效的注释是指在代码的功能、意图层次上进行注释,提供有用、额外的信息,而不是代码表面意义的简单重复。,注,释,Java,注释的方式,实现,注释:,/,注释,内容,/*,注释内容 *,/,文档,型注释,:,/*,注释内容 *,/,/,*,*,*,/,一般类公共变量的声明采用,行注释,。,类、接口、构造函数、方法等的声明采用,文档型注释,。,文档型注释参考资料:,http,:/,中的代码块,结束,处要加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句,。,注,释,实现,注释的,使用,(二),对分支语句(条件分支、循环语句等)必须编写注释,。,方法内部的块注释位于所描述内容之前。,单行,注释位于所描述内容之前,。,块,注释和单行,注释,之前保留一行,空行,。,对类和方法做出较大改变时必须添加,注释。,注,释,实现,注释的,使用,(,三,),注释,不能在一行写完时,,采用,块,注释。,对变量或常量的简短注释在代码右,端。,代码和尾端注释之间留有足够多的,空白,。,频繁的,注释有时能反映,出代码,的质量,低。当你觉得被迫要加注释的时候,考虑一下重写代码使其更清晰。,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,空 白,1,、,空行:,两,个方法,之间,方法内,,,局部变量和第一,条语句,之间,块注释或,单行,注释之前,一,个方法内的两个逻辑段之间,用以提高,可读性,空 白,2,、,空格,(一),:,一个紧跟着括号的关键字应该被空格分开,例如:,while(true),.,注意:方法名与其左括号之间不应该有空格,这将有助于区分关键字和方法调用,。,空 白,2,、,空格,(二),:,空白应该位于参数列表中逗号的后面,。,for,语句中的表达式应该被空格分开,例如:,for(expr1;expr2;expr3,),强制转型后应该跟一个空格,例如:,myMethod,(byte)aNum,(Object)x);,myMethod,(int)(cp+5),(int)(i+3)+1,);,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,命名规范,引言,好的,命名规则能极大地增加可读性和可维护性。同时,对于,一个多人,共同完成,的团队项目,来说,统一命名约定也是一项必不可少的内容,。可命名对象包括程序,中的所有标识符,(包,、变量名、控件名、常量名、方法名、类名、接口等,)。,命名规范,常用命名规范,Camel,规范,:第,1,个字符不大写,但目标名中的每个单词的第,1,个字母大写(比如:,invoiceNumber,),其他的所有字符都小写。,匈牙利规范,:在目标名中加入表示类型的前缀,如,strName,。,命名规范,1,、,包名,包名一般采用域名倒置加上自定义包名,包,名全部采用小写字母,示例:,package,mon,命名规范,2,、,类,名,和接口名,大,小写,结合,,每个,单词的首字母,大写,简洁,而富于,描述,使用完整单词,避免缩写词,示例,:,CustomerList,,,LogManager,命名规范,3,、方法名,方法名,应当,能体现方法的,作用,Camel,规范命名,一般使用,“动词”,或“动词名词”格式,示例:,private void calculateRate(),;,public void addNewOrder(),;,命名规范,4,、存取性,方法,名,采用,getter,和,setter,方法,示例:,public String getName();,public void setName(String name);public boolean isFinished();,命名规范,5,、属性名,采用意义完整的英文描述,Camel,规范命名,不能和方法名相同,示例:,private customerName,;,private orderNumber(),;,命名规范,6,、常量名,采用全部大写的英文描述,英文单词之间用下划线分隔,使用,final static,修饰,示例:,public final static int MAX_VALUE=1000;,public,final,static String DEFAULT_TITLE=Mr;,命名规范,7,、,变量,名,Camel,规范命名,除一次性临时,变量(如,for,循环,变量)外,,不能用单个字符的变量,名,如:,i,,,a,如果,变量名代表容器(,collection,),如,Array,Vector,等,在变量名后加,“,List,”,命名规范,8,、一些建议,采用应用,领域的,术语来,命名,不要生造,尽量避免名字中出现数字编号,如,value1,、,value2,等,除非逻辑上的确需要,编号,程序中不要出现仅靠大小写区分的相似的,标识符,如:,getUserSql,和,getUserSQL,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,声明,变量声明,一行只声明一个,变量,变量声明应该只放在代码段的开始部分。最好不要到使用时才声明变量,尽量,在,声明的同时初始化,变量,。,除非,初始值,依赖于某些先前发生的计算,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,表达式与语句,规则(一),每一行应该只包括一个语句,在表达式中使用括号,,,使表达式的运算顺序更,清晰,当复合语句作为控制流程的一部分时,应该用,把所有的复合语句括起来,即使只有一句简单语句,表达式与语句,规则(二),不可将浮点变量用“,=”,或“,!=”,与任何数字,比较,精确计算必须采用,BigDecimal,switch,语句中,每一个,case,分支一般情况下必须使用,break,结尾,如有特殊情况不使用,break,,需要注释说明。最后一个分支必须是,default,分支,表达式与语句,规则(三),循环嵌套次数不大于,3,次,在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少,CPU,跨循环,层的,次数,不可在,for,循环体内修改循环变量,防止,for,循环失去,控制,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,类和接口,规则和建议,类内部的代码布局顺序:类变量、属性、构造函数、,方法,功能相关的方法放在,一起,嵌套内部类不能超过两,层,一个接口可以有多个实现类,实现类共同的变量在接口里声明,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,一些编程习惯(一),准确确定成员函数的存取控制符号,不是必须使用,public,的,请使用,protected,,不是必须使用,protected,的,请使用,private,明确类的功能,,精确地实现方法,设计。,一个方法仅完成一个,功能,。,即使,再简单的功能也应该编写单独的方法去实现,一些编程习惯(二),数据库、,IO,等操作中,需要使用,close(),结束的对象,必须在,finally,中,close,(),异常捕获后,如果不对异常进行处理,则应该记录日志或者,ex.printStackTrace(),,并注释说明处理原则,主动抛出的异常必须添加详细的描述信息,便于定位问题,一些编程习惯(三),避免使用不易理解的数字,用有意义的标识来替代,调试代码时,不要使用,System.out,和,System.err,进行输出,应该使用一个带有开关的测试类统一进行输出,集合,中的数据如果不再使用应该及时释放,尤其是可 重复使用的集合,一些编程习惯(四),尽量避免使用,goto,语句,系统应具有一定的容错能力,对一些错误事件(如用户误操作等),能进行,自动,补救,在对字符串有较多附加操作时,使用,StringBuffer,而非,String,。使用,StringBuffer,性能会好很多,一些编程习惯(五),不要在循环内执行重复,操作。可,在循环外调用一次的,就避免在循环内进行不必要的反复,调用。如:,for(int i=0;i dw.getRowCount();i+),int,rows=dw.getRowCount();,for(int i=0;i rows;i+),应写成:,一些编程习惯(六),不要频繁初始化,对象。除非,必要,否则不要在循环内初始化,对象。如:,for(int i=0;i rows;i+),PlanVO plan=,new,PlanVO();,应写成:,PlanVO plan=new PlanVO();,for(int i=0;i 2,;,int num=a*8;,可改为,:,int,num=a 3;,注意,:,使用,移位应添加,注释,。,因为,移位操作不直观,比较难理解,如果不加注释将导致代码可读性降低,一些编程习惯(九),尽量使用,System.arraycopy(),代替通过来循环,复制数组。,System.arraycopy(),要比通过循环来复制数组快的,多,尽量避免使用二维数,组。,二维数据占用的内存空间比一维数组多得多,大概,10,倍以上,一些编程习惯(十),尽量避免使用,continue,、,break,不要混合使用递增运算符和递减,运算符,不要使用,do while,语句,采用,while,语句来替代,编码规范,的,重要性,Java,源文件,结构,缩进,排版,注,释,空白,命名,规范,声明,表达式与,语句,类和,接口,一些编程习惯,编码规范,交流和互动,互相学习,共同进步,结束语,Thanks,
展开阅读全文