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这种由于程序本身错误导致的异常,是程序员的问题。你catchException,意味着子类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")
  
  List<String>blix=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<ComposeMessageActivity>{
  
  testInterceptSendSms(){//格式:testMethod_specificCase1如果没有case,那就直接写testMethod
  
  }
  
  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值