android中文网android中文网,Android编程风格 - Android中文网

基本规范

异常

1, 尽量不要使用try catch捕获异常,而是显式的抛出一个异常。

2, 使用try catch 一定要在catch语句中做好相应的处理,不能留空。

3, 不要捕获Exception类型的异常

Java代码:

privatefinalHandlermAttachmentEditorHandler=newHandler(){

@Override

publicvoidhandleMessage(Messagemsg){

switch(msg.what){

caseAttachmentEditor.MSG_EDIT_SLIDESHOW:{

try{//'''不要使用trycatch'''

editSlideshow();

}catch(Exceptione){//不要在这里捕获基类Exception

//这里留空非常危险,一旦出错,根本找不到

}

break;

}

caseAttachmentEditor.MSG_SEND_SLIDESHOW:{

if(isPreparedForSending()){

ComposeMessageActivity.this.confirmSendMessageIfNeeded();

}

break;

}

为什么不要使用try catch?

我们应该对于如何划分异常的层次有一个理解,对于完全已知的错误,结合逻辑编写处理这种错误的代码,自己无法处理的,继续向上抛出,增加程序的鲁棒性,但是如果你根本不确定报出什么异常,请不要这样做。

为什么要声明方法抛出异常?

方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

为什么不要捕获Exception类异常?

Exception分为两类:unchecked(RuntimeException 和 error) & checked,因为RuntimeException这种由于程序本身错误导致的异常,是程序员的问题。你catch了Exception,意味着子类RuntimeException也被catch了。

在catch中可以做什么?

1,赋默认值

2,做一些错误处理

3,抛出一个自己封装的异常类对象

在catch中不可以做什么?

1,抛出一个RuntimeException。(除非你认为你的程序除了崩掉重启别无他法,否则别这么做)

finally

finally这个关键字很不好用,因为我们根本无法确定什么时候他会执行,是return之前还是之后?没人知道。除非你要对外部资源进行一些收尾,比如使用InputStream,你要close。否则,不要用它。

引入

1,引用顺序:android,三方按字母表,java(x) (这是一个graceful的问题)

2,引用方式:一定要引全类名,不要引用整个包。

Java代码: importsfoo.Bar;//right

importsfoo.*;//wron

注释

新加代码要求如下:

1,CopyRight Statement,声明结束后空一行写代码(非必须)

2,每个类都要有描述注释

3,方法一定要写注释描述功能,参数,返回值,重要的变量要有注修改源码要求如下:

解释修改原因

Java代码:

/*

*Copyright(C)2010TheAndroidOpenSourceProject

*LicensedundertheApacheLicense,Version2.0(the"License");

*youmaynotusethisfileexceptincompliancewiththeLicense.

*YoumayobtainacopyoftheLicenseat

*

*http://www.apache.org/licenses/LICENSE-2.0

*Unlessrequiredbyapplicablelaworagreedtoinwriting,software

*distributedundertheLicenseisdistributedonan"ASIS"BASIS,

*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.

*SeetheLicenseforthespecificlanguagegoverningpermissionsand

*limitationsundertheLicense.

*/

packageeoe.android.internal.foo;

importandroid.os.Blah;

importandroid.view.Yada;

importjava.sql.ResultSet;

importjava.sql.SQLException;

/**

*DoesXandYandprovidesanabstractionforZ.

*@authorJackyYang

*/

publicclassFoo{

...

}

方法

方法一定要短小精悍,功能专注,不要试图把一个大的功能放在一个方法中实现。

局部变量

局部变量的作用域一定要最小化,即什么时候用,什么时候声明,不要提前声明了很多变量,但是最后才用。

缩进

代码块缩进4字符,不要用tab

Java代码:  publicvoidpay(){

//这里空了4字符

}

换行缩进8字符,不要用tab

Java代码: Instrumenti=someLongExpression(that,wouldNotFit,on,one,line)

成员变量

1,静态的变量以s开头

2,非静态,非公开变量以m开头

3,静态常量 全部大写

4,成员变量定义在类的开始,或者在使用成员变量的方法之前声

Java代码  publicclassMyClass{

publicstaticfinalintSOME_CONSTANT=42;

publicintpublicField;

privatestaticMyClasssSingleton;

intmPackagePrivate;

privateintmPrivate;

protectedintmProtected;

括号 { }

使用规则只有两种:

Java代码: if(condition){

body();//标准

}

if(condition)body();//如果只有一条语句,也可以这样

代码行长度

代码行长度不超过100字符

注解

1,注解离方法最近

2,一般不要使用SuppressWarning,要使用的话,请加上TODO注释

Java代码: //TODO:Thethird-partyclasscom.third.useful.Utility.rotate()needsgenerics

@SuppressWarnings("generic-cast")

Listblix=Utility.rotate(blax)

调试规范

Log的使用

1,在调试中,非常鼓励大家使用log查找问题,但是问题结束后,在check in之前,一定要确定你的代码注释已经关闭。

2,Log的级别要视情况而定,不要随便使用Log.e

3,代码要使用规范的TAG和调试开关,方便以后使

Java代码:  privatestaticfinalbooleanDBG=true;

privatestaticfinalStringTAG="MediaScanner";

if(DBG){

Log.d(TAG,"debuginfo");

}

测试

在正规开发中,一定要有测试的环节,android有自己一套测试的工具

Java代码:  //标准的testcase

publicclassLaunchTestextendsAndroidTestCase{

testInterceptSendSms(){//格式:testMethod_specificCase1如果没有case,那就直接写testMethod,如果没有具体方法而是测的功能,那就直接写功能名,testCompose

//但是更多的还是方法级的测试

}

//测试Activity

publicclassInterceptSendMmsextendsActivityInstrumentationTestCase2{

testInterceptSendSms(){//格式:testMethod_specificCase1如果没有case,那就直接写testMethod

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值