ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:25.11KB ,
资源ID:10903050      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10903050.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA程序编码规范.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JAVA程序编码规范.docx

1、JAVA程序编码规范JAVA程序编码规范1 简介1.1 目的本规范为一套编写高效可靠的 Java 代码的标准、约定和指南。它以安全可靠的软件工程原则为基础,使代码易于理解、维护和增强,提高生产效率。同时,将带来更大的一致性,使软件开发团队的效率明显提高。1.2 范围本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN)均应遵守这个规范。同时,也可作为其它项目的参考。代码组织与风格1.3 Tab一个Tab为4个空格长。1.4 缩进一个代码块内的代码都应该统一的缩进一个Tab长度。1.5 空行适当的增加空行,来增加代码的可读性。在下列情况下应该

2、有两行空行: 同一文件的不同部分之间; 在类,接口以及彼此之间;在下列情况之间应该有一行空行:方法之间; 局部变量和它后边的语句之间; 方法内的功能逻辑部分之间;1.6 代码块长度每个代码块尽量控制在1个屏幕之内,方便浏览。1.7 行宽每行代码和注释不应超过70个字节或屏幕的宽度,如超过则应换行,换行后的代码应该缩进8个字符。1.8 空格括号和它里面的字符之间不应该出现空格。括号应该和它前边的关键词留有空格,如:while (true) ;但是方法名和左括号之间不应该有空格。参数之间的逗号后应该加一空格。如:method1(int i1, int i2)for语句里的表达式之间加一空格。如:f

3、or(expr1; expr2; expr3)二元操作符和操作数之间应该用空格隔开。如:i + c ;强制类型转换时,在类型和变量之间加一空格。如:(int) i ;注释1.9 注释的基本约定注释应该增加代码的清晰度持注释的简洁,不是任何代码都需要注释的,过多的注释反而会影响代码的可读性。注释不应该包括其他的特殊字符。先写注释,后写代码1.10 注释类型块注释:主要用来描述文件,类,方法,算法等。一般用在文档和方法的前面,也可以放在文档的任何地方。以/*开头,*/结尾。例:/* 注释*/行注释:主要用在方法内部,对代码,变量,流程等进行说明。与块注释格式相似,但是整个注释占据一行。例:/* 注

4、释 */尾随注释:与行注释功能相似,放在代码的同行,但是要与代码之间有足够的空间,便于分清。例:int m=4 ; /* 注释 */如果一个程序块内有多个尾随注释,每个注释的缩进应该保持一致。行尾注释:与行注释功能相似,放在每行的最后,或者占据一行。以/开头。文档注释:与块注释相似,但是可以被javadoc处理,生成HTML文件。以/*开头,*/结尾。问挡住是不能放在方法或程序块内。例:/* 注释*/1.11 注释那些部分项目注释哪些部分实参/ 参数参数类型 参数用来做什么任何约束或前提条件示例字段/ 字段/属性字段描述 注释所有使用的不变量示例并行事件可见性决策类类的目的 已知的问题类的开发

5、/维护历史注释出采用的不变量并行策略编译单元每一个类/类内定义的接口,含简单的说明 文件名和/或标识信息版权信息接口目的它应如何被使用以及如何不被使用局部变量用处/目的成员函数注释成员函数做什么以及它为什么做这个哪些参数必须传递给一个成员函数成员函数返回什么已知的问题任何由某个成员函数抛出的异常可见性决策成员函数是如何改变对象的包含任何修改代码的历史如何在适当情况下调用成员函数的例子适用的前提条件和 后置条件成员函数内部注释控制结构 代码做了些什么以及为什么这样做局部变量难或复杂的代码处理顺序2 命名2.1 命名的基本约定一般应该使用可以准确说明变量/字段/类的完整的英文描述符,如firstN

6、ame。对一些作用显而易见的变量可以采用简单的命名,如在循环里的递增(减)变量就可以被命名为 ” i ”。尽量采用项目所涉及领域的术语。可以采用大小写混合,提高名字的可读性。尽量少用缩写,但如果一定要使用,就要谨慎地使用。同时,应该保留一个标准缩写的列表,并且在使用时保持一致。避免使用长名字(最好不超过 15 个字母)。避免使用相似或者仅在大小写上有区别的名字。避免使用下划线作为名字的首末字母。2.2 标识符的命名约定标示符类型命名约定例子包全部小写。标识符用点号分隔开来。为了使包的名字更易读,Sun 公司建议包名中的标识符用点号来分隔。Sun 公司的标准 java 分配包用标识符 .java

7、 开头。全局包的名字用你的机构的 Internet 保留域名开头 。局部包:interface.screens全局包:com.rational.www. interface.screens类,接口类的名字应该使用名词。每个单词第一个字母应该大写。避免使用单词的错写,除非它的缩写已经广为人知,如HTTP。Class Hello ;Class HelloWorld ;Interface Apple ;方法第一个单词一般是动词。第一个字母是小些,但是中间单词的第一个字母是大写。如果方法返回一个成员变量的值,方法名一般为get+成员变量名,如若返回的值是bool变量,一般以is作为前缀。如果方法修改一

8、个成员变量的值,方法名一般为:set + 成员变量名。getName();setName();isFirst();变量第一个字母小写,中间单词的第一个字母大写。不要用_或&作为第一个字母。尽量使用短而且具有意义的单词。单字符的变量名一般只用于生命期非常短暂的变量。i,j,k,m,n一般用于integers;c,d,e一般用于characters。如果变量是集合,则变量名应用复数。命名组件采用匈牙利命名法,所有前缀均应遵循同一个组件名称缩写列表。String myName;int i;int n;char c;int students;btNew;(bt是Button的缩写)常量所有常量名均全部

9、大写,单词间以_隔开。int MAX_NUM;3 声明每行应该只有一个声明。局部变量必须初始化。除了for循环外,声明应该放在块的最开始部分。for循环中的变量声明可以放在for语句中。如:for(int i = 0; i 10; i+) 。避免块内部的变量与它外部的变量名相同。表达式和语句3.1 每行应该只有一条语句。3.2 if-elseif-elseif语句,任何情况下,都应该有“”,“”,格式如下:if (condition) statements; else if (condition) statements; else statements;3.3 for语句格式如下:for (i

10、nitialization; condition; update) statements; 如果语句为空: for (initialization; condition; update) ;3.4 while语句格式如下:while (condition) statements;如果语句为空: while (condition);3.5 do-while语句格式如下:do statements; while (condition);3.6 switch语句每个switch里都应包含default子语句,格式如下:switch (condition)case ABC: statements; /

11、* falls through */case DEF: statements; break;case XYZ: statements; break;default: statements; break;3.7 try-catch语句格式如下:try statements; catch (ExceptionClass e) statements; finally statements;4 错误处理和异常事件通常的思想是只对错误采用异常处理:逻辑和编程错误,设置错误,被破坏的数据,资源耗尽,等等。通常的法则是系统在正常状态下以及无重载和硬件失效状态下,不应产生任何异常。异常处理时可以采用适当的日志

12、机制来报告异常,包括异常发生的时刻。不要使用异常实现来控制程序流程结构。可移植性4.1 尽量不要使用已经被标为不赞成使用的类或方法。4.2 代码应遵循UNIX风格。4.3 如果需要换行的话,尽量用 println 来代替在字符串中使用n。 4.4 用separator()方法代替路径中的”/”或” 。4.5 用pathSeptarator()方法代替路径中的 ” : ” 或 ” ;” 。5 Java文件样式所有的Java(*.java)文件都必须遵守如下的样式规则5.1 版权信息版权信息必须在java文件的开头,比如:/* * Title: 本文件的标题 * Description: 对本文件

13、的描述 * Copyright: 版权信息 * Company: 公司名称 * author作者 Email * version版本号 */其他不需要出现在javadoc的信息也可以包含在这里。5.2 Package/Importspackage行要在import行之前,import中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果import行中包含了同一个包中的不同子目录,则应该用*来处理。如:package.stats;importjava.io.*;importjava.util.Observable;importhotlava.util.Application;这里java.

14、io.*使用来代替InputStreamandOutputStream的。5.3 Class接下来的是类的注释,一般用来解释类的作用。/*Aclassrepresentingasetofpacketandbytecounters*Itisobservabletoallowittobewatched,butonly*reportschangeswhenthecurrentsetiscomplete*/接下来是类定义,包含了在不同的行的extends和implements。一般应遵循extends在前,implements在后的原则。如:publicclassCounterSet extendsO

15、bservable implementsCloneable 5.4 ClassFields接下来是类的成员变量:/*Packetcounters*/protectedintpackets;public的成员变量必须生成文档(JavaDoc)。proceted、private和package定义的成员变量如果名字含义明确的话,可以没有注释。5.5 存取方法接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。/*Getthecounters*returnanarraycontainingthestatisticaldata.Thisarrayhasbeen*

16、freshlyallocatedandcanbemodifiedbythecaller.*/publicintgetPackets()returncopyArray(packets,offset);publicintgetBytes()returncopyArray(bytes,offset);publicintgetPackets()returnpackets;publicvoidsetPackets(intpackets)this.packets=packets;其它的方法不要写在一行上。5.6 构造函数接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。访问类型(publi

17、c,private等.)和任何static,final或synchronized应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。public static CounterSet(intsize)this.size=size;5.7 克隆方法如果这个类是可以被克隆的,那么下一步就是clone方法:public Objectclone()try CounterSetobj=(CounterSet)super.clone();obj.packets=(int)packets.clone();obj.size=size;returnobj; catch(CloneNotSupport

18、edExceptione) thrownewInternalError(UnexpectedCloneNotSUpportedException:+e.getMessage() );5.8 类方法下面开始写类的方法: /* * Creates a new zip entry with the specified name. * * param name the entry name * exception NullPointerException if the entry name is null * exception IllegalArgumentException if the entr

19、y name is longer than * 0xFFFF bytes */public ZipEntry(String name) if (name = null) throw new NullPointerException(); if (name.length() 0xFFFF) throw new IllegalArgumentException(entry name too long); this.name = name; 5.9 toString方法无论如何,每一个类都应该定义toString方法:public StringtoString() Stringretval=Coun

20、terSet:;for(inti=0;idata.length();i+) retval+=data.bytes.toString();retval+=data.packets.toString();returnretval;5.10 main方法如果main(String)方法已经定义了,那么它应该写在类的底部.程序编写规范5.11 exit()exit除了在main中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。异常申明的错误应该抛出一个RuntimeException或者派生的异常。顶层的ma

21、in()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。5.12 垃圾收集JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:.FileOutputStreamfos=newFileOutputStream(projectFile);project.save(fos,IDEProjectFile);.除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:FileOutputStreamfos=newFileOutputSt

22、ream(projectFile);project.save(fos,IDEProjectFile);fos.close();5.13 Clone下面是一种有用的方法:implementsCloneablepublic Objectclone()try ThisClassobj=(ThisClass)super.clone();obj.field1=(int)field1.clone();obj.field2=field2;returnobj; catch(CloneNotSupportedExceptione) thrownewInternalError(UnexpectedCloneNot

23、SUpportedException:+e.getMessage();5.14 final类绝对不要因为性能的原因将类定义为final的(除非程序的框架要求)如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为final的。这是因为没有人可以保证会不会由于什么原因需要继承她。5.15 访问类的成员变量大部分的类成员变量应该定义为protected的来防止继承类使用他们。注意,要用intpackets,而不是intpackets,后一种永远也不要用。publicvoidsetPackets(intpackets)this.packets=packets;CounterSet(int

24、size)this.size=size;6 编程技巧6.1 byte数组转换到characters为了将byte数组转换到characters,你可以这么做:Helloworld!.getBytes();6.2 Utility类Utility类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。6.3 初始化下面的代码是一种很好的初始化数组的方法:objectArguments=newObjectarguments;6.4 枚举类型JAVA对枚举的支持不好,但是下面的代码是一种很有用的模板:classColourpublicstaticfinalColourBLACK=newColo

25、ur(0,0,0);publicstaticfinalColourRED=newColour(0xFF,0,0);publicstaticfinalColourGREEN=newColour(0,0xFF,0);publicstaticfinalColourBLUE=newColour(0,0,0xFF);publicstaticfinalColourWHITE=newColour(0xFF,0xFF,0xFF);这种技术实现了RED,GREEN,BLUE等可以象其他语言的枚举类型一样使用的常量。他们可以用=操作符来比较。但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色BLACKne

26、wColour(0,0,0)那么这就是另外一个对象,=操作符就会产生错误。她的equal()方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。6.5 Swing避免使用AWT组件混合使用AWT和Swing组件如果要将AWT组件和Swing组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。滚动的AWT组件AWT组件绝对不要用JscrollPane类来实现滚动。滚动AWT组件的时候一定要用AWTScrollPane组件来实现。避免在InternalFrame组件中使用AWT组件尽量不要这么做,要不然会出现不可预料的后果。Z-Order问题AWT

27、组件总是显示在Swing组件之上。当使用包含AWT组件的POP-UP菜单的时候要小心,尽量不要这样使用。6.6 调试调试在软件开发中是一个很重要的部分,存在软件生命周期的各个部分中。调试能够用配置开、关是最基本的。很常用的一种调试方法就是用一个PrintStream类成员,在没有定义调试流的时候就为null,类要定义一个debug方法来设置调试用的流。6.7 性能在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。不必要的对象构造不要在循环中构造和释放对象6.8 使用StringBuffer和StringBuilder对象在处理String的时候要尽量使用StringBuf

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1