java代碼規(guī)范_第1頁(yè)
java代碼規(guī)范_第2頁(yè)
java代碼規(guī)范_第3頁(yè)
java代碼規(guī)范_第4頁(yè)
java代碼規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java代碼規(guī)范本規(guī)范以SUN的標(biāo)準(zhǔn)Java代碼規(guī)范為基礎(chǔ),根據(jù)公司的實(shí)際需要,做一些修改。本文檔中沒(méi)有說(shuō)明的地方,請(qǐng)參看SUN Java標(biāo)準(zhǔn)代碼規(guī)范。如果兩邊有沖突,以SUN Java標(biāo)準(zhǔn)為準(zhǔn)。1. 標(biāo)識(shí)符命名規(guī)范1.1 概述標(biāo)識(shí)符的命名力求做到統(tǒng)一、達(dá)意和簡(jiǎn)潔。盡量做到每個(gè)人按照規(guī)范來(lái),多人開(kāi)發(fā)如一人開(kāi)發(fā)一樣。1.1.1 統(tǒng)一統(tǒng)一是指,對(duì)于同一個(gè)概念,在程序中用同一種表示方法,比如對(duì)于供應(yīng)商,既可以用supplier,也可以用provider,但是我們只能選定一個(gè)使用,至少在一個(gè)Java項(xiàng)目中保持統(tǒng)一。統(tǒng)一是作為重要的,如果對(duì)同一概念有不同的表示方法,會(huì)使代碼混亂難以理解。即使不能取得好的

2、名稱,但是只要統(tǒng)一,閱讀起來(lái)也不會(huì)太困難,因?yàn)殚喿x者只要理解一次。1.1.2 達(dá)意達(dá)意是指,標(biāo)識(shí)符能準(zhǔn)確的表達(dá)出它所代表的意義,比如: newSupplier, OrderPaymentGatewayService等;而 supplier1, service2,idtts等則不是好的命名方式。準(zhǔn)確有兩成含義,一是正確,而是豐富。如果給一個(gè)代表供應(yīng)商的變量起名是 order,顯然沒(méi)有正確表達(dá)。同樣的,supplier1, 遠(yuǎn)沒(méi)有targetSupplier意義豐富。1.1.3 簡(jiǎn)潔簡(jiǎn)潔是指,在統(tǒng)一和達(dá)意的前提下,用盡量少的標(biāo)識(shí)符。如果不能達(dá)意,寧愿不要簡(jiǎn)潔。比如:theOrderNameOfTh

3、eTargetSupplierWhichIsTransfered 太長(zhǎng), transferedTargetSupplierOrderName則較好,但是transTgtSplOrdNm就不好了。省略元音的縮寫(xiě)方式不要使用,我們的英語(yǔ)往往還沒(méi)有好到看得懂奇怪的縮寫(xiě)。1.1.4 駱駝法則Java中,除了包名,靜態(tài)常量等特殊情況,大部分情況下標(biāo)識(shí)符使用駱駝法則,即單詞之間不使用特殊符號(hào)分割,而是通過(guò)首字母大寫(xiě)來(lái)分割。比如: supplierName, addNewContract,而不是 supplier_name, add_new_contract。1.1.5 英文 vs 拼音盡量使用通俗易懂的英

4、文單詞,如果不會(huì)可以向隊(duì)友求助,實(shí)在不行則使用漢語(yǔ)拼音,避免拼音與英文混用。比如表示歸檔,用archive比較好, 用pigeonhole則不好,用guiDang尚可接受。1.2 包名使用小寫(xiě)字母如 com.amerisia.ebills,不要 com.amerisia.Ebills單詞間不要用字符隔開(kāi),比如 com.amerisia.ebills,而不要com.amerisia.ebills _util1.3 類名1.3.1 首字母大寫(xiě)類名要首字母大寫(xiě),比如 LCIssueInfoManagerEJB, LCIssueAction;不要 lcIssueInfoManagerEJB, lcIs

5、sueAction.1.3.2 后綴類名往往用不同的后綴表達(dá)額外的意思,如下表:后綴名意義舉例EJB表示這個(gè)類為EJB類LCIssueInfoManagerEJBService表明這個(gè)類是個(gè)服務(wù)類,里面包含了給其他類提同業(yè)務(wù)服務(wù)的方法PaymentOrderServiceImpl這個(gè)類是一個(gè)實(shí)現(xiàn)類,而不是接口PaymentOrderServiceImplInter這個(gè)類是一個(gè)接口LifeCycleInterDao這個(gè)類封裝了數(shù)據(jù)訪問(wèn)方法PaymentOrderDaoAction直接處理頁(yè)面請(qǐng)求,管理頁(yè)面邏輯了類UpdateOrderListActionListener響應(yīng)某種事件的類Payme

6、ntSuccessListenerEvent這個(gè)類代表了某種事件PaymentSuccessEventServlet一個(gè)ServletPaymentCallbackServletFactory生成某種對(duì)象工廠的類PaymentOrderFactoryAdapter用來(lái)連接某種以前不被支持的對(duì)象的類DatabaseLogAdapterJob某種按時(shí)間運(yùn)行的任務(wù)PaymentOrderCancelJobWrapper這是一個(gè)包裝類,為了給某個(gè)類提供沒(méi)有的能力SelectableOrderListWrapperBean這是一個(gè)POJOMenuStateBean1.4 方法名首字母小寫(xiě),如 addOr

7、der() 不要 AddOrder()動(dòng)詞在前,如 addOrder(),不要orderAdd()查詢方法要查詢的內(nèi)容在前,條件在后。 如getXxByXx()動(dòng)詞前綴往往表達(dá)特定的含義,如下表:前綴名意義舉例create創(chuàng)建createOrder()delete刪除deleteOrder()add創(chuàng)建,暗示新創(chuàng)建的對(duì)象屬于某個(gè)集合addPaidOrder()remove刪除removeOrder()init或則initialize初始化,暗示會(huì)做些諸如獲取資源等特殊動(dòng)作initializeObjectPooldestroy銷毀,暗示會(huì)做些諸如釋放資源的特殊動(dòng)作destroyObjectPoo

8、lopen打開(kāi)openConnection()close關(guān)閉closeConnection() b ) /do something here;運(yùn)算符兩邊用一個(gè)空格隔開(kāi)例如:不要寫(xiě)成: 逗號(hào)語(yǔ)句后如不換行,緊跟一個(gè)空格如下:call(a, b, c);不能如下:call(a,b,c);2.6.3 空行的使用空行可以表達(dá)代碼在語(yǔ)義上的分割,注釋的作用范圍,等等。將類似操作,或一組操作放在一起不用空行隔開(kāi),而用空行隔開(kāi)不同組的代碼, 如圖:上例中的空行,使注釋的作用域很明顯. 連續(xù)兩行的空行代表更大的語(yǔ)義分割。 方法之間用空行分割(盡量用一行空行) 域之間用空行分割 超過(guò)

9、十行的代碼如果還不用空行分割,就會(huì)增加閱讀困難3. 注釋規(guī)范3.1 注釋 vs 代碼 注釋宜少二精,不宜多而濫,更不能誤導(dǎo) 命名達(dá)意,結(jié)構(gòu)清晰, 類和方法等責(zé)任明確,往往不需要,或者只需要很少注釋,就可以讓人讀懂;相反,代碼混亂,再多的注釋都不能彌補(bǔ)。所以,應(yīng)當(dāng)先在代碼本身下功夫。 不能正確表達(dá)代碼意義的注釋,只會(huì)損害代碼的可讀性。 過(guò)于詳細(xì)的注釋,對(duì)顯而易見(jiàn)的代碼添加的注釋,羅嗦的注釋,還不如不寫(xiě)。 注釋要和代碼同步,過(guò)多的注釋會(huì)成為開(kāi)發(fā)的負(fù)擔(dān)3.2 Java Doc表明類、域和方法等的意義和用法等的注釋,要以javadoc的方式來(lái)寫(xiě)。Java Doc是個(gè)類的使用者來(lái)看的,主要介紹 是什么,

10、怎么用等信息。凡是類的使用者需要知道,都要用Java Doc 來(lái)寫(xiě)。非Java Doc的注釋,往往是個(gè)代碼的維護(hù)者看的,著重告述讀者為什么這樣寫(xiě),如何修改,注意什么問(wèn)題等。 如下:類3.3 塊級(jí)別注釋3.3.1 塊級(jí)別注釋,單行時(shí)用 /, 多行時(shí)用 /* . */。3.3.2 較短的代碼塊用空行表示注釋作用域3.3.3 較長(zhǎng)的代碼塊要用/*- start: -*/和/*- end: -*/包圍3.4 行內(nèi)注釋行內(nèi)注釋用 / 寫(xiě)在行尾4 最佳實(shí)踐和禁忌4.1 每次保存的時(shí)候,都讓你的代碼是最美的程序員都是懶惰的,不要想著等我完成了功能,再來(lái)優(yōu)化代碼的格式和結(jié)構(gòu),等真的把功能完成,很少有人會(huì)再愿意

11、回頭調(diào)整代碼。4.2 使用log而不是System.out.println()log可以設(shè)定級(jí)別,可以控制輸出到哪里,容易區(qū)分是在代碼的什么地方打印的,而System.out.print則不行。而且,System.out.print的速度很慢。所以,除非是有意的,否則,都要用log。至少在提交到svn之前把System.out.print換成log。4.3 每個(gè)if while for等語(yǔ)句,都不要省略大括號(hào)看下面的代碼:if (a b) a+;如果在以后維護(hù)的時(shí)候,需要在a b 時(shí),把b+,一步小心就會(huì)寫(xiě)成:if (a b) a+; b+;這樣就錯(cuò)了,因?yàn)闊o(wú)論a和b是什么關(guān)系,b+都會(huì)執(zhí)行。

12、 如果一開(kāi)始就這樣寫(xiě):if (a b) a+;相信沒(méi)有哪個(gè)笨蛋會(huì)把b+添加錯(cuò)的。而且,這個(gè)大括號(hào)使作用范圍更明顯,尤其是后面那行很長(zhǎng)要折行時(shí)。4.4 善用TODO:在代碼中加入 /TODO: ,大部分的ide都會(huì)幫你提示,讓你知道你還有什么事沒(méi)有做。比如:if (order.isPaid() /TODO: 更新訂單4.5 在需要留空的地方放一個(gè)空語(yǔ)句或注釋,告述讀者,你是故意的比如:if (!exists(order) ;或:if (!exists(order) /nothing to do4.6 不要再對(duì)boolean值做true false判斷比如:if (order.isPaid() =

13、 true) / Do something here不如寫(xiě)成:if (order.isPaid() /Do something here后者讀起來(lái)就很是 if order is paid, . 要比 if orders isPaid method returns true, 更容易理解4.7 減少代碼嵌套層次代碼嵌套層次達(dá)3層以上時(shí),一般人理解起來(lái)都會(huì)困難。下面的代碼是一個(gè)簡(jiǎn)單的例子:public void demo(int a, int b, int c) if (a b) if (b c) doJobA(); else if (b c) if (a b & b c) doJobA(); i

14、f (a b & c b) doJobB(); if (a = b & c b & a b) if (b c) doJobA(); return; doJobB() return; if (b c) if (a c) doJobC(); 利用子方法,就是將嵌套的程序提取出來(lái)放到另外的方法里。4.8 程序職責(zé)單一關(guān)注點(diǎn)分離是軟件開(kāi)發(fā)的真理。人類自所以能夠完成復(fù)雜的工作,就是因?yàn)槿祟惸軌驅(qū)⒐ぷ鞣纸獾捷^小級(jí)別的任務(wù)上,在做每個(gè)任務(wù)時(shí)關(guān)注更少的東西。讓程序單元的職責(zé)單一,可以使你在編寫(xiě)這段程序時(shí)關(guān)注更少的東西,從而降低難度,減少出錯(cuò)。4.9 變量的聲明,初始化和被使用盡量放到一起比方說(shuō)如下代碼:int

15、 orderNum= getOrderNum();/do something withou orderNum herecall(orderNum);上例中的注釋處代表了一段和orderNum不相關(guān)的代碼。orderNum的聲明和初始化離被使用的地方相隔了很多行的代碼,這樣做不好,不如這樣:/do something withou orderNum hereint orderNum= getOrderNum();call(orderNum);4.10 縮小變量的作用域能用局部變量的,不要使用實(shí)例變量,能用實(shí)例變量的,不要使用類變量。變量的生存期越短,以為著它被誤用的機(jī)會(huì)越小,同一時(shí)刻程序員要關(guān)注

16、的變量的狀態(tài)越少。實(shí)例變量和類變量默認(rèn)都不是線程安全的,局部變量是線程安全的。比如如下代碼:public class OrderPayAction private Order order; public void doAction() order = orderDao.findOrder(); doJob1(); doJob2(); private void doJob1() doSomething(order); private void doJob2() doOtherThing(order); 上例中order只不過(guò)擔(dān)當(dāng)了在方法間傳遞參數(shù)之用,用下面的方法更好:public class

17、OrderPayAction public void doAction() order = orderDao.findOrder(); doJob1(order); doJob2(order); private void doJob1(Order order) doSomething(order); private void doJob2(Order order) doOtherThing(order); 4.11 盡量不要用參數(shù)來(lái)帶回方法運(yùn)算結(jié)果比如:public void calculate(Order order) int result = 0; /do lots of computing and store it in the result order.setResult(result);public void action() order = orderDao.findOrder(); calculate(order); / do lots of things abo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論