android 代碼樣式規(guī)范

原文地址 把重點記錄下
https://source.android.com/source/code-style.html

1.不要忽略異常(空的catch字句)

不要不捕獲異常

推薦方式
推薦方式

2.不要使用Findlizer

Finalizer是一種在對象被垃圾回收時執(zhí)行一段代碼的方法。雖然他們可以方便地進行清理(特別是外部資源)只酥,但是沒有保證什么時候調(diào)用終結(jié)器(甚至?xí)徽{(diào)用)。

Android不使用finalizer。在大多數(shù)情況下,您可以從具有良好異常處理的終結(jié)器中完成所需的操作颓哮。如果你絕對需要它趴乡,定義一個close()方法(或類似的),并準確地記錄該方法需要被調(diào)用時(見InputStream的例子)惑淳。在這種情況下,只要不希望溢出日志饺窿,就可以打印來自終結(jié)器的短日志消息歧焦,但不是必需的。

3.Java庫規(guī)則

舊的代碼使用舊的庫 在創(chuàng)建新的組件不要使用不推薦使用的庫

有使用Android的Java庫和工具的約定肚医。在某些情況下绢馍,約定以重要的方式發(fā)生了變化,較舊的代碼可能使用已棄用的模式或庫肠套。當使用這樣的代碼舰涌,可以繼續(xù)現(xiàn)有的風(fēng)格。但是你稚,在創(chuàng)建新組件時舵稠,不要使用不推薦使用的庫。

4.Java風(fēng)格規(guī)則

使用Javadoc標準注釋

每個文件應(yīng)在頂部有一個版權(quán)聲明入宦,其后是package和import語句(每個塊由空行分隔)哺徊,最后是類或接口聲明。在Javadoc注釋中乾闰,描述類或接口的作用落追。

注釋規(guī)范

你寫的每個類和公共方法必須包含一個Javadoc注釋,至少有一個句子描述類或方法的作用涯肩。這句話應(yīng)以第三人稱描述性動詞開始轿钠。

注釋規(guī)范
注釋規(guī)范

如何為javadoc編寫注釋 [http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html]

5.寫短的方法

如果一個方法超過40行左右,考慮它是否可以分解而不傷害程序的結(jié)構(gòu)病苗。

6.在標準位置定義字段

在文件的頂部或在使用它們的方法之前定義字段疗垛。

7.限制變量范圍

將局部變量范圍保持最小
循環(huán)變量應(yīng)在for語句本身中聲明

8.次序?qū)胝Z句

android import
第三方 import
java 和 javax

9.使用縮進空格
我們使用四(4)個空格縮進塊,而不是制表符硫朦。當有疑問時贷腕,要與周圍的代碼一致。

我們使用八(8)個空格縮進進行換行,包括函數(shù)調(diào)用和賦值泽裳。例如瞒斩,這是正確的:

縮進

10.遵循字段命名約定

非公共,非靜態(tài)字段名以m開頭涮总。
靜態(tài)字段名稱以s開頭胸囱。
其他字段以小寫字母開頭。
公共靜態(tài)最終字段(常量)為ALL_CAPS_WITH_UNDERSCORES瀑梗。

命名規(guī)范

11.使用標準括號樣式
大括號不要自己一行; 大括號和代碼在同一行:

標準括號

我們需要在條件語句周圍添加括號烹笔。異常:如果整個條件(條件和主體)適合一行,你可以(但沒有義務(wù))把它全部放在一行上抛丽。例如箕宙,這是可以接受的:

括號規(guī)范

12.限制線長度

代碼中的每行文字長度最多為100個字符。雖然許多討論都圍繞這個規(guī)則铺纽,但是決定仍然是100個字符是最大值,以下例外:

如果注釋行包含示例命令或長度超過100個字符的文字URL哟忍,則該行可能長于100個字符狡门,以便于剪切和粘貼。
導(dǎo)入行可以超過限制锅很,因為人們很少看到它們(這也簡化了工具寫入)其馏。
使用標準Java注釋

注釋應(yīng)該在同一語言元素的其他修飾符之前。簡單的標記注釋(例如@Override)可以與語言元素列在同一行爆安。如果有多個注釋或參數(shù)化注釋叛复,它們應(yīng)按字母順序逐行列出。

13.使用標準Java注釋

注釋應(yīng)該在同一語言元素的其他修飾符之前扔仓。簡單的標記注釋(例如@Override)可以與語言元素列在同一行褐奥。如果有多個注釋或參數(shù)化注釋,它們應(yīng)按字母順序逐行列出翘簇。

Java中的三個預(yù)定義注釋的Android標準實踐是:

@Deprecated:當不建議使用注釋元素時撬码,必須使用@Deprecated注釋。如果使用@Deprecated注釋版保,則還必須具有@deprecated Javadoc標記呜笑,并且應(yīng)該命名替代實現(xiàn)。此外彻犁,請記住叫胁,一個@Deprecated方法 仍然應(yīng)該工作。如果您看到舊代碼帶有@deprecated Javadoc標記汞幢,請?zhí)砑覢Deprecated注釋驼鹅。
@Override:當方法從超類覆蓋聲明或?qū)崿F(xiàn)時,必須使用@Override注釋。例如谤民,如果使用@inheritdocs Javadoc標記堰酿,并從類(而不是接口)派生,則還必須注釋該方法@覆蓋父類的方法张足。
@SuppressWarnings:@SuppressWarnings注釋只應(yīng)在不可能消除警告的情況下使用触创。如果警告通過此“不可能消除”測試,則必須使用@SuppressWarnings注釋为牍,以確保所有警告都反映代碼中的實際問題哼绑。
當需要@SuppressWarnings注釋時,必須以TODO注釋作為前綴碉咆,解釋“不可能消除”條件抖韩。這通常會識別具有尷尬界面的違規(guī)類。例如:
// TODO: The third-party class com.third.useful.Utility.rotate() needs generics
@SuppressWarnings("generic-cast")
List<String> blix = Utility.rotate(blax);
當需要@SuppressWarnings注釋時疫铜,應(yīng)重構(gòu)代碼以隔離應(yīng)用注釋的軟件元素茂浮。

注釋

14.將首字母縮略詞作為詞

將縮寫詞和縮寫詞作為命名變量,方法和類中的單詞壳咕,以使名稱更易讀:

命名

由于JDK和Android代碼庫在首字母縮略詞之間非常不一致席揽,因此幾乎不可能與周圍的代碼一致。因此谓厘,始終將首字母縮寫作為詞幌羞。

15.使用TODO注釋

使用TODO注釋代碼是臨時的,短期的解決方案竟稳,或者足夠好但不完美的代碼属桦。TODO應(yīng)在所有大寫字母中包含字符串TODO,后跟冒號:

// TODO: Remove this code after the UrlTable2 has been checked in.

// TODO: Change this to use a flag instead of a constant.

如果您的TODO的形式是“在未來的日期做某事”他爸,請確保您包括一個非常具體的日期(“修復(fù)在2005年11月”)或一個非常具體的事件(“刪除此代碼之后所有生產(chǎn)混音師理解協(xié)議V7 聂宾。“)诊笤。

16.日志節(jié)制

雖然記錄是必要的亏吝,但它對性能具有顯著的負面影響,并且如果不保持合理的簡短盏混,則快速失去其有用性蔚鸥。日志記錄工具提供五個不同級別的日志記錄:

ERROR:當發(fā)生致命事件時使用,即某些會有用戶可見的后果许赃,并且如果沒有顯式刪除某些數(shù)據(jù)止喷,卸載應(yīng)用程序,擦除數(shù)據(jù)分區(qū)或重新整理整個設(shè)備(或更糟)混聊,將無法恢復(fù)弹谁。此級別始終記錄。在ERROR級別上證明某些日志記錄的問題通常是被報告給統(tǒng)計信息收集服務(wù)器的好候選。

WARNING:在發(fā)生嚴重和意外事件時使用预愤,即某些會有用戶可見的后果沟于,但可能通過執(zhí)行一些明確的操作來恢復(fù),而不會丟失數(shù)據(jù)植康,從等待或重新啟動應(yīng)用程序到重新下載新版本的應(yīng)用程序或重新啟動設(shè)備旷太。此級別始終記錄。在WARNING級別進行某些日志記錄的問題也可能被考慮用于向統(tǒng)計信息收集服務(wù)器報告销睁。

INFORMATIVE: 使用注意到供璧,大多數(shù)人發(fā)生了有趣的事情,即當檢測到可能具有廣泛影響的情況時冻记,雖然不一定是錯誤睡毒。這樣的條件只能由合理地認為它是該域中最具權(quán)威性的模塊記錄(以避免非授權(quán)組件的重復(fù)日志記錄)。此級別始終記錄冗栗。

DEBUG:用于進一步注意設(shè)備上可能與調(diào)查和調(diào)試意外行為相關(guān)的內(nèi)容演顾。你應(yīng)該只記錄需要什么來收集有關(guān)你的組件發(fā)生什么的足夠的信息。如果你的調(diào)試日志主導(dǎo)日志隅居,那么你可能應(yīng)該使用詳細日志記錄钠至。

此級別將被記錄,即使在發(fā)布版本上军浆,并且需要被一個if (LOCAL_LOG)或if (LOCAL_LOGD) 塊包圍,其中LOCAL_LOG[D]在類或子組件中定義挡闰,因此可能存在禁用所有此類日志記錄的可能性乒融。因此,在if (LOCAL_LOG)塊中必須沒有活動邏輯摄悯。所有用于日志的字符串構(gòu)建也需要放置在if (LOCAL_LOG)塊內(nèi)赞季。如果它將導(dǎo)致字符串構(gòu)建在if (LOCAL_LOG)塊之外發(fā)生,則日志調(diào)用不應(yīng)該重新映射到方法調(diào)用中奢驯。
還有一些代碼仍然說if (localLOGV)申钩。這也被認為是可接受的,雖然名稱是非標準的瘪阁。

VERBOSE:用于一切撒遣。此級別將僅在調(diào)試版本上記錄,并且應(yīng)由if (LOCAL_LOGV)塊(或等效的)包圍管跺,因此可以默認編譯出來义黎。任何字符串構(gòu)建將從發(fā)布版本中刪除,并需要顯示在if (LOCAL_LOGV)塊內(nèi)豁跑。
筆記:

在給定的模塊中廉涕,除了VERBOSE級別之外,只有在可能的情況下才應(yīng)報告錯誤。在模塊內(nèi)的單個函數(shù)調(diào)用鏈中狐蜕,只有最內(nèi)層函數(shù)應(yīng)該返回錯誤宠纯,并且同一模塊中的調(diào)用者應(yīng)該只添加一些日志,如果這顯著幫助隔離問題层释。

在一個模塊鏈中婆瓜,除了VERBOSE級別以外,當?shù)图壞K檢測到來自高級模塊的無效數(shù)據(jù)時湃累,低級模塊只應(yīng)將此情況記錄到DEBUG日志中勃救,并且僅當日志記錄提供對呼叫者不可用的信息。具體來說治力,不需要記錄拋出異常的情況(異常應(yīng)包含所有相關(guān)信息)蒙秒,或者記錄的唯一信息包含在錯誤代碼中。這在框架和應(yīng)用程序之間的交互中尤其重要宵统,由框架正確處理的第三方應(yīng)用程序引起的條件不應(yīng)該觸發(fā)高于DEBUG級別的日志記錄晕讲。

當通常證明某些日志記錄可能發(fā)生多次的條件時,實施一些速率限制機制以防止用相同(或非常相似)信息的許多重復(fù)副本來溢出日志是一個好主意马澈。

網(wǎng)絡(luò)連接的損失被認為是常見的瓢省,完全預(yù)期的,不應(yīng)該被無償?shù)赜涗浫唷T趹?yīng)用程序中發(fā)生后果的網(wǎng)絡(luò)連接丟失應(yīng)在DEBUG或VERBOSE級別記錄(取決于后果是否足夠嚴重勤婚,并且意外足以登錄到發(fā)布版本中)。
在可由第三方應(yīng)用程序訪問或代表第三方應(yīng)用程序訪問的文件系統(tǒng)上具有完整的文件系統(tǒng)不應(yīng)該記錄在高于INFORMATIVE的級別涤伐。

來自任何不受信任的源(包括共享存儲上的任何文件或來自任何網(wǎng)絡(luò)連接的數(shù)據(jù))的無效數(shù)據(jù)被認為是預(yù)期的馒胆,并且當檢測到無效時,不應(yīng)該在高于DEBUG的級別觸發(fā)任何日志記錄日志記錄應(yīng)盡可能有限)凝果。

請記住祝迂,+在字符串上使用運算符時,隱式創(chuàng)建一個StringBuilder具有默認緩沖區(qū)大衅骶弧(16個字符)和可能的其他臨時String對象型雳,即顯式創(chuàng)建StringBuilders不比依賴于默認的'+'運算符更昂貴(事實上??可以更高效)。請記住山害,調(diào)用的代碼Log.v()在發(fā)布版本上編譯和執(zhí)行纠俭,包括構(gòu)建字符串,即使日志沒有被讀取浪慌。

任何意圖被其他人讀取并在發(fā)布版本中可用的日志記錄應(yīng)該是簡潔的柑晒,而不是含糊的,并且應(yīng)該是可以理解的眷射。這包括所有登錄到DEBUG級別匙赞。

如果可能佛掖,記錄應(yīng)該保持在一行,如果有意義涌庭。線長度最多可達80或100個字符是完全可以接受的芥被,如果可能,應(yīng)避免長度大于約130或160個字符(包括標簽的長度)坐榆。

不應(yīng)使用高于VERBOSE的級別記錄報告成功的日志拴魄。

用于診斷難以重現(xiàn)的問題的臨時日志應(yīng)該保存在DEBUG或VERBOSE級別,并且應(yīng)該包含在允許在編譯時完全禁用它的塊席镀。
小心日志中的安全漏洞匹中。應(yīng)避免私人信息。必須避免有關(guān)受保護內(nèi)容的信息豪诲。這在編寫框架代碼時尤其重要顶捷,因為事先不容易知道什么將是和不會是私人信息或受保護的內(nèi)容。

System.out.println()(或printf()本地代碼)永遠不要使用屎篱。System.out和System.err被重定向到/ dev / null服赎,所以你的打印語句將沒有可見的效果。然而交播,對于這些調(diào)用發(fā)生的所有字符串構(gòu)建仍然被執(zhí)行重虑。

記錄的黃金規(guī)則是,您的日志可能不會不必要地將其他日志推出緩沖區(qū)秦士,就像其他人可能不會推出您的日志缺厉。

17.始終一致

我們分開的想法:一致。如果您正在編輯代碼隧土,請花幾分鐘時間查看周圍的代碼并確定其樣式提针。如果該代碼使用if子句周圍的空格,你也應(yīng)該次洼。如果代碼注釋在他們周圍有一些星星框关贵,那么你的評論也有一些星星遇骑。

有風(fēng)格指導(dǎo)的要點是有一個通用的編碼詞匯卖毁,所以人們可以專注于你在說什么,而不是你如何說落萎。我們在這里提出全球風(fēng)格規(guī)則亥啦,所以人們知道詞匯,但本地風(fēng)格也很重要练链。如果你添加到一個文件的代碼看起來與現(xiàn)有的代碼有很大的不同翔脱,當讀者閱讀它時,它會使讀者脫離他們的節(jié)奏媒鼓。嘗試避免這一點届吁。

18.Javatests樣式規(guī)則
按照測試方法命名約定错妖,使用下劃線將要測試的內(nèi)容與要測試的特定案例分開。這種風(fēng)格使得更容易查看正在測試的案例疚沐。例如:

testMethod_specificCase1 testMethod_specificCase2

void testIsDistinguishable_protanopia() {
ColorMatcher colorMatcher = new ColorMatcher(PROTANOPIA)
assertFalse(colorMatcher.isDistinguishable(Color.RED, Color.BLACK))
assertTrue(colorMatcher.isDistinguishable(Color.X, Color.Y))
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暂氯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亮蛔,更是在濱河造成了極大的恐慌痴施,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件究流,死亡現(xiàn)場離奇詭異辣吃,居然都是意外死亡,警方通過查閱死者的電腦和手機芬探,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門神得,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灯节,你說我怎么就攤上這事循头。” “怎么了炎疆?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵卡骂,是天一觀的道長。 經(jīng)常有香客問我形入,道長全跨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任亿遂,我火速辦了婚禮浓若,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛇数。我一直安慰自己挪钓,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布耳舅。 她就那樣靜靜地躺著碌上,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浦徊。 梳的紋絲不亂的頭發(fā)上馏予,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音盔性,去河邊找鬼霞丧。 笑死,一個胖子當著我的面吹牛冕香,可吹牛的內(nèi)容都是我干的蛹尝。 我是一名探鬼主播后豫,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼突那!你這毒婦竟也來了硬贯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陨收,失蹤者是張志新(化名)和其女友劉穎饭豹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體务漩,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡拄衰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饵骨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘悉。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖居触,靈堂內(nèi)的尸體忽然破棺而出妖混,到底是詐尸還是另有隱情,我是刑警寧澤轮洋,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布制市,位于F島的核電站,受9級特大地震影響弊予,放射性物質(zhì)發(fā)生泄漏祥楣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一汉柒、第九天 我趴在偏房一處隱蔽的房頂上張望误褪。 院中可真熱鬧,春花似錦碾褂、人聲如沸兽间。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘀略。三九已至,卻和暖如春传货,著一層夾襖步出監(jiān)牢的瞬間屎鳍,已是汗流浹背宏娄。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工问裕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孵坚。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓粮宛,卻偏偏與公主長得像窥淆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巍杈,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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

  • 貢獻者的代碼風(fēng)格 下面的代碼樣式是嚴格的規(guī)則忧饭,而不是準則或建議。不符合這些規(guī)則的Android應(yīng)用通常不會被接受筷畦。...
    AlexMofer閱讀 751評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理词裤,服務(wù)發(fā)現(xiàn),斷路器鳖宾,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • 來源與:阿里云棲 禁止用于商業(yè)用途 ps:如果需要電子書 評論你們郵箱 我會發(fā)給你們 下面感覺還是有點亂 目錄 一...
    小向資源網(wǎng)閱讀 7,586評論 0 12
  • 畫了十幾天石頭畫吼砂,石頭畫的差不多了,也不想買石頭鼎文,就畫彩鉛畫渔肩,喜歡畫畫真是一刻都停不下來,給大家看一下這兩天的彩鉛...
    十月手繪閱讀 307評論 0 0
  • 半馬路上的風(fēng)景 窗外秋雨紛飛拇惋,就像在無言的訴說周偎,秋天的涼爽已經(jīng)過去寒冷正在逼近,一年的時光已經(jīng)的所剩無幾撑帖∪乜玻回想這大...
    趙大耳閱讀 244評論 0 2