![Java编程规范_参考_第1页](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/a83a5209-49bf-4779-8056-482d8d6cbd3f/a83a5209-49bf-4779-8056-482d8d6cbd3f1.gif)
![Java编程规范_参考_第2页](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/a83a5209-49bf-4779-8056-482d8d6cbd3f/a83a5209-49bf-4779-8056-482d8d6cbd3f2.gif)
![Java编程规范_参考_第3页](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/a83a5209-49bf-4779-8056-482d8d6cbd3f/a83a5209-49bf-4779-8056-482d8d6cbd3f3.gif)
![Java编程规范_参考_第4页](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/a83a5209-49bf-4779-8056-482d8d6cbd3f/a83a5209-49bf-4779-8056-482d8d6cbd3f4.gif)
![Java编程规范_参考_第5页](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/a83a5209-49bf-4779-8056-482d8d6cbd3f/a83a5209-49bf-4779-8056-482d8d6cbd3f5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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
3、.size = size;1.7 方法命名 (*)用一个小写字母开头,后面的单词以大写字母开头。应意义明确,对于属性的存取方法,应使用getXXX()和setXXX()名称,以isXXX() , hasXXX()来命名返回值为 boolean 类型的 方法。1.8 一般命名注意事项a. 用有意义的名字命名变量首先,用完整的英语单词或约定俗成的简写命名变量,鼓励多用约定俗成的简写命名变量。例如:public String zipCodepublic int errNob. 用复数命名 Collection 类变量Collection , 包括数组,Vector 等。命名时使用复数:例如:publ
4、ic Collection customers二、 Java 源文件样式Java(*.java) 源文件应遵守如下的样式规则2.1 Class 代码布局:packageJavadoc 注释或者其它文件头注释类声明Fields 声明空行构造函数空行克隆方法空行其它方法(不包括main)空行内部( Inner )类空行main() 方法2.2 版权信息版权信息必须在java 文件的开头,例如: /* <p>Title: 编码过滤器</p>* <p>Description: 该类实现把request 请求编码为web.xml 文件中所配置的字符集</p>
5、;* <p>Copyright: Copyright (c) 2003</p>* <p>Company: 华软软件学院</p>* author weiowen* version 1.0*/2.3 Package/Imports( *)package 行要在版权信息之前,中间空一行。将import的classes归类,按顺序罗列:a. Java 标准类(java.*)b. Java 扩充类(javax.*)c. 第三方类d. 你的应用程序的类每一类空一行。注意在第三方类里进行注释,说明它们的来源。如果import 行中包含了同一个包中的多个类,不推
6、荐用 import pakage. * 来处理,推荐把要用的类一一import 出来。这样程序用到哪些类就可以非常清楚的看出来,有利于代码的维护,增强了代码的可读性。例如:import java.util.Observable;import java.util.Date;import javax.sql.Connection;/Apache Xercesimport org.apache.xml.*;import org.apache.xerces.dom.*;/Application classes import com.elanbase.db.DbAccess2.4 Class Field
7、s类的成员变量:/* * Packet counters */ protected int packets;protected 、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)接下来是类成员
8、变量的存取的方法。2.6 构造方法 (*)重载的构造方法应该用递增的方式写(参数多的写在后面)。public 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(CloneNotS
9、upportedException e) throw new InternalError("Unexpected 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 / Ensur
10、e the arrays are of equal size/if (r1.length != r2.length | r1.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 方法每一个类都最好定义toStr
11、ing 方法:public String toString() String retval = "CounterSet: "for (int i = 0; i < data.length(); i+) retval += data.bytes.toString(); retval += data.packets.toString();return retval;2.10 main 方法(*)如果类中包含 main(String) 方法 , 那么它应该写在类的底部。三、代码编写风格3.1 代码格式代码应该用 unix 的格式,而不是windows 的(比如:回车变成回车
12、+换行)。3.2 文档化 (*)必须遵守 javadoc 风格来为源程序写注释。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。3.3 缩进 (*)缩进采用 4 个空格 ( 2 个太少不明显, 8 个太多占空间)。不要在源文件中保存Tab字符 (!) 。在使用不同的源代码管理工具时Tab 字符将因为用户设置的不同而显示为不同的宽度。例如:在Jbuilder7 中作如下设置:在Tools Editor Options Editor面板上修改 Block Indent为4, Tab Size 为4。3.4 行宽行宽应该设置为 80 字符。源代码一行一般不应超过这个宽度,这会导致无法完
13、整显示。但这一设置也可以灵活调整。超长的语句应该在一个逗号后或者一个操作符前折行。一条语句折行后,应该根据实际情况进行缩进,总的原则是代码看起来清楚整洁。3.5 折行 (*)需要折行时应遵循如下原则: 在逗号后。 在操作符前。 高级别优先(例1)。 第二行做两次缩进,第三行与第二行对齐。例1 :longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; / 推荐使用longName1 = longName2 * (longName3 + longName4- longName5) + 4 * long
14、name6; / 避免使用例2/ 均缩进 8 个空格以避免很深的缩进private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg,Object andStillAnother) / 下一层语句 4 空格缩进/ 避免此种缩进if (condition1 && condition2)| (condition3 && condition4)|!(condition5 && condition6) / 此折行方式不佳
15、doSomethingAboutIt(); / 此行不易读/ 应用此种断行/ 缩进方式if (condition1 && condition2)| (condition3 && condition4)|!(condition5 && condition6) doSomethingAboutIt();/ 或此种折行/ 缩进方式if (condition1 && condition2) | (condition3 && condition4) |!(condition5 && condition6) d
16、oSomethingAboutIt();三重表达式可用以下缩进方式:alpha = (aLongBooleanExpression) ? beta : gamma;或:alpha = (aLongBooleanExpression) ? beta: gamma;或:alpha = (aLongBooleanExpression)? beta: gamma;3.6 变量声明推荐一行只写一行变量声明语句,这样有助于写注释。如:int level; / indentation levelint size; / size of table是推荐的,而要避免:int level, size;的写法。此外
17、,要杜绝不同类型变量写在一行的错误:int foo, fooarray;3.7 对 中的语句应该单独作为一行,并采用如下风格:if (i>0) i + ; / 正确 , 单独作为一行不推荐使用:if (i>0) i + ; / 错误 , 和 在同一行或if (i>0) / 错误 , 应在上一行末尾。i + ; 语句永远单独作为一行。3.8 if else 语句 (*)多条件连续判断语句应按以下格式书写:if() else if () else 应注意 if 语句总应使用括号,要避免以下容易出错的写法:if (condition) / 避免。此处略去了 !statement;或
18、if (condition) statement;3.9 括号左括号和后一个字符之间不应该出现空格 , 同样 , 右括号和前一个字符之间也不应该出现空格。下面的例子说明括号和空格的错误及正确使用 :CallProc( AParameter ); / 错误CallProc(AParameter); / 正确不要在语句中使用无意义的括号。括号只应该为达到某种目的(如语法要求或增加程序可读性)而出现在源代码中。下面的例子说明错误和正确的用法:if (I) = 42) / 错误,括号毫无意义if (I = 42) or (J = 42) / 正确,的确需要括号3.10 语句每行只能包括一句代码。如:a
19、rgv+; / 正确argc-; / 正确argv+; argc-; / 避免 !3.11 使用空格空格应依如下规则使用:1 关键字与括号之间应加一空格(*),如:(while 与小括号间有空格)while (true) 注意在方法名和左括号之间不应加空格,这样有助于区分关键字和方法调用。2 参数列表中逗号后面应加一个空格 (*)。3 操作数与操作符之间应该加一空格,除了“.”操作符和一元操作符,即“+ ”和“ (*)例:a += c + d;a = (a + b) / (c * d);while (d+ = s+) n+;printSize("size is " + fo
20、o + "n");4 for 语句中的表达式应以空格分开(*):for (expr1; expr2; expr3)5强制类型转换应加空格,如:myMethod(byte) aNum, (Object) x);myMethod(int) (cp + 5), (int) (i + 3) + 1);四、程序编写规范4.1 使用方法来访问实例变量和类变量 (*)如果没有很好的理由,一般不应将实例变量或类变量设为 public ,将变量设为 public 的典型应用是此类代表一个“数据结构”,而不包含任何方法。4.2 引用类变量和类方法 (*)避免使用对象引用来访问类( static
21、) 变量或类方法,而应使用类名来访问。如:classMethod(); /OKAClass.classMethod(); /OKanObject.classMethod(); / 避免 !4.3 常量 (*)数字常量不应直接在编码中出现,除非是 for循环中用于计数的-1, 0,或1。字符串常量尽量不直接在编码中出现。4.4 ?前的逻辑运算表达式?前的逻辑运算表达式应以括号括起,如:(x >= 0) ? x : -x;4.5 特殊注释注释用 XXX 表示当前是伪码,但可以工作,用 FIXME 标记有问题的部分。 (Use XXX ina comment to flag something
22、 that is bogus but works. Use FIXME to flag something thatis bogus and broken.)4.6 例外申明的错误应该抛出一个RuntimeException 或者派生的例外。顶层的 main() 函数应该截获所有的例外,并且打印(或者记录在日志中)在屏幕上。五、编程实践问题5.1 exit()exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码机会来截获退出。一个类似后台服务的程序不应该因为某一个库模块决定了要退出就退出。5.2 垃圾收集JAVA 使用成熟的后台垃圾收集技术来代替引用计数。
23、但是这样会导致一个问题: 你必须在使用完对象的实例以后进行清场工作。例如:FileOutputStream fos = new FileOutputStream(projectFile) ;project.save(fos, "IDE Project File") ;fos.close() ;fos = null ;记住!必须在使用完对象的实例以后将其关闭并且将其设置为 null 。5.3 final 类绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求)如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承它。5.4 性能在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晋中山西晋中市太谷区面向2025届公费师范生招聘教师18人笔试历年参考题库附带答案详解
- 2025年中国太子佛工艺品市场调查研究报告
- 2025至2031年中国高压透镜行业投资前景及策略咨询研究报告
- 2025年艺术道闸项目可行性研究报告
- 2025年红外线按摩棒项目可行性研究报告
- 2025年电加热针织物呢毯预缩机项目可行性研究报告
- 成都四川成都天府国际竞技训练中心招聘运动员4人笔试历年参考题库附带答案详解
- 2025年曲印项目可行性研究报告
- 2025年揉切粉碎机项目可行性研究报告
- 2025年安康鱼野菜串项目可行性研究报告
- 医院培训课件:《伤口评估与测量》
- 期末试卷(试题)-2024-2025学年四年级上册数学沪教版
- 《第一单元口语交际:即兴发言》教案-2023-2024学年六年级下册语文统编版
- 情侣自愿转账赠与协议书范本
- 综合实践项目 制作水族箱饲养淡水鱼 教学设计-2024-2025学年鲁科版生物六年级上册
- 公转私付款合同模板
- 安徽省2024年高考语文模拟试卷及答案5
- 江西省“振兴杯”信息通信网络运行管理员竞赛考试题库-上(单选题)
- DLT 5756-2017 额定电压35kV(Um=40.5kV)及以下冷缩式电缆附件安装规程
- 关于餐饮合同范本
- 2023高考数学艺考生一轮复习讲义(学生版)
评论
0/150
提交评论