例如:mIvAvatar
、rvBooks
、flContainer
。
3.5.3 VariableName(变量名)
变量名中可能会出现量词,我们需要创建统一的量词,它们更容易理解,也更容易搜索。
例如:mFirstBook
、mPreBook
、curBook
。
量词列表 | 量词后缀说明 |
---|---|
First |
一组变量中的第一个 |
Last |
一组变量中的最后一个 |
Next |
一组变量中的下一个 |
Pre |
一组变量中的上一个 |
Cur |
一组变量中的当前变量 |
3.5.4 Type1(数据类型)
对于表示集合或者数组的非常量字段名,我们可以添加后缀来增强字段的可读性,比如:
集合添加如下后缀:List、Map、Set。
数组添加如下后缀:Arr。
例如:mIvAvatarList
、userArr
、firstNameSet
。
注意:如果数据类型不确定的话,比如表示的是很多书,那么使用其复数形式来表示也可,例如
mBooks
。
3.6 参数名
参数名以 lowerCamelCase
风格编写,参数应该避免用单个字符命名。
3.7 局部变量名
局部变量名以 lowerCamelCase
风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
虽然缩写更宽松,但还是要避免用单字符进行命名,除了临时变量和循环变量。
即使局部变量是 final
和不可改变的,也不应该把它示为常量,自然也不能用常量的规则去命名它。
3.8 临时变量
临时变量通常被取名为 i
、j
、k
、m
和 n
,它们一般用于整型;c
、d
、e
,它们一般用于字符型。 如:for (int i = 0; i < len; i++)
。
3.9 类型变量名
类型变量可用以下两种风格之一进行命名:
- 单个的大写字母,后面可以跟一个数字(如:
E
,T
,X
,T2
)。 - 以类命名方式(参考3.2 类名),后面加个大写的 T(如:
RequestT
,FooBarT
)。
更多还可参考:阿里巴巴 Java 开发手册
4 代码样式规范
4.1 使用标准大括号样式
左大括号不单独占一行,与其前面的代码位于同一行:
class MyClass {
int func() {
if (something) {
// …
} else if (somethingElse) {
// …
} else {
// …
}
}
}
我们需要在条件语句周围添加大括号。例外情况:如果整个条件语句(条件和主体)适合放在同一行,那么您可以(但不是必须)将其全部放在一行上。例如,我们接受以下样式:
if (condition) {
body();
}
同样也接受以下样式:
if (condition) body();
但不接受以下样式:
if (condition)
body(); // bad!
4.2 编写简短方法
在可行的情况下,尽量编写短小精炼的方法。我们了解,有些情况下较长的方法是恰当的,因此对方法的代码长度没有做出硬性限制。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。
4.3 类成员的顺序
这并没有唯一的正确解决方案,但如果都使用一致的顺序将会提高代码的可读性,推荐使用如下排序:
- 常量
- 字段
- 构造函数
- 重写函数和回调
- 公有函数
- 私有函数
- 内部类或接口
例如:
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
private String mTitle;
private TextView mTextViewTitle;
@Override
public void onCreate() {
…
}
public void setTitle(String title) {
mTitle = title;
}
private void setUpView() {
…
}
static class AnInnerClass {
}
}
如果类继承于 Android 组件(例如 Activity
或 Fragment
),那么把重写函数按照他们的生命周期进行排序是一个非常好的习惯,例如,Activity
实现了 onCreate()
、onDestroy()
、onPause()
、onResume()
,它的正确排序如下所示:
public class MainActivity extends Activity {
//Order matches Activity lifecycle
@Override
public void onCreate() {}
@Override
public void onResume() {}
@Override
public void onPause() {}
@Override
public void onDestroy() {}
}
4.4 函数参数的排序
在 Android 开发过程中,Context
在函数参数中是再常见不过的了,我们最好把 Context
作为其第一个参数。
正相反,我们把回调接口应该作为其最后一个参数。
例如:
// Context always goes first
public User loadUser(Context context, int userId);
// Callbacks always go last
public void loadUserAsync(Context context, int userId, UserCallback callback);
4.5 字符串常量的命名和值
Android SDK 中的很多类都用到了键值对函数,比如 SharedPreferences
、Bundle
、Intent
,所以,即便是一个小应用,我们最终也不得不编写大量的字符串常量。
当时用到这些类的时候,我们 必须 将它们的键定义为 static final
字段,并遵循以下指示作为前缀。
类 | 字段名前缀 |
---|---|
SharedPreference |