源文件以其最顶层的类名来命名,大小写敏感(首字母大写),文件扩展名为.java
源文件编码格式utf-8
android开发比较明显,在布局文件引入字符含有特殊字符如空格,会有警告,需要用到转义符,并把所有String字符写入String.xml文件,对于转义字符建议注释给出解释,这有助于别人阅读和理解。实例如下
<!-- … > ... -->
<string name="loading_label">正在加载…</string>
① 大括号与if, else, for, do, while语句一起使用,即使只有一条语句(或是空),也应该把大括号写上。
if(){
//will to do something
}else{
}
for(Object obj : arrayList){
}
//......................
② 左大括号前不换行,左大括号后换行
public void setText() {
//will to do something
}
③ 一个空的块状结构里什么也不包含,大括号可以简洁地写成{},不需要换行。
public void setTitle(){};
④ 如果它是一个多块语句的一部分(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。
try { } catch (Exception e) { // TODO: handle exception }
⑤ 一行一个语句,一行如果超过屏幕限制,必须自动换行。
⑥ 如果在一条语句后做注释,则双斜杠(//)两边都要空格。这里可以允许多个空格,但没有必要。
if (a == b) { // ...
}
⑦ 枚举常量间用逗号隔开,如果枚举构造函数不是无参(需要注释,也可以对齐注释)需要换行。
/** * Created by idea on 2016/4/21. */
public enum Mode {
onRefresh(
1, // 页码
10, // 每页获取条数
"home" // 请求类型
),
onLoadMore(
2, // 页码
10, // 每页获取条数
"home" // 请求类型
)
}
⑧ 不要使用组合声明
private int a , b; // ×
.........................................
/**常量a定义*/
private int a;
/**常量b定义*/
private int b; // √
⑨ 数组初始化可以写成块状结构
new int[] {
0, 1, 2, 3
}
new int[] {
0,
1,
2,
3
}
new int[] {
0, 1,
2, 3
}
new int[]{0, 1, 2, 3}
⑨ 中括号是类型的一部分:String[] args, 而非String args[]。
⑩ 每个switch语句都包含一个default语句组,即使它什么代码也不包含。
switch (key) {
case ONREFRESH:
break;
case ONLOADMORE:
break;
default:
break;
}
① 包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
com.china.Mobile // ×
..........................
com.china.mobile // √
② 类名都以UpperCamelCase风格编写。
newDialog.java IIstActivity.java // ×
........................
NewDialog.java HistoryActivity.java// √
③ 常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词。
/** 刷新 */
public static final int TYPE_REFRESH = 0;
/** 加载更多 */
public static final int TYPE_LOADMORE = 1;
④ 方法命名主要以set、get、on开头,部分方法命名根据业务需求首字母小写
public void setTitle(String title){
}
public void getState(int tabIndex, int type) {
}
public <T> void onItemClick(int position, View converView, T t){
}
public void login(String userName, String password, Callback callback){
}
⑤ 对于自定义Interface公开set get方法这块,interface变量命名参考lowerCamelCase风格
private OnHeadListener onHeadListener;
public OnHeadListener getOnHeadListener() {
return onHeadListener;
}
public void setOnHeadListener(OnHeadListener onHeadListener) {
this.onHeadListener = onHeadListener;
}
/** * 顶部布局的监听 */
interface OnHeadListener{
/**' * 点击了左侧按钮毁掉该函数 * @param leftView 左侧view */
void onClickLeft(View leftView);
/** * 点击了右侧按钮毁掉该函数 * @param rightView 右侧view */
void onClickRight(View rightView);
}
⑥ 局部变量命名参考lowerCamelCase,在某些情况下可以考虑m+LowerCamelCase风格
/** 顶部布局按键监听 */
private OnHeadListener onHeadListener;
/** 通讯录列表容器 */
private ListView mListView;
⑦ 编码命名最好见名知其意,不要用类似linearlayout1、linearlayout2、linearlayouii等风格,从业务角度命名控件
/** 展示报警列表容器 */
private ListView listView;
/** 设置布局layout */
private LinearLayout settingLayout;
/** 用户名编辑框 */
private EditText userNameEditText;
① 类注释包含开发者信息以及类作用
/** * * 底部导航第四个界面 * @author idea * */
@SuppressLint("InflateParams")
public class SettingsFragment extends Fragment {
}
② 方法注释:重要的方法都要含有注释以便于阅读,方法参数加以说明
/** * 登录方法 * @param userName 登录用户名 * @param password 登录密码 * @param callback 登录接口回调 */
public void login(String userName, String password, Callback callback){
}
③ 变量注释:控件最好都加上注释/* xxx /风格(debug或者阅读时,鼠标放变量上可以随时查看)
/**常量a定义*/
private int a;
/**常量b定义*/
private int b;
④ 接口/抽象注释:在某种情况下存在很多重复代码,那么就需要把方法提取到抽象类或者接口,并做好注释(上面已有接口实例不再累赘叙述)
⑤ 根据实际情况,善用TODO注释
public void config(){
// TODO:配置
}
重复代码出现,要考虑重构复用,抽取成独立的类或者抽取到一个方法比如Fragment的切换管理,每次都要重复调用FragmentManager相关方法,我们可以把它抽取成一个方法放到BaseFragmentActivity以便于它的子类调用,然而我们的项目不止一个,都会用到这些雷同的方法,此时我们需要把它抽取到一个utils类,以便于其他项目集成
把所有的类结构化,具体类型分包和业务分包
开发的同时要思考,多个项目的耦合,业务功能的重叠部分,综合考虑实际情况允许的情况下把这部分功能做成一个插件,以便于其他项目集成。