命名规范
1.1类名和接口名类名开头字母大写(Pascal规范), 类名的单词之间不用下划线
示例:
public class AppConfig {
}
1.2 方法名开头字母小写:动作词汇开头;用反义词组命名相反动作的函数;多个单词组合而成的方法名中,后面的单词首字母大写,但专有名词不受限制;单词间不用下划线连接。
示例:
pubic void setStr() {
}
1.3 常量使用大写字母, 用下划线 ‘_’ 分割单词。
示例:
static final int MAX_WIDTH = 999;
1.4 类变量、属性、方法参数、方法局部变量开头字母小写(Camel规范),用完英文描述符命名; 要避免方法局部变量和类属性名相同,以免产生混淆。
1.5 全局变量命名m开头(javabean 类不需要),使用能准确表达意义的词语或缩写词:
private ListView mListView;
1.6 一般变量名不得取单个字符(如i、j、k等)作为变量名,局部循环变量除外。
1.7 代码中控件命名应采用完整的英文描述符命名,名字的前缀是控件类型名(匈牙利规范)。
示例:
btnOk
1.8 获取性方法的命名有两类,一种是判断性的操作(返回类型boolean),以is为方法声明的开头。另外一种获取返回值的操作,以get开头
示例:
getFirstName()
getAccountNumber()
isPersistent()
isAtEnd()
1.9 避免直接使用magic number (数字常量)、字符串,定义(static final)常量代替
示例:
private static final int WAITING_SECOND = 10;
1.10 一行只声明一个变量。
正例:
int level;
int size;
反例:
int level, size;
1.11 一个变量有且只有一个功能,不能把一个变量用于多种用途。
1.12 标识符要采用英文单词或其组合,选择行业专业术语词汇,禁止使用汉语拼音命名和随意创造术语
1.13 标识符应当使用完整的英文描述,命名要求"最小长度最大信息量的",非常用缩写词的单词, 慎用缩写。
1.14 在使用缩写时,应该按着专业术语的要求大小写,例如,System.IO,而不是 System.Io
1.15 命名时应避免采用几乎相同的名称。如 device 与 devices ,sqlDatabase与SQLDatabase
代码易读性
2.1 代码中不要出现中文,comment 使用英语来写 代码复杂或者分支较多时要添加comment
2.2 代码中不要出现TAB,工具设置:用空格代替制表符,1 tab = 4 space
2.3 运算符前后,大括号前面要有一个空格
If (a == b) {
a = b + 10;
} else if {
}
[if !supportLists]2.4 [endif] 类内部的代码布局顺序:类常量、类变量、属性、构造函数、方法、内部类。
2.5 if else语句必须使用大括号,条件句与分支语句不要写在同一行
正例:
if(flag) {
return false;
}
反例:
if(flag)
return false;
2.6 while,for 循环必须使用大括号
正例:
while(flag) {
count++;
}
反例:
while(flag)
count++;
2.7 在switch语句中,case分支要用break结尾,共用或者 特殊情况需要注释说明。最后必须有default分支。
switch (msg.what){
case BT_ON:
break;
case BT_OFF:
break;
default:
}
2.8 避免使用printStackTrace,可以使用Android log 机制 打印:
“exception ” + ex.getMessage()
性能及问题预防相关
3.1 if else判断的 item超过3个时考虑使用Switch 或者抽离,if else嵌套不允许超过5层
3.2 方法抽离:一般情况下一个方法内不允许超过100行
3.3 输入参数使用前做非空判断
3.3 UI 线程与耗时的数据操作分离,防止ANR
3.4合理的生命周期使用Broadcast register (onResume())与 unregister (onStop())
3.5 cursor , file,stream,fd用完一定要注意close
3.6 catch 异常时,要catch 具体的类型,一般不允许直接catch Exception类型
3.7 避免将浮点变量用“==”或“!=”与数字比较,应该转化成“>=”或“<=”形式。
示例:if ((tmp >= 0.0) && (tmp <= 0.0)))
反例:if (tmp == 0.0) //隐含错误的比较
3.8 覆盖equals方法要覆盖hashCode方法
英文缩写原则:
1 较短的单词可通过去掉“元音”形成缩写
2 较长的单词可取单词的头几个字母形成缩写
3 此外还有一些约定成俗的英文单词缩写.
下面为常见的英文单词缩写:
名称
缩写
icon ic (主要用在app的图标)
color cl(主要用于颜色值)
divider di(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线)
selector sl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)
average avg
background bg(主要用于布局和子布局的背景)
buffer buf
control ctrl
delete del
document doc
error err
escape esc
increment inc
infomation info
initial init
image img
length len
library lib
message msg
password pwd
position pos
server srv
string str
temp tmp
window wnd(win)
argument arg
compare cmp
configuration cfg
context ctx
initialize init
maximum max
message msg
minimum min
operating system OS
parameter param
previous prev
trigger trig
write wr
view的缩写详情如下:
LayoutView lv
RelativeView rv
TextView tv
Button btn
ImageButton imgBtn
ImageView imgView 或则 iv
CheckBox chk
RadioButton rdoBtn
analogClock anaClk
DigtalClock dgtClk
DatePicker dtPk
EditText edtTxt
TimePicker tmPk
toggleButton tglBtn
ProgressBar proBar
SeekBar skBar
AutoCompleteTextView autoTxt
ZoomControls zmCtl
VideoView vdoVi
WdbView webVi
RantingBar ratBar
Tab tab
Spinner spn
Chronometer cmt
ScollView sclVi
TextSwitch txtSwt
ImageSwitch imgSwt
listView lVi 或则lv
ExpandableList epdLt
MapView mapVi
三种命名规范:
- Pascal规范:第1个字符大写,每个单词的第1个字母也大写,其他的所有字符都小写。
- Camel规范:第1个字符不大写,但每个单词的第1个字母大写,其他的所有字符都小写。
- 匈牙利规范:在目标名中加入表示类型的前缀,如strName。