修改自:Android 编码规范 | 代码风格指南
一、命名规则
1.包小写。
com.chinacache.billing
com.chinacache.billing.node
2.类大小写字母混合组成,头字母大写。
class Raster;
class ImageSprite;
3.接口大小写字母混合组成,头字母大写,常以"able"、"ible"结尾。
interface RasterDelegate;
interface Runnable;
interface Accessible;
4.方法大小写字母混合组成,第一个单词的首字母小写,其后单词的首字母大写。
run();
runFast();
getBackground();
5.变量、参数小写,不推荐使用下划线,简短明晰。
char c;
int i;
floatmyWidth;
6.集合、数组应该从命名中体现其复数的含义,例如加后缀s或前缀some。
customers;
postedMessages;
someCustomers;
someItems;
二、域(Field)命名
*非公有,非静态字段命名以m开头。
* 静态域命名以s开头。
* 其他字段以小写字母开头。
* public static final 字段(常量)全部大写,并用下划线连起来。
[java]view plaincopy
1. publicclassMyClass{
2. publicstaticfinalintSOME_CONSTANT=42;
3. publicintpublicField;
4. privatestaticMyClasssSingleton;
5. intmPackagePrivate;
6. privateintmPrivate;
7. protectedintmProtected;
8. }
三、在定义类时,应该按照访问权限的大小分别排列属性和方法。
9. 1. public
2. protected
3. 包级别(没有访问修饰符的,默认为friendly)
4. private
10.
四、注释/JavaDoc
1.顶部版权声明
2.包和引入块(每一块以空白行分隔)
3.类或接口的声明。在Javadoc注释,描述的类或接口的用途。
[java]view plaincopy
1. /*
2. *Copyright(C)2007TheAndroidOpenSourceProject
3. *
4. *LicensedundertheApacheLicense,Version2.0(the"License");
5. *youmaynotusethisfileexceptincompliancewiththeLicense.
6. *YoumayobtainacopyoftheLicenseat
7. *
8. *http://www.apache.org/licenses/LICENSE-2.0
9. *
10. *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
11. *distributedundertheLicenseisdistributedonan"ASIS"BASIS,
12. *WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
13. *SeetheLicenseforthespecificlanguagegoverningpermissionsand
14. *limitationsundertheLicense.
15. */
16. packagecom.android.internal.foo;
17. importandroid.os.Blah;
18. importandroid.view.Yada;
19. importjava.sql.ResultSet;
20. importjava.sql.SQLException;
21. /**
22. *DoesXandYandprovidesanabstractionforZ.
23. */
24. publicclassFoo{
25. ...
26. }
类/接口注释的内容(1项要求写上)
类、接口的文档注释包含如下信息:
1.用途。开发人员使用某个类/接口之前,需要知道采用该类/接口的用途。
2.如何使用。开发人员需要知道该类/接口应该如何使用,如果必要的话还需要注明不应
该如何使用。
3.开发维护的日志。一个有关于该类/接口的维护记录:时间、作者、摘要。
方法注释的内容(1,5,6,7项要求写上)
1.类该方法是做什么的。
2.该方法如何工作。
3.代码修改历史纪录。
4.方法调用代码示范。
5.必须传入什么样的参数给这个方法。@param
6.异常处理。@throws
7.这个方法返回什么。@return
五、在Imports使用通配符的优劣
六、局部变量应该推迟至使用前声明并初始化
七、花括号没有独自一行,它们与它前面的代码占同一行
八、异常
1.不要忽视异常处理
如果像下面的代码这样,对catch后的异常作空处理,就像埋下地雷一样让人感觉到毛骨悚然:
错误的做法:
[java]view plaincopy
1. voidsetServerPort(Stringvalue){
2. try{
3. serverPort=Integer.parseInt(value);
4. }catch(NumberFormatExceptione){
5. }
6. }
正确的做法(1):
在方法声明时抛出异常,由客户程序员去负责消化这个异常。
[java]view plaincopy
1. voidsetServerPort(Stringvalue)throwsNumberFormatException{
2. serverPort=Integer.parseInt(value);
3. }
正确的做法(2):
[java]view plaincopy
1. /**Setport.Ifvalueisnotavalidnumber,80issubstituted.*/
2. voidsetServerPort(Stringvalue){
3. try{
4. serverPort=Integer.parseInt(value);
5. }catch(NumberFormatExceptione){
6. serverPort=80;//defaultportforserver
7. }
正确的做法(3):
[java]view plaincopy
1. /**Setport.Ifvalueisnotavalidnumber,die.*/
2. voidsetServerPort(Stringvalue){
3. try{
4. serverPort=Integer.parseInt(value);
5. }catch(NumberFormatExceptione){
6. thrownewRuntimeException("port"+value"isinvalid,",e);
7. }
正确的做法(4):
[java]view plaincopy
1. voidsetServerPort(Stringvalue)throwsConfigurationException{
2. try{
3. serverPort=Integer.parseInt(value);
4. }catch(NumberFormatExceptione){
5. thrownewConfigurationException("Port"+value+"isnotvalid.");
6. }
7. }
2、不要偷懒而捕捉一般异常
下面代码一概捕捉Exception异常,大小通吃是不对的,这样会让你在错误出现时难以定位到错误原因,一般异常无法用统一方法进行异常处理。
错误的做法:
[java]view plaincopy
1. try{
2. someComplicatedIOFunction();//maythrowIOException
3. someComplicatedParsingFunction();//maythrowParsingException
4. someComplicatedSecurityFunction();//maythrowSecurityException
5. //phew,madeitalltheway
6. }catch(Exceptione){//I'lljustcatchallexceptions
7. handleError();//withonegenerichandler!
8. }
[参考]
http://source.android.com/source/code-style.html
http://wenku.baidu.com/view/ce17addd5022aaea998f0fad.h