logo资料库

Java语言编程规范--华为技术有限公司.doc

第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
资料共45页,剩余部分请下载后查看
1 范围
2 规范性引用文件
1 术语和定义
2 排版规范
2.1 规则
1.*程序块要采用缩进风格编写,缩进的空格数为4个。
2.*分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函
3.*较长的语句、表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,
4.*不允许把多个短语句写在一行中,即一行只写一条语句
5.*if, for, do, while, case, switch, default 等语句自
6.*相对独立的程序块之间、变量说明之后必须加空行。
7.*对齐只使用空格键,不使用TAB键。
8.*在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进
2.2 建议
1.类属性和类方法不要交叉放置,不同存取范围的属性或者方法也尽量不要交叉放置。
3 注释规范
3.1 规则
1.一般情况下,源程序有效注释量必须在30%以上。
2.包的注释:包的注释写入一个名为 package.html 的HTML格式的说明文件放入当前路径
3.包的注释内容:简述本包的作用、详细描述本包的内容、产品模块名称和版本、公司版权。
4.文件注释:文件注释写入文件头部,包名之前的位置。
5.文件注释内容:版权说明、描述信息、生成日期、修改历史。
6.类和接口的注释:该注释放在 package 关键字之后,class 或者 interface
7.类和接口的注释内容:类的注释主要是一句话功能简述、功能详细描述,
8.类属性、公有和保护方法注释:写在类属性、公有和保护方法上面。
9. 成员变量注释内容:成员变量的意义、目的、功能,可能被用到的地方。
10.公有和保护方法注释内容:列出方法的一句话功能简述、功能详细描述、输入参数、输出参数、返回值、
11.对于方法内部用throw语句抛出的异常,必须在方法的注释中标明,对于所调用的其他方法所抛出的
12.*注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可
13.*注释与所描述内容进行同样的缩排。
14.*将注释与其上面的代码用空行隔开。
15.*对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
16.*对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个c
17.*边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除
18.*注释的内容要清楚、明了,含义准确,防止注释二义性。
19.*避免在注释中使用缩写,特别是不常用缩写。
3.2 建议
1.*避免在一行代码或表达式的中间插入注释。
2.*通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。
3.*在代码的功能、意图层次上进行注释,提供有用、额外的信息。
4.*在程序块的结束行右方加注释标记,以表明某程序块的结束。
5.*注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常
6.方法内的单行注释使用 //。
7.注释尽量使用中文注释和中文标点。方法和类描述的第一句话尽量使用简洁明了的话概括一下功能,然后加
8.顺序实现流程的说明使用1、2、3、4在每个实现步骤部分的代码前面进行注释。
9. 一些复杂的代码需要说明。
4 命名规范
4.1 规则
1.包名采用域后缀倒置的加上自定义的包名,采用小写字母。在部门内部应该规划好包名的范围,防止产生冲
2.类名和接口使用类意义完整的英文描述,每个英文单词的首字母使用大写、其余字母使用小写的大小写混合
3.方法名使用类意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小
4.方法中,存取属性的方法采用setter 和 getter方法,动作方法采用动词和动宾结构。
5.属性名使用意义完整的英文描述:第一个单词的字母使用小写、剩余单词首字母大写其余字母小写的大小写
6.常量名使用全大写的英文描述,英文单词之间用下划线分隔开,并且使用 final static 修
7.属性名可以和公有方法参数相同,不能和局部变量相同,引用非静态成员变量时使用 this 引用,引
4.2 建议
1.常用组件类的命名以组件名加上组件类型名结尾。
2.如果函数名超过15 个字母,可采用以去掉元音字母的方法或者以行业内约定俗成的缩写方式缩写函数名
3.准确地确定成员函数的存取控制符号,不是必须使用 public 属性的,请使用 protecte
4.含有集合意义的属性命名,尽量包含其复数的意义。
5 编码规范
5.1 规则
1.*明确方法功能,精确(而不是近似)地实现方法设计。一个函数仅完成一件功能,即使简单功能也应该编
2.应明确规定对接口方法参数的合法性检查应由方法的调用者负责还是由接口方法本身负责,缺省是由方法调
3.明确类的功能,精确(而不是近似)地实现类的设计。一个类仅实现一组相近的功能。
4.所有的数据类必须重载toString() 方法,返回该类有意义的内容。
5.数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finall
6.异常捕获后,如果不对该异常进行处理,则应该纪录日志或者ex.printStackTrace()
7.自己抛出的异常必须要填写详细的描述信息。
8.运行期异常使用RuntimeException的子类来表示,不用 在可能抛出异常的方法声明上加
9.在程序中使用异常处理还是使用错误返回码处理,根据是否有利于程序结构来确定,并且异常和错误码不应
10.*注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
11.*避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接
12.数组声明的时候使用 int[] index ,而不要使用 int index[] 。
13.调试代码的时候,不要使用 System.out 和 System.err 进行打印,应该使用
14.用调测开关来切换软件的DEBUG版和正式版,而不要同时存在正式版本和DEBUG版本的不同源文
5.2建议
1.记录异常不要保存exception.getMessage(),而要记录exception.to
2.一个方法不应抛出太多类型的异常。
3.异常捕获尽量不要直接 catch (Exception ex),应该把异常细分处理。
4.*如果多段代码重复做同一件事情,那么在方法的划分上可能存在问题。
5.对于创建的主要的类,最好置入main()函数,包含用于测试那个类的代码 。
6.集合中的数据如果不使用了应该及时释放,尤其是可重复使用的集合。
7.*源程序中关系较为紧密的代码应尽可能相邻。
8.*不要使用难懂的技巧性很高的语句,除非很有必要时。
6 JTEST规范
6.1 规则(1-2 级)
1.在switch 中每个 case 语句都应该包含 break 或者 return 。
2.不要使用空的for 、if 、while 语句。
3.在运算中不要减小数据的精度。
4.switch 语句中的 case 关键字要和后面的常量保持一个空格,switch 语句中不要定
5.不要在if 语句中使用等号= 进行赋值操作。
6.静态成员或者方法使用类名访问,不使用句柄访问。
7.方法重载的时候,一定要注意方法名相同,避免类中使用两个非常相似的方法名。
8.不要在ComponentListener.componentResized() 方法中调用 s
9.不要覆盖父类的静态方法和私有方法。
10.不要覆盖父类的属性。
11.不要使用两级以上的内部类。
12.把内部类定义成私有类。
13.去掉接口中多余的定义(不使用 public, abstract, static, final
14.不要定义不会被用到的局部变量、类私有属性、类私有方法和方法参数。
15.显式初始化所有的静态属性。
16.不要使用 System.getenv() 方法。
17.不要硬编码 ‘\n’和‘\r’作为换行符号。
18.不要直接使用 java.awt.peer.* 里面的接口。
19.使用 System.arraycopy() ,不使用循环来复制数组。
20.避免不必要的 instanceof 比较运算和类造型运算。
21.不要在 finalize() 方法中删除监听器(Listeners)。
22.在 finalize() 方法中一定要调用 super.finalize() 方法。
23.在 finalize() 方法中的 finally 中调用 super.finalize()
24.进行字符转换的时候应该尽可能的较少临时变量。
25.使用ObjectStream 的方法后,调用reset() ,释放对象。
26.线程同步中,在循环里面使用条件测试(使用 while(isWait) wait() 代替 i
27.不调用 Thread 类的 resume(), suspend(), stop() 方法。
28.减小单个方法的复杂度,使用的 if, while, for, switch 语句要在10个以
29.在Servlets中,重用JDBC连接的数据源。
30.减少在Sevlets中使用的同步方法。
31.不定义在包中没有被用到的友好属性、方法和类。
32.没有子类的友好类应该定义成 final 。
33.没有被覆盖的友好方法应该定义成 final 。
6.2 建议(3级或以上)
1.为 switch 语句提供一个 default 选项。
2.不要在 for 循环体中对计数器的赋值。
3.不要给非公有类定义 public 构建器。
4.不要对浮点数进行比较运算,尤其是不要进行 ==, !=运算,减少 >, < 运算。
5.实现 equals() 方法时,先用 getClass() 或者 instanceof 进行类
6.不要重载 main() 方法用作除入口以外的其他用途。
7.方法的参数名不要和类中的方法名相同。
8.除了构建器外,不要使用和类名相同的方法名。
9.不要定义 Error 和 RuntimeException 的子类,可以定义 Exceptio
10.线程中需要实现 run() 方法。
11.使用 equals() 比较两个类的值是否相同。
12.字符串和数字运算结果相连接的时候,应该把数字运算部分用小括号括起来。
13.类中不要使用非私有(公有、保护和友好)的非静态属性。
14.在类中对于没有实现的接口,应该定义成抽象方法,类应该定义成抽象类。(5级)
15.不要显式导入 java.lang.* 包;
16.初始化时不要使用类的非静态属性。
17.显式初始化所有的局部变量。
18.按照方法名把方法排序放置,同名合同类型的方法应该放在一起。
19.不要使用嵌套赋值,即在一个表达式中使用多个 = 。
20.不要在抽象类的构建器中调用抽象方法。
21.重载 equals() 方法的同时,也应该重载 hashCode() 方法。
22.工具类(Utility)不要定义构建器,包括私有构建器。
23.不要在 switch 中使用10个以上的 case 语句。
24.把 main() 方法放在类的最后。
25.声明方法违例的时候不要使用 Exception ,应该使用它的子类。
26.不要直接扔出一个Error ,应该扔出它的子类。
27.在进行比较的时候,总是把常量放在同一边(都放在左边或者都放在右边)。
28.在可能的情况下,总是为类定义一个缺省的构建器。
29.在捕获违例的时候,不使用 Exception, RuntimeException, Thro
30.在接口或者工具类中中定义常量。(5级)
31.使用大写‘L’表示 long 常量。(5级)
32.main() 方法必须是 public static void main(String[])
33.对返回类型为 boolean 的方法使用 is 开头,其它类型的不能使用。
34.对非boolean类型取值方法(getter)使用 get 开头,其它类型的不能使用。
35.对于设置值的方法(setter)使用 set 开头,其它类型的不能使用。
36.方法需要有同样数量参数的注释 @param。
37.不要在注释中使用不支持的标记,如:@unsupported 。
38.不要使用 Runtime.exec() 方法。
39.不要自定义本地方法(native method)。
40.使用尽量简洁的的运算符号。
41.使用集合时设置初始容量。
42.单个首字符的比较使用 charAt() 而不用 startsWith() 。
43.对于被除数或者被乘数为2的n次方的乘除运算使用移位运算符 >>, << 。
44.一个字符的连接使用‘ ’而不使用 “ ”,如:String a = b + 'c'。
45.不要在循环体内调用同步方法和使用 try-catch 块。
46.不要使用不必要的布尔值比较,如:if (a.equals(b)), 而不是 if (a.eq
47.常量字符串使用 String, 非常量字符串使用 StringBuffer 。
48.在循环条件判断的时候不要使用复杂的表达式。
49.对于“if (condition) do1; else do2;”语句使用条件操作符“if
50.不要在循环体内定义变量。
51.使用StringBuffer的时候设置初始容量。
52.尽可能的使用局部变量进行运算。
53.尽可能少的使用 ‘!’操作符。(5级)
54.尽可能的对接口进行 instanceof 运算。(5级)
55.不要使用 Date[] 而要使用 long[] 替代。
56.不要显式调用 finalize() 。
57.不要使用静态集合,其内存占用增长没有边界。
58.不要重复调用一个方法获取对象,使用局部变量重用对象。
59.线程同步中,使用 notifyAll() 代替 notify()。
60.避免在同步方法中调用另一个同步方法造成的死锁。
61.非同步方法中不能调用 wait() , notify() 方法。
62.使用 wait(), notify() 代替 while(), sleep() 。
63.不要使用同步方法,使用同步块。(5级)
64.把所有的公有方法定义为同步方法。 (5级)
65.实现的 Runnable.run() 方法必须是同步方法。 (5级)
66.一个只有abstract方法、final static 属性的类应该定义成接口。
67.在 clone() 方法中应该而且必须使用 super.clone() 而不是 new 。
68.常量必须定义为 final 。
69.在 for 循环中提供终止条件。
70.在 for, while 循环中使用增量计数。
71.使用 StringTokenizer 代替 indexOf() 和 substring()
72.不要在构建器中使用非 final 方法。
73.不要对参数进行赋值操作。(5级)
74.不要通过名字比较两个对象的类,应该使用 getClass() 。
75.安全:尽量不要使用内部类。
76.安全:尽量不要使类可以克隆。
77.安全:尽量不要使接口可以序列化。
78.安全:尽量不要使用友好方法、属性和类。
79.Servlet:不要使用 java.beans.Beans.instantiate() 方法
80.Servlet:不再使用HttpSession时,应该尽早使用 invalidate() 方
81.Servlet:不再使用JDBC资源时,应该尽早使用 close() 方法释放 。
82.Servlet:不要使用Servlet的 SingleThreadModel,会消耗大量资源
83.国际化:不要使用一个字符进行逻辑操作,使用 Characater。
84.国际化:不要进行字符串连接操作,使用MessageFormat 。
85.国际化:不要使用 Date.toString() ,Time.toString() 方法。
86.国际化:字符和字符串常量应该放在资源文件中。
87.国际化:不要使用数字的 toString() 方法。
88.国际化:不要使用 StringBuffer , StringTokenizer类。
89.国际化:不要使用 String 类的 compareTo(), equals() 方法。
90.复杂度:建议的最大规模:
7 参考文献
DKBA 华为技术有限公司企业技术规范 DKBA1040-2001.12 代替(DKBA200106-003) Java语言编程规范 2001-12-XX发布 2001-12-XX实施 华 为 技 术 有 限 公 司发布
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 目 次 前 言 ................................................................................. 3 1 范围 2 规范性引用文件 3 术语和定义 4 排版规范 4.1 规则 1.*程序块要采用缩进风格编写,缩进的空格数为4个。 2.*分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与 引用它们的语句左对齐。在函数体的开始、类和接口的定义、以及if、 for、do、while、switch、case语句中的程序都要采用如上的缩进 方式。 3.*较长的语句、表达式或参数(>80字符)要分成多行书写,长 表达式要在低优先级操作符处划分新行,操作符放在新行之 首,划分出的新行要进行适当的缩进,使排版整齐,语句可 读。 4.*不允许把多个短语句写在一行中,即一行只写一条语句 5.*if, for, do, while, case, switch, default 等语句自占一 行,且if, for, do, while等语句的执行语句无论多少都要加括 号{}。 6.*相对独立的程序块之间、变量说明之后必须加空行。 7.*对齐只使用空格键,不使用TAB键。 8.*在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作 符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切 的立即操作符(如.),后不应加空格。 4.2 建议 1.类属性和类方法不要交叉放置,不同存取范围的属性或者方 法也尽量不要交叉放置。 2005-10-15, 11:40:39 2 11 11 11 12 12 12 12 13 13 13 13 14 14 15 15
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 5 注释规范 5.1 规则 1.一般情况下,源程序有效注释量必须在30%以上。 2.包的注释:包的注释写入一个名为 package.html 的HTML格式的说明 文件放入当前路径。 3.包的注释内容:简述本包的作用、详细描述本包的内容、产 品模块名称和版本、公司版权。 4.文件注释:文件注释写入文件头部,包名之前的位置。 5.文件注释内容:版权说明、描述信息、生成日期、修改历史。 6.类和接口的注释:该注释放在 package 关键字之后,class 或者 interface 关键字之前。 7.类和接口的注释内容:类的注释主要是一句话功能简述、功能详 细描述, 8.类属性、公有和保护方法注释:写在类属性、公有和保护方法上面。 9. 成员变量注释内容:成员变量的意义、目的、功能,可能被用到的 地方。 10.公有和保护方法注释内容:列出方法的一句话功能简述、功能详 细描述、输入参数、输出参数、返回值、违例等。 11.对于方法内部用throw语句抛出的异常,必须在方法的注释中 标明,对于所调用的其他方法所抛出的异常,选择主要的在注 释中说明。 对于非RuntimeException,即throws子句声明会抛出 的异常,必须在方法的注释中标明。 12.*注释应与其描述的代码相近,对代码的注释应放在其上方或右方 (对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其 上面的代码用空行隔开。 13.*注释与所描述内容进行同样的缩排。 14.*将注释与其上面的代码用空行隔开。 15.*对变量的定义和分支语句(条件分支、循环语句等)必须编写注 释。 16.*对于switch语句下的case语句,如果因为特殊情况需要处理完一 个case后进入下一个case处理,必须在该case语句处理完、下一个 case语句前加上明确的注释。 17.*边写代码边注释,修改代码同时修改相应的注释,以保证注释与代 码的一致性。不再有用的注释要删除。 18.*注释的内容要清楚、明了,含义准确,防止注释二义性。 2005-10-15, 11:40:39 3 16 16 16 16 16 16 17 18 18 19 19 19 20 20 20 21 21 21 21 21
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 19.*避免在注释中使用缩写,特别是不常用缩写。 5.1 建议 1.*避免在一行代码或表达式的中间插入注释。 2.*通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结 构,使代码成为自注释的。 3.*在代码的功能、意图层次上进行注释,提供有用、额外的信息。 4.*在程序块的结束行右方加注释标记,以表明某程序块的结束。 5.*注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有 的,建议多使用中文,除非能用非常流利准确的英文表达。 6.方法内的单行注释使用 //。 7.注释尽量使用中文注释和中文标点。方法和类描述的第一句话尽量使 用简洁明了的话概括一下功能,然后加以句号。接下来的部分可以详细 描述。 8.顺序实现流程的说明使用1、2、3、4在每个实现步骤部分的代 码前面进行注释。 9. 一些复杂的代码需要说明。 6 命名规范 6.1 规则 1.包名采用域后缀倒置的加上自定义的包名,采用小写字母。 在部门内部应该规划好包名的范围,防止产生冲突。部门内部 产品使用部门的名称加上模块名称。产品线的产品使用产品的 名称加上模块的名称。 2.类名和接口使用类意义完整的英文描述,每个英文单词的首 字母使用大写、其余字母使用小写的大小写混合法。 3.方法名使用类意义完整的英文描述:第一个单词的字母使用 小写、剩余单词首字母大写其余字母小写的大小写混合法。 4.方法中,存取属性的方法采用setter 和 getter方法,动作方 法采用动词和动宾结构。 5.属性名使用意义完整的英文描述:第一个单词的字母使用小 写、剩余单词首字母大写其余字母小写的大小写混合法。属性 名不能与方法名相同。 6.常量名使用全大写的英文描述,英文单词之间用下划线分隔 开,并且使用 final static 修饰。 2005-10-15, 11:40:39 4 21 21 22 22 22 22 22 22 23 23 23 24 24 24 24 24 24 25 25
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 7.属性名可以和公有方法参数相同,不能和局部变量相同,引 用非静态成员变量时使用 this 引用,引用静态成员变量时使用 类名引用。 6.2 建议 1.常用组件类的命名以组件名加上组件类型名结尾。 2.如果函数名超过15 个字母,可采用以去掉元音字母的方法或 者以行业内约定俗成的缩写方式缩写函数名。 3.准确地确定成员函数的存取控制符号,不是必须使用 public 属性的,请使用 protected,不是必须使用 protected, 请使用 private。 4.含有集合意义的属性命名,尽量包含其复数的意义。 7 编码规范 7.1 规则 1.*明确方法功能,精确(而不是近似)地实现方法设计。一个 函数仅完成一件功能,即使简单功能也应该编写方法实现。 2.应明确规定对接口方法参数的合法性检查应由方法的调用者 负责还是由接口方法本身负责,缺省是由方法调用者负责。 3.明确类的功能,精确(而不是近似)地实现类的设计。一个 类仅实现一组相近的功能。 4.所有的数据类必须重载toString() 方法,返回该类有意义的 内容。 5.数据库操作、IO操作等需要使用结束close()的对象必须在try -catch-finally 的finally中close()。 6.异常捕获后,如果不对该异常进行处理,则应该纪录日志或 者ex.printStackTrace() 。 7.自己抛出的异常必须要填写详细的描述信息。 8.运行期异常使用RuntimeException的子类来表示,不用在可能 抛出异常的方法声明上加throws子句。非运行期异常是从 Exception继承而来的,必须在方法声明上加throws子句。 9.在程序中使用异常处理还是使用错误返回码处理,根据是否 有利于程序结构来确定,并且异常和错误码不应该混合使用, 推荐使用异常。 10.*注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用 默认优先级。 2005-10-15, 11:40:39 5 25 25 25 26 26 26 27 27 27 27 27 27 27 28 28 29 29 29
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 11.*避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态 或者含有物理意义的常量,不应直接使用数字,必须用有意义的静态变 量来代替。 12.数组声明的时候使用 int[] index ,而不要使用 int index[] 。 13.调试代码的时候,不要使用 System.out 和 System.err 进行 打印,应该使用一个包含统一开关的测试类进行统一打印。 14.用调测开关来切换软件的DEBUG版和正式版,而不要同时存在 正式版本和DEBUG版本的不同源文件,以减少维护的难度。 7.2建议 1.记录异常不要保存exception.getMessage(),而要记录 exception.toString()。 2.一个方法不应抛出太多类型的异常。 3.异常捕获尽量不要直接 catch (Exception ex),应该把异常细 分处理。 4.*如果多段代码重复做同一件事情,那么在方法的划分上可能 存在问题。 5.对于创建的主要的类,最好置入main()函数,包含用于测试那 个类的代码 。 6.集合中的数据如果不使用了应该及时释放,尤其是可重复使 用的集合。 7.*源程序中关系较为紧密的代码应尽可能相邻。 8.*不要使用难懂的技巧性很高的语句,除非很有必要时。 8 JTEST规范 8.1 规则(1-2 级) 1.在switch 中每个 case 语句都应该包含 break 或者 return 。 2.不要使用空的for 、if 、while 语句。 3.在运算中不要减小数据的精度。 4.switch 语句中的 case 关键字要和后面的常量保持一个空格, switch 语句中不要定义case 之外的无用标签。 5.不要在if 语句中使用等号= 进行赋值操作。 6.静态成员或者方法使用类名访问,不使用句柄访问。 2005-10-15, 11:40:39 6 29 30 30 30 30 30 31 31 31 31 31 31 31 32 32 32 32 32 32 32 32
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 7.方法重载的时候,一定要注意方法名相同,避免类中使用两 个非常相似的方法名。 8.不要在ComponentListener.componentResized() 方法中调用 serResize() 方法。 9.不要覆盖父类的静态方法和私有方法。 10.不要覆盖父类的属性。 11.不要使用两级以上的内部类。 12.把内部类定义成私有类。 13.去掉接口中多余的定义(不使用 public, abstract, static, final 等,这是接口中默认的)。 14.不要定义不会被用到的局部变量、类私有属性、类私有方法 和方法参数。 15.显式初始化所有的静态属性。 16.不要使用 System.getenv() 方法。 17.不要硬编码 ‘\n’和‘\r’作为换行符号。 18.不要直接使用 java.awt.peer.* 里面的接口。 19.使用 System.arraycopy() ,不使用循环来复制数组。 20.避免不必要的 instanceof 比较运算和类造型运算。 21.不要在 finalize() 方法中删除监听器(Listeners)。 22.在 finalize() 方法中一定要调用 super.finalize() 方法。 23.在 finalize() 方法中的 finally 中调用 super.finalize() 方 法。 24.进行字符转换的时候应该尽可能的较少临时变量。 25.使用ObjectStream 的方法后,调用reset() ,释放对象。 26.线程同步中,在循环里面使用条件测试(使用 while(isWait) wait() 代替 if(isWait) wait())。 27.不掉用 Thread 类的 resume(), suspend(), stop() 方法。 28.减小单个方法的复杂度,使用的 if, while, for, switch 语 句要在10个以内。 29.在Servlets中,重用JDBC连接的数据源。 30.减少在Sevlets中使用的同步方法。 2005-10-15, 11:40:39 7 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
密级: 内部公开 DKBA1040-2001.12 VVVVVVV VVVVVVVVVVVX。XVX.X VX.X VX.X VX.XVX.X 31.不定义在包中没有被用到的友好属性、方法和类。 32.没有子类的友好类应该定义成 final 。 33.没有被覆盖的友好方法应该定义成 final 。 8.2 建议(3级或以上) 1.为 switch 语句提供一个 default 选项。 2.不要在 for 循环体中对计数器的赋值。 3.不要给非公有类定义 public 构建器。 4.不要对浮点数进行比较运算,尤其是不要进行 ==, !=运算, 减少 >, < 运算。 5.实现 equals() 方法时,先用 getClass() 或者 instanceof 进 行类型比较,通过后才能继续比较。 6.不要重载 main() 方法用作除入口以外的其他用途。 7.方法的参数名不要和类中的方法名相同。 8.除了构建器外,不要使用和类名相同的方法名。 9.不要定义 Error 和 RuntimeException 的子类,可以定义 Exception 的子类。 10.线程中需要实现 run() 方法。 11.使用 equals() 比较两个类的值是否相同。 12.字符串和数字运算结果相连接的时候,应该把数字运算部分 用小括号括起来。 13.类中不要使用非私有(公有、保护和友好)的非静态属性。 14.在类中对于没有实现的接口,应该定义成抽象方法,类应该 定义成抽象类。(5级) 15.不要显式导入 java.lang.* 包; 16.初始化时不要使用类的非静态属性。 17.显式初始化所有的局部变量。 18.按照方法名把方法排序放置,同名合同类型的方法应该放在 一起。 19.不要使用嵌套赋值,即在一个表达式中使用多个 = 。 20.不要在抽象类的构建器中调用抽象方法。 2005-10-15, 11:40:39 8 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
分享到:
收藏