Java编程规范_参考_第1页
Java编程规范_参考_第2页
Java编程规范_参考_第3页
Java编程规范_参考_第4页
Java编程规范_参考_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、Java编码规范制定本编程格式的目的是为了使软件可读性好、 兼容性好、易维护等等。 注:加( *)者为重要保证要求。一、命名规范1.1 Package 的命名 (*)Package 的名字应由一个小写单词组成。为了保证包的唯一性,一般以公司国际域名开头。 例如: com.elanbase.db 。1.2 Class 的命名 (*)Class 的名字必须由大写字母开头,并且其它单词的首写字母也要大写。例如: DbAccess。1.3 Class 成员属性及变量的命名 (*)变量 /成员属性的名字用一个小写字母开头,后面的单词以大写字母开头。例如: private String lastName;

2、1.4 常量的命名 (*)Java 里的常量, 是用 static final 修饰的, 应该用全大写加下划线命名, 并且常量名应尽量指出 完整含义。如:public static final String ORACLE_DB_DRIVER = oracle.jdbc.driver.OracleDriver ;1.5 数组的命名数组应该总是用下面的形式来命名:byte buffs;而不是:byte buffs;1.6 方法的参数 和变量的命名规范一致,且应使用有意义的参数命名,如果可能的话,使用和要赋值的 属性一样的名字,如:setCounter(int size)this.size = si

3、ze;1.7 方法命名 (*) 用一个小写字母开头,后面的单词以大写字母开头。应意义明确,对于属性的存取方法, 应使用 getXXX() 和 setXXX() 名称,以 isXXX() , hasXXX() 来命名返回值为 boolean 类型的 方法。1.8 一般命名注意事项a. 用有意义的名字命名变量 首先,用完整的英语单词或约定俗成的简写命名变量,鼓励多用约定俗成的简写命名变量。 例如:public String zipCodepublic int errNob. 用复数命名 Collection 类变量Collection , 包括数组, Vector 等。命名时使用复数: 例如:pu

4、blic Collection customers二、Java 源文件样式Java(*.java) 源文件应遵守如下的样式规则2.1 Class 代码布局:packageJavadoc 注释或者其它文件头注释 类声明Fields 声明空行构造函数空行克隆方法空行其它方法(不包括 main)空行内部( Inner )类空行main() 方法2.2 版权信息版权信息必须在 java 文件的开头, 例如:/* Title: 编码过滤器 * Description: 该类实现把 request 请求编码为 web.xml 文件中所配置的字符集 * Copyright: Copyright (c) 20

5、03* Company: 华软软件学院 * author weiowen* version 1.0*/2.3 Package/Imports( *)package 行要在版权信息之前,中间空一行。将import的classes归类,按顺序罗列:a. Java 标准类 (java.*)b. Java 扩充类 (javax.*)c. 第三方类d. 你的应用程序的类每一类空一行。注意在第三方类里进行注释,说明它们的来源。如果 import 行中包含了同一个包中的 多个类,不推荐用 import pakage. * 来处理,推荐把要用的类一一 import 出来。这样程序 用到哪些类就可以非常清楚的看

6、出来,有利于代码的维护,增强了代码的可读性。例如:import java.util.Observable;import java.util.Date;import javax.sql.Connection;/Apache Xercesimport org.apache.xml.*;import org.apache.xerces.dom.*;/Application classesimport com.elanbase.db.DbAccess2.4 Class Fields类的成员变量:/* Packet counters*/protected int packets;*)/ 。 protec

7、ted 、public 的成员变量必须以生成文档( JavaDoc )的方式进行注释( /* private 和 package 定义的成员变量如果名字含义明确的话,可以没有注释。 Field 定义可遵从以下顺序:a. public 常量b. public 变量c. protected 常量d. protected 变量e. package 常量f. package 变量g. private 常量h. private 变量2.5 存取方法 (getter ,setter)接下来是类成员变量的存取的方法。2.6 构造方法 (*)重载的构造方法应该用递增的方式写(参数多的写在后面)。public

8、CounterSet()this(10);public CounterSet(int size)this.size = size;2.7 克隆方法 如果这个类是可以被克隆的,就应实现 clone 方法: public Object clone() try CounterSet obj = (CounterSet)super.clone();obj.packets = (int)packets.clone();obj.size = size; return obj;catch(CloneNotSupportedException e) throw new InternalError(Unexpe

9、cted CloneNotSUpportedException: +e. getMessage();2.8 类方法 下面开始写类方法: /* Set the packet counters* (such as when restoring from a database)*/protected final void setArray(int r1, int r2, int r3, int r4) throws IllegalArgumentException / Ensure the arrays are of equal size/if (r1.length != r2.length | r

10、1.length != r3.length | r1.length != r4.length)throw new IllegalArgumentException(Arrays must be of the same size); System.arraycopy(r1, 0, r3, 0, r1.length);System.arraycopy(r2, 0, r4, 0, r1.length);2.9 toString 方法 每一个类都最好定义 toString 方法: public String toString() String retval = CounterSet: ;for (in

11、t i = 0; i 0) i + ; / 正确, 单独作为一行 不推荐使用:if (i0) i + ; / 错误, 和 在同一行 或if (i0) / 错误 , 应在上一行末尾。i + ; 语句永远单独作为一行。3.8 if else 语句 (*)多条件连续判断语句应按以下格式书写:if () else if () else 应注意 if 语句总应使用括号,要避免以下容易出错的写法: if (condition) / 避免。此处略去了 !statement;或if (condition) statement;3.9 括号左括号和后一个字符之间不应该出现空格 , 同样 , 右括号和前一个字符之

12、间也不应该出 现空格。下面的例子说明括号和空格的错误及正确使用 :CallProc( AParameter ); / 错误 CallProc(AParameter); / 正确 不要在语句中使用无意义的括号。括号只应该为达到某种目的(如语法要求或增加程序 可读性)而出现在源代码中。下面的例子说明错误和正确的用法:if (I) = 42) / 错误,括号毫无意义if (I = 42) or (J = 42) / 正确,的确需要括号3.10 语句 每行只能包括一句代码。如: argv+; / 正确 argc-; / 正确 argv+; argc-; /避免 !3.11 使用空格空格应依如下规则使用

13、:1关键字与括号之间应加一空格 (*),如:( while 与小括号间有空格)while (true) 注意在方法名和左括号之间不应加空格,这样有助于区分关键字和方法调用。 2参数列表中逗号后面应加一个空格(*)。3操作数与操作符之间应该加一空格,除了“.”操作符和一元操作符,即“ + ”和“ (*)例: a += c + d;a = (a + b) / (c * d);while (d+ = s+) n+; printSize(size is + foo + n);4 for 语句中的表达式应以空格分开 (*):for (expr1; expr2; expr3) 5强制类型转换应加空格,如:

14、 myMethod(byte) aNum, (Object) x); myMethod(int) (cp + 5), (int) (i + 3) + 1);四、程序编写规范4.1 使用方法来访问实例变量和类变量 (*) 如果没有很好的理由,一般不应将实例变量或类变量设为 public ,将变量设为 public 的典型应用是此类代表一个“数据结构”,而不包含任何方法。4.2 引用类变量和类方法 (*) 避免使用对象引用来访问类( static) 变量或类方法,而应使用类名来访问。如: classMethod(); /OKAClass.classMethod(); /OK anObject.cl

15、assMethod(); / 避免 !4.3 常量 (*)数字常量不应直接在编码中出现,除非是 for循环中用于计数的 -,0,或1。 字符串常量尽量不直接在编码中出现。4.4 ? 前的逻辑运算表达式?前的逻辑运算表达式应以括号括起,如:(x = 0) ? x : -x;4.5 特殊注释注释用 XXX 表示当前是伪码,但可以工作,用 FIXME 标记有问题的部分。 (Use XXX in a comment to flag something that is bogus but works. Use FIXME to flag something that is bogus and broke

16、n.)4.6 例外申明的错误应该抛出一个 RuntimeException 或者派生的例外。顶层的 main() 函数应该截获所有的例外,并且打印(或者记录在日志中)在屏幕上。五、编程实践问题5.1 exit()exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代 码机会来截获退出。一个类似后台服务的程序不应该因为某一个库模块决定了要退出就退 出。5.2 垃圾收集JAVA 使用成熟的后台垃圾收集技术来代替引用计数。 但是这样会导致一个问题: 你必须在使用 完对象的实例以后进行清场工作。例如:FileOutputStream fos = new FileOutp

17、utStream(projectFile) ;project.save(fos, IDE Project File) ; fos.close() ;fos = null ; 记住!必须在使用完对象的实例以后将其关闭并且将其设置为 null 。5.3 final 类 绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求) 如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。 这是因为没有人可以保证会不会由于什么原因需要继承它。5.4 性能 在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码 上,而是我们时刻应该提醒自己要注

18、意代码的效率。比如:如果没有时间来实现一个高效的 算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。 不是所有的人都同意在写代码的时候应该优化性能这个观点,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。应注意:不必要的对象构造不要在循环中构造和释放对象5.5 使用 StringBuffer 对象在处理 String 的时候要尽量使用 StringBuffer 类, StringBuffer 类是构成 String 类的 基础。 String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供 了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分 的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一 个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer 对象和她的 append() 方法。如果我们用 Str

温馨提示

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

评论

0/150

提交评论