Java&Android代碼規(guī)范

----------------------Java規(guī)范----------------------

源文件結(jié)構(gòu)

1. package語句

2. import語句

3. Java Doc

類聲明

1. 只有一個頂級類

2. 命名(包名、類名最好不要用復(fù)數(shù))

包/類或接口/方法

  1. 包名: 全部小寫帘瞭,用”.”(點)分開,不允許復(fù)數(shù)

例如:com.util 而不能com.utils

  1. 類: 單個單詞, 首字母大寫

例如: Constant,多個單詞, 每個單詞的首字母大寫, 例如: WatchVideoActivity

  1. 方法: 單個單詞, 全部小寫

例如: main() 多個單詞, 從第二個單詞開始, 每個單詞的首字母大寫,如setPersonalData()

  1. 接口:I開頭或不以I開頭。若接口有實現(xiàn),則必須加I语御。若接口用于保存常量,則不必加I席怪。

例如:IAdapter表示適配器接口有功能實現(xiàn)应闯。

ActReqResult表示返回值接口,定義一下返回值常量挂捻。

成員變量/局部變量/靜態(tài)成員變量/常量

  1. 成員變量: 小駝峰命名法 如Button sBackButton

  2. 靜態(tài)成員變量: 大駝峰命名法 如String mPageNum

  3. 局部變量: 小駝峰命名法

  4. 常量: 全部大寫, 每個單詞用”_”(下劃線)隔開, (如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

  1. 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

http://www.hawstein.com/posts/google-java-style.html

https://segmentfault.com/a/1190000005893399

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挫鸽,一起剝皮案震驚了整個濱河市说敏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掠兄,老刑警劉巖像云,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锌雀,死亡現(xiàn)場離奇詭異蚂夕,居然都是意外死亡迅诬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門婿牍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侈贷,“玉大人,你說我怎么就攤上這事等脂∏温” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵上遥,是天一觀的道長搏屑。 經(jīng)常有香客問我,道長粉楚,這世上最難降的妖魔是什么辣恋? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮模软,結(jié)果婚禮上伟骨,老公的妹妹穿的比我還像新娘。我一直安慰自己燃异,他們只是感情好携狭,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著回俐,像睡著了一般逛腿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仅颇,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天鳄逾,我揣著相機與錄音,去河邊找鬼灵莲。 笑死雕凹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的政冻。 我是一名探鬼主播枚抵,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼明场!你這毒婦竟也來了汽摹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤苦锨,失蹤者是張志新(化名)和其女友劉穎逼泣,沒想到半個月后趴泌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡拉庶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年嗜憔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氏仗。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吉捶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出皆尔,到底是詐尸還是另有隱情呐舔,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布慷蠕,位于F島的核電站珊拼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏流炕。R本人自食惡果不足惜澎现,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浪感。 院中可真熱鬧昔头,春花似錦、人聲如沸影兽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峻堰。三九已至讹开,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捐名,已是汗流浹背旦万。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镶蹋,地道東北人成艘。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像贺归,于是被迫代替她去往敵國和親淆两。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容