----------------------Java規(guī)范----------------------
源文件結(jié)構(gòu)
1. package語句
2. import語句
3. Java Doc
類聲明
1. 只有一個頂級類
2. 命名(包名、類名最好不要用復(fù)數(shù))
包/類或接口/方法
- 包名: 全部小寫帘瞭,用”.”(點)分開,不允許復(fù)數(shù)
例如:com.util 而不能com.utils
- 類: 單個單詞, 首字母大寫
例如: Constant,多個單詞, 每個單詞的首字母大寫, 例如: WatchVideoActivity
- 方法: 單個單詞, 全部小寫
例如: main() 多個單詞, 從第二個單詞開始, 每個單詞的首字母大寫,如setPersonalData()
- 接口:I開頭或不以I開頭。若接口有實現(xiàn),則必須加I语御。若接口用于保存常量,則不必加I席怪。
例如:IAdapter表示適配器接口有功能實現(xiàn)应闯。
ActReqResult表示返回值接口,定義一下返回值常量挂捻。
成員變量/局部變量/靜態(tài)成員變量/常量
成員變量: 小駝峰命名法 如Button sBackButton
靜態(tài)成員變量: 大駝峰命名法 如String mPageNum
局部變量: 小駝峰命名法
常量: 全部大寫, 每個單詞用”_”(下劃線)隔開, (如MAX_SIZE)
格式
1. 大括號
空塊或一行代碼
大括號與if碉纺, else,while等語句一起使用刻撒。若代碼塊為空骨田,可以采用簡潔的書寫方式。
示例:
void doNothing() {} //good
if(condition){
doTest();
} // good
if(condition)
doTest(); //bad
非空塊:K & R 風(fēng)格
示例:
return new MyClass() { @Override public void method() { if (condition()) { try { something(); } catch (ProblemException e) { recover(); } } } };
2. 塊縮進
每當開始一個新的塊声怔,縮進增加四個空格或一個tab盛撑,當塊結(jié)束時,縮進返回先前的縮進級別捧搞〉治溃縮進級別適用于代碼和注釋。
3. 列限制
一個項目可以選擇一行100個字符的列限制胎撇,任何一行如果超過這個字符數(shù)限制介粘,必須自動換行。
4. 變量聲明
每次只聲明一個變量
不要使用組合聲明晚树,比如int a, b;
變量在使用時初始化
不要在一個代碼塊的開頭把局部變量一次性都聲明了(這是c語言的做法)姻采,而是在第一次需要使用它時才聲明。 局部變量在聲明時最好就進行初始化爵憎,或者聲明后盡快進行初始化慨亲。
數(shù)組初始化寫成塊狀結(jié)構(gòu)
示例:
int[] indexs = new int[] { 0, 1, 2, 3 }
5. switch語句
default必須寫
即使default中無代碼,也要寫明default
Fall-through:注釋
在一個switch塊內(nèi)宝鼓,每個語句組要么通過break, continue, return
或拋出異常來終止刑棵,要么通過一條注釋來說明程序?qū)⒗^續(xù)執(zhí)行到下一個語句組, 任何能表達這個意思的注釋都是OK的(典型的是用//fall through
)愚铡。這個特殊的注釋并不需要在最后一個語句組(一般是default
)中出現(xiàn)蛉签。
示例:
switch (input) {
case 1:
case 2:
prepareOneOrTwo(); // fall through
case 3:
handleOneTwoOrThree();
break;
default:
handleLargeNumber(input);
break;
}
6. 注釋
塊注釋與其周圍的代碼在同一縮進級別胡陪。它們可以是/.../風(fēng)格,也可以是//...風(fēng)格碍舍。對于多行的/.../注釋柠座,后續(xù)行必須從開始, 并且與前一行的對齊片橡。
7. Modifiers
類和成員的modifiers如果存在妈经,則按Java語言規(guī)范中推薦的順序出現(xiàn)。
示例:
public protected private abstract static final transient volatile synchronized native strictfp
編程實踐
1. @Override:能寫必須寫
只要是合法的捧书,就把@Override
注解給用上狂塘。
2. 捕獲的異常:不能忽視
打印異常,如果沒有內(nèi)容鳄厌,請加注釋
示例:
try {
int i = Integer.parseInt(response);
return handleNumericResponse(i);
} catch (NumberFormatException ok) {
// it's not numeric; that's fine, just continue
}
return handleTextResponse(response);
3. 靜態(tài)成員:使用類進行調(diào)用
使用類名調(diào)用靜態(tài)的類成員荞胡,而不是具體某個對象或表達式。
Foo foo = ...;
Foo.staticMethod(); // good
foo.staticMethod(); // bad
somethingThatYieldsAFoo().staticMethod(); // very bad
4. Finalizers: 禁用
極少會去重寫Object.finalize了嚎。
JavaDoc
1. 格式
類
/**
* Created by username on 2017/1/1
*/
方法
1\. 多行注釋
/**
* Multiple lines of Javadoc text are written here,
* wrapped normally...
*/
public int method(String p1) {
...
}
2\. 單行注釋
/** An especially short bit of Javadoc. */
Javadoc標記
標準的Javadoc標記按以下順序出現(xiàn):@param
, @return
, @throws
, @deprecated
, 前面這4種標記如果出現(xiàn)泪漂,描述都不能為空。 當描述無法在一行中容納歪泳,連續(xù)行需要至少再縮進4個空格萝勤。
2. 內(nèi)容
類、接口注釋:說明類與接口的功能
方法注釋:說明方法的功能呐伞,以下情況必須添加注釋
- 接口中定義的所有方法
- 抽象類中自定義的抽象方法
- 抽象父類的自定義公用方法
- 工具類的公用方法
- 一些功能復(fù)雜不容易懂的方法
成員變量和常量注釋:說明變量或常量代表的意義敌卓,以下情況必須添加注釋
- 接口中定義的所有常量
- 公有類的公有常量
- 枚舉類定義的所有枚舉常量
- 實體類的所有屬性變量
----------------------Android規(guī)范----------------------
命名規(guī)范
1. Activity/Fragment/View/數(shù)據(jù)庫/控件名/組件名類名命名
- Activity: 邏輯名稱 + Activity, 例如: LoginActivity
- Fragment: 邏輯名稱 + Fragment, 例如: LoginFragment
- View: 邏輯名稱 + View, 例如: LoginButton
- Database: 邏輯名稱 + DB, 例如: SearchDB
- BroadcastReceiver: 邏輯名稱 + Receiver, 例如: LoginSuccessExistReceiver
2. 方法命名:動詞或動名詞,采用小駝峰命名法伶氢,如onCreate(), onRun()
方法 | 說明 |
---|---|
initXX****() | 初始化相關(guān)方法趟径,使用init為前綴標志 |
isXX****() | 返回為boolean值方法 |
getXX****() | 返回某個值的方法,使用get為前綴標識 |
processXX****() | 處理數(shù)據(jù)方法癣防,使用process為前綴標識 |
displayXX****() | 彈出提示框和提示信息蜗巧,使用display為前綴標識 |
saveXX****() | 與保存數(shù)據(jù)相關(guān)的,使用save為前綴標識 |
resetXX****() | 對數(shù)據(jù)重組的蕾盯,使用reset前綴標識 |
clearXX****() | 清除數(shù)據(jù)相關(guān)的 |
removeXX****() | 清除數(shù)據(jù)相關(guān)的 |
drawXXX****() | 繪制數(shù)據(jù)或效果相關(guān)的幕屹,使用draw前綴標識 |
3. Layout命名:
全部小寫, 用”_”(下劃線)隔開
- Activity: activity + “_” + 邏輯名稱
- Fragment: fragment + “_” + 邏輯名稱
- Dialog: dialog + “_” + 邏輯名稱
- Item: item+ “_” + 邏輯名稱
- PopuWindow: popuWindow+ “_” + 邏輯名稱
- Layout: layout+"_"+功能名
Layout中控件id命名: View的縮寫 + “” + (模塊名稱 + “” +) View的邏輯名稱, (全部小寫)
- ImageView iv_title_back;
- TextView tv_edit_proson_info
- FramenLayout fl_mypage_container
- ReLativeLayout rl_watch_root
- ImageView iv_menu_myhead
View的縮寫參考詳情如下:
- LinearLayout: ll
- RelativeLayout: rl
- FramenLayout: fl
- TextView: tv
- ImageView: iv
- ImageButton: ib
- Button: btn
4. 顏色命名
顏色命名: 常用的容易辨認的顏色用顏色命名
<color name="color_white">#FFFFFF</color>
色值命名: 不常用的顏色
<color name="color_C7C7C7">#C7C7C7</color>
5. Drawable文件名命名
前綴 + ““ +邏輯名稱 + (“” + 狀態(tài)或用途), 全部小寫, 前綴:圖標--ic 圖片--pic 背景--bg
- icon_im_share_house.png
- pic_im_guide_page.png
- bg_empty.png
6. Drawable資源文件命名
選擇器:selector+ (模塊名稱) + “_” + 邏輯名稱 (全部小寫)
- selector_im_share_house
圖形: “shape” + (模塊名稱)+ “” + 邏輯名稱 (全部小寫)
- shape_setting_item_norml.xml
- shape_setting_item_selected.xml
成員順序
一般來說不同的類成員排序可能不同,但考慮到代碼的可讀性级遭,維護者應(yīng)該維護一種邏輯去排序他的成員望拖。
變量:常量>靜態(tài)變量>普通變量
示例:
public static final int PI = 3.14; //常量
public static int index = 1; //靜態(tài)變量
public int x = 1; //共有變量
private int y = 1; //私有變量
--------------------------后記--------------------------
幾條小建議:
1. Activity的類名與layout的命名統(tǒng)一, 如ShareHouseListActivity--activity_share_house_list
2. View變量名與Layout的ViewId統(tǒng)一, 如tvShareHouse--tv_share_house
- activity中在一個View.OnClickListener中處理所有的邏輯
4. 方法放置順序盡量按照調(diào)用的順序
參考:
http://blog.csdn.net/wwj_748/article/details/42347283
http://source.android.com/source/code-style.html
http://blog.csdn.net/h3c4lenovo/article/details/7917293
http://blog.csdn.net/vipzjyno1/article/details/23542617
http://www.androidchina.net/2141.html
https://www.gitbook.com/book/shibin/android-codeformat/details