今天突發(fā)奇想,對(duì)編碼習(xí)慣和編程風(fēng)格很感興趣,于是乎,找了一下關(guān)于編程風(fēng)格(Java篇)的資料,希望對(duì)愛好編碼或者開始學(xué)習(xí)編碼的同學(xué)有幫助! 來自《The Elements of Java Style》-《Java編程風(fēng)格》一書,值得一讀的書籍,會(huì)讓你在細(xì)節(jié)上節(jié)省很多時(shí)間,合作之間更加愉快! 好處不多說了,但是有幾個(gè)原則如下: 1.保持原有風(fēng)格 2.堅(jiān)持最小驚奇原則 3.第一次就做對(duì) 4.記錄所有非規(guī)范行為 格式規(guī)范:1.縮進(jìn)嵌套的代碼:在每個(gè)代碼塊和嵌套中加入縮進(jìn),縮進(jìn)代碼,加強(qiáng)可讀性。這些地方包括【類定義,內(nèi)部類定義,方法定義,靜態(tài)塊,for循環(huán)語句,if-else語句,try、catch和finally塊,匿名內(nèi)部類,while語句,do-while語句】 2.斷開很長的句子:第一,如果包含了逗號(hào),那么在每一個(gè)逗號(hào)后面都另起一行,把逗號(hào)后面的每一個(gè)表達(dá)式都和逗號(hào)前面的表達(dá)式的第一個(gè)字母對(duì)齊。第二,應(yīng)該在優(yōu)先級(jí)最低的運(yùn)算符之前斷行。 3.使用空白:關(guān)鍵字和左括號(hào)之間,右括號(hào)和緊隨其后的關(guān)鍵字,除了”.”之外的運(yùn)算符與其前后的表達(dá)式之間用空格隔開。每個(gè)邏輯上獨(dú)立的方法和代碼段之間,定義類或者接口的成員之間,每個(gè)類和接口之間應(yīng)該加入空白行。 4.不要直接使用Tab控制符:不同環(huán)境對(duì)Tab控制符的解釋也是不同的。 命名約定:1.名稱應(yīng)該具有實(shí)際意義 2.使用人們熟悉的名稱 3.謹(jǐn)慎使用過長的名字,可以使用簡明通用的縮寫 4.盡量保留元音字母 5.縮寫詞的第一個(gè)字母大寫 6.不要使用大小寫來區(qū)分的名字 包命名: 1.用你所在組織的域名的倒序小寫形式作為包的根限定詞 2.使用單獨(dú)的小寫詞作為每個(gè)包的根名 3.僅當(dāng)新舊版本二進(jìn)制兼容的時(shí)候,其包可以使用相同的名字,否則,請(qǐng)使用新名字 類型命名: 1.類和接口名中的每個(gè)單詞的第一個(gè)字母大寫 類命名: 1.用名詞命名類 2.具有成組相關(guān)屬性,靜態(tài)服務(wù)或者常量的類名字使用復(fù)數(shù)形式 接口命名: 1.用名詞或者形容詞命名接口 方法命名: 1.方法名中的第一個(gè)單詞小寫,其后每個(gè)單詞的第一個(gè)字母大寫 2.用動(dòng)詞命名方法 3.遵循JavaBean中命名屬性訪問函數(shù)方法:set,get,is 變量命名: 1.變量命中的第一個(gè)單詞小寫,其后的每個(gè)單詞的第一個(gè)字母大寫 2.用名詞命名變量 3.集合引用名要用復(fù)數(shù)形式 4.為不重要的臨時(shí)變量簡歷并使用一套標(biāo)準(zhǔn)名字 字段命名: 1.使用this字段變量可以區(qū)分開局部變量 參數(shù)命名: 1.構(gòu)造函數(shù)或者”set”方法給字段分配參數(shù)賦值,參數(shù)名應(yīng)該和字段名相同 常量命名: 1.常量的每個(gè)單詞均大寫,單詞之間使用下劃線連接 文檔約定:1.為使用和維護(hù)你的代碼的人編寫文檔 2.注釋和代碼要同步 3.使用積極的語氣,省略無用的詞語 注釋類型:1.用文檔注釋來描述編程接口 2.用標(biāo)準(zhǔn)注釋格式隱藏代碼而不必刪除它們 3.用單行注釋解釋實(shí)現(xiàn)細(xì)節(jié) 文檔注釋: 1.在編寫代碼前描述編程接口 2.為公用,受保護(hù),包,私有成員建立文檔 3.為每個(gè)包編寫總結(jié)和概述 4.為包的每個(gè)應(yīng)用程序或組編寫概述 注釋風(fēng)格: 1.對(duì)所有文檔注釋使用統(tǒng)一的格式和組織結(jié)構(gòu) 2.關(guān)鍵字,標(biāo)識(shí)符和常量應(yīng)放到<code>…</code>標(biāo)簽中 3.將代碼放入<pre>…</pre>標(biāo)簽中 4.在標(biāo)識(shí)符第一次出現(xiàn)的時(shí)候用{@link}標(biāo)簽 5.為Javadoc標(biāo)簽簡歷并使用一套固定的順序 6.使用第三人稱敘述的形式 7.編寫?yīng)毩⒌母攀?/p> 8.省略概述中動(dòng)作和服務(wù)的主語 9.省略事物概述中的對(duì)象和動(dòng)詞 10.使用this而不是the來指代當(dāng)前類中的實(shí)例 11.方法名或者構(gòu)造函數(shù)名不需圓括號(hào),除非你想突出一個(gè)特殊的簽名 注釋內(nèi)容: 1.每個(gè)類、接口、字段和方法都編寫概述 2.完整描述每個(gè)方法的簽名 3.包含示例 4.為前置、后置、不變條件編寫文檔 5.為已知的缺陷和不足編寫文檔 6.為同步語法編寫文檔 內(nèi)部注釋: 1.僅添加有助于理解你的代碼的內(nèi)部注釋 2.描寫代碼為什么這樣做,而不是在做什么 3.避免使用行尾注釋 4.用行尾注釋解釋局部變量聲明 5.建立并使用一套關(guān)鍵詞來標(biāo)識(shí)尚未解決的問題 6.在嵌套程度高的控制結(jié)構(gòu)中標(biāo)記出嵌套結(jié)束位置 7.如果兩個(gè)case標(biāo)記之間沒有break語句,就在中間加入“fall-through”注釋 8.標(biāo)記空語句 編程約定:1.將表示基礎(chǔ)數(shù)據(jù)類型的類聲明為final類型 2.通過本地類型和其他具體類型建立具體類型 3.定義小的類和小的方法 4.定義子類,以便任何使用超類的地方都可以使用子類 5.使所有字段私有 6.使用多態(tài)來替代instanceof 類型安全: 1.以java.lang.Object包裝通用類,提供靜態(tài)類型檢查 2.以類的形式封裝枚舉類型 3.盡量使用泛型 語句和表達(dá)式: 1.用等價(jià)的方法替換重復(fù)的、復(fù)雜的表達(dá)式 2.使用塊語句代替控制流結(jié)構(gòu)的表達(dá)式 3.使用括號(hào)明確操作順序 4.在switch語句中的最后一個(gè)case體使用break語句 5.使用equals(),而不是==來檢測(cè)對(duì)象的對(duì)等關(guān)系 構(gòu)造: 1.構(gòu)造狀態(tài)有效的對(duì)象 2.不要從構(gòu)造函數(shù)中調(diào)用非final方法 3.用嵌套的構(gòu)造函數(shù)消除冗余代碼 異常處理: 1.使用不受檢查、運(yùn)行時(shí)的異常來報(bào)告可能在程序邏輯中出錯(cuò)的嚴(yán)重未查明錯(cuò)誤 2.使用檢查異常來報(bào)告可能發(fā)生,而在正常的程序運(yùn)行時(shí)極少發(fā)生的錯(cuò)誤 3.用返回代碼報(bào)告可預(yù)知的狀態(tài)改變 4.僅轉(zhuǎn)化異常來添加信息 5.不要私自處置運(yùn)行時(shí)或者錯(cuò)誤異常 6.用finally語句塊釋放資源 斷言: 1.按照約定編程 2.用無用代碼消除機(jī)制實(shí)現(xiàn)斷言 3.用斷言捕捉代碼中的邏輯錯(cuò)誤 4.用斷言檢測(cè)方法的前置條件和后置條件 并發(fā): 1.僅在適當(dāng)?shù)牡胤绞褂镁€程 同步: 1.避免同步 2.用同步的包裝器,提供同步接口 3.如果方法包含幾個(gè)不需要同步的重要操作,那么不要同步整個(gè)方法 4.讀寫實(shí)例變量的時(shí)候避免不必要的同步 5.使用notify()而不是notifyAll() 6.為同步初始化使用雙重檢查模式 效率: 1.使用懶惰初始化 2.避免創(chuàng)建不必要的對(duì)象 3.重新初始化并重新使用對(duì)象,盡量不要新建對(duì)象 4.把優(yōu)化工作留在日后 打包約定:1.將經(jīng)常使用、更改、同時(shí)發(fā)布或者互相依存的類型,放在同一個(gè)包里 2.共同封閉原則 3.重用/發(fā)布等價(jià)原則 4.無環(huán)依賴原則 5.將不穩(wěn)定的類和接口隔離在單獨(dú)的包中 6.易于修改的包不要依賴于難以修改的包 7.最大化抽象最大化穩(wěn)定性 8.將高層設(shè)計(jì)和架構(gòu)作為穩(wěn)定的抽象,組織為穩(wěn)定的包 以上僅是一些規(guī)則簡單的羅列,推薦閱讀此書。 |
|