编 程 规 范 1.0
1 环境设置 ..................................................................................................................................... 3 2 代码风格 ..................................................................................................................................... 3
2.1 缩进 .................................................................................................................................. 3 2.2 括号 .................................................................................................................................. 3 2.3 Import ............................................................................................................................... 4 2.4 声明 .................................................................................................................................. 4 2.5 代码度量 .......................................................................................................................... 5
2.5.1 耦合度度量 ........................................................................................................... 5 2.5.2 方法度量 ............................................................................................................... 5 2.5.3 其他度量 ............................................................................................................... 5 2.5.4 使用短函数 ........................................................................................................... 5 2.5.5 局部变量 ............................................................................................................... 6 2.5.6 其他 ....................................................................................................................... 6
3 命名............................................................................................................................................. 6
3.1 包名 .................................................................................................................................. 6 3.2 类名(接口) .................................................................................................................. 6 3.3 成员变量 .......................................................................................................................... 6 3.4 成员函数 .......................................................................................................................... 7 4 异常............................................................................................................................................. 7
4.1 异常处理: 永远不要忽略异常 ....................................................................................... 7 4.2 将Exception丢给该函数的调用者去处理 .................................................................... 7 4.3 Throw一个新的与该函数合适的Exception ................................................................. 7 4.4 仔细处理该Exception..................................................................................................... 7 4.5 抛出RuntimeException ................................................................................................... 8 4.6 注释中解释忽略该异常的合理原因 .............................................................................. 8 4.7 异常处理:不要捕获通用异常(Exception) ................................................................... 8 5 注释............................................................................................................................................. 9
5.1 注释规范 .......................................................................................................................... 9 5.2 注释内容 ........................................................................................................................ 10 6 单元测试 ................................................................................................................................... 11 7 编译........................................................................................................................................... 11 8 一些关乎性能、稳定性和灵活性的原则 ............................................................................... 12
8.1 避免内存泄露 ................................................................................................................ 12
7.1.1 原则1:及时回收Bitmap资源 ........................................................................ 12 7.1.2 原则2:register注册的响应钩子,一定要有unRegister ............................... 12 7.1.3 原则3:使用Adapter时要尽量使用convertView缓存引用 ......................... 12 7.1.4 原则4:从网络下载的数据和保存的临时文件要及时清理 .......................... 13 7.1.5 原则5:内存使用不能超过上限 ...................................................................... 13 7.1.6 原则6:避免使用Finalizer ............................................................................... 13
7.1.7 原则7:使用软应用cache ................................................................................ 13 8.2 避免出现系统超时无响应 (有时也表现为打开/关闭窗口刷新不正常) ............. 14
7.2.1 原则1 .................................................................................................................. 14 7.2.2 原则2 .................................................................................................................. 14 7.2.3 原则3 .................................................................................................................. 15 8.3 使用Http连接需要加入超时时间限制 ....................................................................... 15 8.4 尽量避免使用System.exit(0)的方式来退出应用 ........................................................ 16 8.5 减少使用数据库的次数,避免频繁调用 .................................................................... 16 8.6 ListView使用优化 ........................................................................................................ 16 8.7 Layout使用与优化 ....................................................................................................... 16
7.7.1 原则1 .................................................................................................................. 16 7.7.2 原则2 .................................................................................................................. 16 7.7.3 原则3 .................................................................................................................. 16 7.7.4 原则4 .................................................................................................................. 17
1 环境设置
1、 IDE:开发应用使用Eclipse(Galileo及以上版本) 2、 Java环境:jdk1.6及以上版本 3、 Android环境:Honeycomb及adt 4、 Project环境设置:
a) Code Style: i. tab 宽度为4 space ii. 打开拼写检查 iii. 所有文本(中、英)用utf-8编码 iv. 引用第三方库使用相对路径 v. Qualify all generated field accessed with ?this? vi. Use ?is? prefix for getters that return boolean vii. Add ?@Override? annotation for new overriding methods
b) Error:Windows->Preferences->Java->Compiler->Errors/Warnings中,修改以下
选项: i. Non-static access to static member error ii. Parameter assignment error iii. Null pointer access error iv. Comparing identical values error v. Parameter is never read Warning vi. Missing ?@Override? annotation error
2 代码风格
2.1 缩进
1、对block的缩进, 用4个space void fun() {
do_some_thing(); }
2、对与跨行的代码,第二行的缩进为8个space,如 Instrument i =
someLongExpression(that, wouldNotFit, on, one, line);
2.2 括号
对于if、while、for等语句,无论单行还是多行,一律加括号:
class {
public void fun() { if (condition_0) {
do some thing here; } else {
do some thing here; } } }
2.3 Import
如果你需要从package foo中引入class Bar, 有一下两种方式
1、 import foo.*; 2、 import foo.Bar
一般情况下,请用第2中import方式。另外,import的时候还要遵循以下原则
1、 在每个group(android, java, com.test.leos等)内按字母顺序依次排列. (大写字母
在小写字母之前,如Z排在a之前。 2、 每一个group之间用空行隔开。
2.4 声明
? ?
修饰符应该按照如下顺序排列:public, protected, private, abstract, static, final, transient, volatile, synchronized, native, strictfp。
类与接口的声明顺序(可用Eclipse的source->sort members功能自动排列):
1. 静态成员变量 / Static Fields 2. 静态初始化块 / Static Initializers 3. 成员变量 / Fields 4. 初始化块 / Initializers 5. 构造器 / Constructors
6. 静态成员方法 / Static Methods 7. 成员方法 / Methods
8. 类型(内部类) / Types(Inner Classes) 同等的类型,按public, protected, private的顺序排列。
2.5 代码度量 2.5.1 耦合度度量
1、DAC度量值不要不大于7
解释:DAC(Data Abstraction Coupling)数据抽象耦合度是描述对象之间的耦合度的一种代码度量。DAC度量值表示一个类中有实例化的其它类的个数。
2、CFO度量值不要不大于20
解释:CFO(Class Fan Out)类扇出是描述类之间的耦合度的一种代码度量。CFO度量值表示一个类依赖的其他类的个数。
2.5.2 方法度量
1、 方法(构造器)参数在7个以内。太多的方法(构造器)参数影响代码可读性,还
是不良设计的征兆。考虑用值对象代替这些参数,或者重新设计。
2、 方法长度150行以内。太长的方法影响代码可读性,还是一个方法承担了太多责任
的征兆。建议拆分责任。 3、 CC 度量值不大于10
解释:CC(CyclomaticComplexity)圈复杂度指一个方法的独立路径的数量,可以用一个方法内if,while,do,for,catch,switch,case,?:语句与&&,||操作符的总个数来度量。 4、 NPath度量值不大于200
解释:NPath度量值表示一个方法内可能的执行路径的条数。
2.5.3 其他度量
1、 布尔表达式中的布尔运算符(&&,||)的个数不超过3个。 2、 if语句的嵌套层数3层以内。
3、 文件长度2000行以内。太大的源程序文件影响代码可读性,还是一个类承担了太
多责任的征兆,建议拆分责任到其他类上。
4、 匿名内部类20行以内。太长的匿名内部类影响代码可读性。建议:重构为命名的
(普通)内部类。
2.5.4 使用短函数
一个函数尽量做到集中做某件事。使函数变得短小。如果一个函数超过了40行,应该考虑是否可以拆分。