命名原则不要使用拼音命名;名称应简洁而富于描述,使用完整单词,避免使用缩写(除非该缩写被更广泛使用,例如URL、HTML);避免难懂的名称,如属性名xxX777,这样的名称会导致多义性。
名称的首字母需要大写,如果由多个单词组成,那么每个单词的首字母需要大写,其他字母小写。继承自系统组件类的命名,后缀必须明确表示出系统组件的类别,Activity类后缀使用Activity,Service类后缀使用Service,BroadcaseReceiver类后缀使用Receiver,ContentProvider使用Provider。如:class LoadingActivity
方法名是一个动词或者动名词结构,采用驼峰命名法来命名。如doUpdate()
采用驼峰命名法来命名,非公共的、非静态的域变量用m前缀,静态域变量用s前缀。如:
private int mId; private static User sUse;
public int level;
其中系统控件中在后缀中体现控件类型,如下所示:
组件名称
简写
组件名称
简写
Button
Btn
RadioButton
Rbtn
ImageButton
Ibtn
TextView
Tv
ImageView
Iv
ListView
Lv
ProgressBar
Pbar
EditText
Et
ScrollView
Sv
CheckBox
Cb
RelativeLayout
Rly
LinearLayout
Lly
TableLayout
Tly
FrameLayout
Fly
类常量的声明,应该全部大写,单词间用下划线隔开。如:static final int MIN_WIDTH = 4;
名称必须以Exception结尾。如:NullPointerException
命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,即使用 模块名_功能名称来命名。如:addressbook_list.xml
layout中所使用的id命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,并且要求能够通过id直接理解当前组件要实现的功能。如:EditText名 @+id/book_name_edit
采用大小写混合模式,第一个单词首字母小写,其余单词首字母大写最后一个单词为该View 类型的缩写,格式为逻辑名+View 类型缩写 。如:Button homeBtn
命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,如:
main_menu_about main_title common_exit common_app_name
layout中使用的所有资源(如drawable,style等)命名必须以全部单词小写,单词间以下划线分割,并且尽可能的使用名词或名词组,即使用模块名_用途来命名。如果为公共资源,如分割线等,则直接用用途来命名。如:menu_icon_navigate.png
1、所有的源文件都应该在开头有一个的注释,其中列出版本信息、日期和版权声明
2、尽量避免一行的长度超过 100 个字符
3、大括号不单独占用一行,应紧接着上一行书写
4、一行一个声明
5、尽量在声明局部变量的同时初始化
6、编写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。如:SELECT * FROM Table
7、将大的复杂代码段分为较小的、易于理解的模块
对重要的程序加注释进行说明,修改代码或删除时,将原代码用注释的方法屏蔽,同时要加开发者自身对修改操作的注释;避免杂乱的注释,而是应该使用空白将注释同代码分开;注释应对代码进行准确的说明,不应存在歧义;移除所有临时或无关的注释,以避免在日后的维护工作中产生混乱。
源文件的开头需要注释说明当前的文件信息,包括文件名、作者、版本信息、日期、修改记录等。
/** * * File: MainActivity.java * Author: xxx * Version: 1.0 * Create: 2016-8-14 * * Changes (from 2016-8-20) * */
在类的开头添加类信息的描述.
/** * 管理Volley的Request, 使用之前需要调用init()进行初始化 */ public class RequestManager { }
一般情况下需要为每个方法添加注释,包括方法的功能描述,参数信息、返回值、异常信息等,有些约定俗成的方法可以不需要添加注释,请参考约定俗成的说明。
/** * 一句话方法描述
* 方法详细描述
* @param 参数名 参数描述
* @param 参数名2 参数描述
* @return 返回值类型说明
* @throws Exception 异常说明
* @see 类/方法/成员
*/
/** * 日志的扩展名 */ public static final String LOG_EXTENSION = "xxx";
/** * 网络请求队列 */ private RequestQueue mRequestQueue;
单行注释
//注释内容
块注释
/*注释内容*/
1、在使用单位时,如果没有特殊情况,一律使用 sp 作为文字大小的单位,将 dp 作为其他元素的单位
2、避免用一个对象访问一个类的静态变量和方法,应该用类名替代
3、不要忽略异常,处理错误并在 catch {} 语句块中替换为合适的值
4、不要捕获顶级异常,可采用如下方案:
l 分开捕获每一种异常,在一条 try 语句后面跟随多个 catch 语句块。这样可能会有点别扭,但总比捕获所有 Exception 要好些。请小心别在 catch 语句块中重复执行大量的代码。
l 重新组织一下代码,使用多个 try 块,使错误处理的粒度更细一些。把 IO 从解析内容的代码中分离出来,根据各自的情况进行单独的错误处理。
l 再次抛出异常。很多时候在你这个级别根本就没必要捕获这个异常,只要让方法抛出该异常即可。
5、对那些临时性的、短期的、够棒但不完美的代码,使用 TODO 注释
6、不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突
7、数据一定要效验,例如:字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断
8、如果多个Activity中包含共同的UI处理,那么可以提炼一个BaseActivity,把通用部分叫由它来处理,其他activity只要继承它即可
9、保证Cursor 占用的内存被及时的释放掉,而不是等待GC来处理