凝视

【规则1】必须用 javadoc 来为类生成文档。不仅由于它是标准。这也是被各种java 编译器都认可的方法。

【规则2】在文件的開始部分应该有文件的说明信息,应包括例如以下信息:

(1)版权信息;

(2)文件名称;

(3)功能描写叙述;

(4)作者。

(5)完毕日期;

(6)版本号信息;

(1.1)eclipse类模版:

/**

 * © 2012 amsoft.cn

 * 名称:${file_name}

 * 描写叙述:${todo}.

 * @author ${user}

 * @date:${date} ${time}

 * @version v1.0

 */

演示样例:

/**

 * © 2012 amsoft.cn

 * 名称:AbDateUtil.java

 * 描写叙述:日期处理类.

 *

 * @author 还如一梦中

 * @version v1.0

 * @date:2013-01-18 下午11:52:13

 */

【规则3】变量名字要求含义明白。尽量加上凝视。每一个变量中间加一个空行。格式例如以下:

/**错误码*/

public String errorCode;

/**错误信息*/

public String message;

 【规则4】凝视应该添加代码的清晰度,内容要清晰、明了,含义准确。防止凝视二义性。

代码凝视的目的是要使代码更易于被同一时候參与程序设计的开发者以及其它后继开发者理解。

【规则5】保持凝视的简洁。

最好的凝视应该是简单明了的凝视。仅仅需提供足够的信息,使别人可以理解你的代码。

【规则6】凝视与代码应保持一致。

改动代码同一时候改动对应的凝视;不再实用的凝视要删除。

【规则7】凝视应与其描写叙述的代码相近,对代码的凝视应放在其上方。不可放在以下,如放于上方则需与其上面的代码用空行隔开。

命名

【规则1】使用能够准确说明变量/字段/类的完整的英文描写叙述符。

【规则2】採用大写和小写混合。提高名字的可读性。

一般应该採用小写字母,可是类和接口的名字的首字母。以及不论什么中间单词的首字母应该大写。

【规则3】除了部分被大家公认的缩写,尽量少用缩写,假设有使用了缩写则一定要凝视注明。

【规则4】 避免使用长名字(最好不超过15个字母)。

【规则5】避免使用相似或者仅在大写和小写上有差别的名字。

【规则6】避免使用下划线作为名字。下面划线为首末字母的名字通常为系统保留,除预处理定义之外,一般不用作用户命名。更重要的是,下划线常常造成麻烦并且难输入,所以尽量避免使用。

【规则7】对于变量命名,禁止取单个字符(如 i、j、k...),除了要有详细含义外,还能表明其变量类型、数据类型等。但 i、j、k 作局部循环变量是同意的。

【规则8】package 的名字原则应该都是由一个小写单词组成。假设 package 名字由多个单词组成,全部的单词都应是小写。

【规则9】属性的命名必须遵循命名基本规范,建议依照匈牙利命名法进行命名。

在某些情况下假设须要明白区分属性和方法内部局部变量,建议属性名称以"m"为前缀,比如: mUser。

【规则10】类方法的命名应採用完整的英文描写叙述符,大写和小写混合使用:全部中间单词的 第一个字母大写。类方法名称的第一个单词经常採用一个有强烈动作色彩的动词。演示样例: openAccount() queryUser()。这样的约定经常使人一看到类方法的名称就能推断它的功能。尽管这样的约定要使开发人员多做一 些输入的工作,由于类方法名经常较长,可是回报是提高代码的可理解性。

【规则11】 静态常量字段(static final)所有採用大写字母。单词之间用下划线分隔。 演示样例:PREFS_NAME。  



方法

【规则1】函数的规模尽量限制在 200 行以内。

【规则2】一个方法仅完毕一件功能。假设一个方法实现多个功能,能够考虑分拆成多个方法,每一个方法实现一个功能。

【规则3】假设多段代码反复做同一件事情。那么可考虑提供一个公用的方法实现这个功能。供其他方法调用。

【规则4】降低函数本身或函数间的递归调用。

【规则5】检查函数全部參数输入的有效性。比如參数传入 ArrayList 对象为空,假设直接使用会导致程序异常。

【规则6】对方法的异常中应有全面的处理,不要想当然在 try 块中实现的功能中仅仅可 能发生某一种异常。实际上可能会发生非常多异常,如:IOException、NullPointerException 等。对抛出的异常最后应加上捕捉默认的 Exception,并进行处理。例:


try{

    ......

 }catch(SQLException sqle){

    ......

 //捕捉其他全部的Exception

 }catch(Exception e){

     //处理异常

    ......

}

【规则7】对所调用函数的错误返回码要细致、全面地处理。

【规则8】去掉没实用、不是必需的变量、代码。程序中的垃圾代码不仅占用额外的空间,并且非常可能给程序的測试、维护等造成不必要的麻烦。

【规则9】位于 for 循环中作为计数器值的数字常量,除了­1,0 和 1 之外。不应被直接 写入代码。

规则

【规则1】尽早释放没用的对象。不用的对象应该及时赋为null。

String a = "一块内存";

a = null;

【规则2】方法内创建对象或变量。一些局部使用的对象或变量应定义在方法内,一但方法返回,方法内创建的对象即符合GC回收条件,返回的对象除外。

在以下样例中,方法返回后,当中的a、b 、strBuf 符合。c不符合。  

private static String getSay() {

 

      StringBuffer strBuf = new StringBuffer();

      String a = "你好";

      String b = "小明";

      String c = null;

      strBuf.append(a).append(b);

      c = strBuf.toString();

 

      return c;

 

  }

【规则3】集合数据类型,包含数组,链表等数据结构。这些数据结构对GC来说,回收更为复杂,应该尽早将不用的引用对象赋为null。在以下两段代码中定义的对象都不能释放。由于集合中还引用着这些对象,要释放这些对象必须将它们从集合中移除,最简单的方式时直接将集合置为null。

//代码段1

List<Item> items = new ArrayList<Item>();

for(int j=0;j<100;j++){

   Item item = new Item(String.valueOf(j));

   items.add(item);

   item = null;

}

 

 

//代码段2

Item item = null;

for(int j=0;j<100;j++){

   item = new Item(String.valueOf(j));

   items.add(item);

   item = null;

}

 【规则4】尽可能少的使用全局变量,static全局变量,尽量用局部变量取代。这两种方式都是静态存储方式。仅仅是作用域不同,当中普通的全局变量作用于整个源程序。而静态的全局变量作用于被定义的源文件里。即其它源文件内无法訪问。把局部变量改为静态变量更改了它的存储方式即生存周期。把全局变量改为静态改变了它的作用域,所以原则时能用局部决不用全局。

【规则5】static变量在程序执行期间其内存是共享的。且仅仅有一份,所以有时将一些变量声明为static,能够起到节约内存空间的作用,可是因为静态变量生命周期非常长,不易被系统回收。所以使用静态变量要合理。不能盲目的使用。

【规则6】类内私有常量尽量用final来声明。程序中供全局使用的常量能够声明为static final。

【规则7】尽量少用finalize函数。finalize函数是Java提供给程序猿一个释放对象或资源的机会。

但它会加大GC的工作量。

【规则8】当程序有一定的等待时间,能够手动执行System.gc()。通知GC执行,但强制内存回收对于系统自己主动的内存回收机制会产生负面影响。会加大系统自己主动回收的处理时间,所以应该尽量避免显式使用System.gc()。

【规则9】尽量少用finalize函数。finalize函数是Java提供给程序猿一个释放对象或资源的机会。可是。它会加大GC的工作量。因此尽量少採用finalize方式回收资源。

【规则10】在使用图片资源过多时,使用软引用(SoftReference)缓存。

使用软引用定义的资源在内存不够的时候会自己主动被系统回收。

可以最大限度的保证不产生OutOfMemory异常。一般用于缓存的实现,但缺点是软引用的对象初始化比較耗时,我们还要负责对象对回收后的重建工作,比較麻烦。

【规则11】适当的使用弱引用(WeakReference)。

当定义了一个对象,用弱引用记住它后,在下一次GC执行时就会把它当作没用的对象回收,和软引用的差别是不会依据内存情况推断。


命名

【规则1】layout文件的命名使用所有小写字母加下横线组合,每一个英文描写叙述符用下横线分格(最好不超过3个)。且仅仅能以字母开头和结束。

【规则2】名字的定义同Java。

【规则3】提示与文字信息必须定义在string.xml中。

规则

【规则1】数据库的操作,应记得关闭游标和数据库,在须要SimpleCursorAdapter时,可使用Activity.startManagingCursor(Cursor c)来管理游标,使游标的生命周期和Activity的生命周期一致;

【规则2】在自己定义Adapter时一定要使用缓存的convertView。标准的方法參照ListView相关章节。

【规则3】Bitmap对象在不使用时应先调用recycle() 方法释放内存,再将对象赋为null;

【规则4】区分Application Context和Activity Context,不让生命周期长的对象引用Activity Context。能够避免Activity不能被销毁,对于生命周期长的对象,能够使用Application Context。

【规则5】在AndroidManifest.xml文件里配置Activity时。可加入配置防止在横竖屏切换时又一次载入Activity。android:configChanges="orientation|keyboardHidden|navigation"。

【规则6】为了国际化和可维护性的须要。在String.xml中配置字符串,在Java代码中通过this.getResources().getString(int id)方法获取。

【规则7】为了适应不同的分辨率,不同的像素密度。布局推荐使用dip,文字使用sp。

Android面试、开发之高手 编码规范与细节的更多相关文章

  1. Android开发编码规范(自用)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!   Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...

  2. ym——Android开发编码规范(自用)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下J ...

  3. 【安全开发】Android安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  4. Android的编码规范

    一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...

  5. 浅谈Android编码规范及命名规范

    前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...

  6. 第四章 android 命名规范和编码规范

    书里面讲的比较常见,单个人也是有不同的观点: 因为android绝大部分使用java开发的,因此java相关规范适用于android: Google Style: 英文地址:http://google ...

  7. 《阿里巴巴Android编码规范》阅读纪要(一)

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 2月28日阿里巴巴首次公开内部安卓编码规范,试想那么多业务线,开发人员,没有一套规范管理起来是多么麻烦,以下是个人阅读Android基本组件部分过程 ...

  8. 【转】Android编码规范建议18条

    转自:http://www.chinaz.com/design/2015/0908/443732.shtml Android编码规范建议18条 适合手机app设计师和android 工程师阅读. 1. ...

  9. [旧][Android] 命名规范和编码规范

    备注 原发表于2016.05.07,资料已过时,仅作备份,谨慎参考 前言 本文适用范围:已参加项目开发的人 写这篇文章的目的是为方便地对代码进行管理,让整个团队的代码规范化.这里的部分规定可能和你在其 ...

随机推荐

  1. NotesDocument 作为函数返回值的问题

    如下代码 Set recipientDoc = getDocInNAB(“search string”) If Not recipientDoc Is Nothing Then ‘In debug I ...

  2. Linux chattr 命令

    不让用户修改.删除文件等,使用 chattr保护 chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files… 最关键的是在[mode]部分,[m ...

  3. Citrix Port(常用端口)

    组件 类型 端口 描述 CitrixLicenseServer       许可管理器守护程序 TCP 27000 处理初始接触点的许可证要求(Lmadmin.exe) 思杰供应商守护程序 TCP 7 ...

  4. Redis C客户端Hiredis代码分析

    初始化 redisContext - Redis连接的上下文 /* Context for a connection to Redis */ typedef struct redisContext { ...

  5. Java中的String pool

    public String intern()返回字符串对象的规范化表示形式. 一个初始时为空的字符串池,它由类 String 私有地维护.当调用 intern 方法时,如果池已经包含一个等于此 Str ...

  6. Delphi 7调用C语言编写的DLL

    DLL一定是要C语言导出的符号,也就是extern “C”. 当然,我们都知道DLL调用分为动态调用和静态调用. 动态调用的一般思想为,先LoadLibrary那个你想加载的DLL,然后通过GetPr ...

  7. 阿里云安装jdk,tomcat,maven,svn,git,nginx

    1. 首先通过xftp等工具上传安装包 2. 配置目录 cd usr mkdir java cd java mkdir jdk mkdir tomcatmkdir maven 3. 安装jdk 3.1 ...

  8. 如何开发一个基于 Docker 的 Python 应用

    前言 Python 家族成员繁多,解决五花八门的业务需求.这里将通过 Python 明星项目 IPython Notebook,使其容器化,让大家掌握基础的 Docker 使用方法. IPython ...

  9. keras embeding设置初始值的两种方式

    随机初始化Embedding from keras.models import Sequential from keras.layers import Embedding import numpy a ...

  10. IO 多路复用是什么意思?

    在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流, (学过EE的人现在可以站出来义正严辞说这个叫“时分复用”了). 什么,你还没有搞懂“一个请求到来了,nginx使用epoll接收请求的过 ...