Android面试、开发之高手 编码规范与细节
注释
【规则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。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。