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

下載本文檔

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

文檔簡介

1、java編碼規(guī)范文檔Java代碼規(guī)范1.標(biāo)識(shí)符命名規(guī)范1.1簡潔簡潔是指,在統(tǒng)一和達(dá)意的前提下,用盡量少的標(biāo)識(shí)符。如果不能達(dá)意,寧愿不要簡潔。比如:theOrderNameOfTheTargetSupplierWhichls Transferee!太長,transferedTargetSupplierOrderName 貝!|較 好,但是transTgtSplOrdNm就不好了。省略 元音的縮寫方式不要使用,我們的英語往往還沒 有好到看得懂奇怪的縮寫。1.2 英文vs拼音 盡量使用通俗易懂的英文單詞,如果不會(huì)可以向 隊(duì)友求助,實(shí)在不行則使用漢語拼音,避免拼音 與英文混用。比如表示歸檔,用arc

2、hive比較好, 用pigeonhole則不好,用guiDang尚可接受。1.3 包名使用小寫字母如com.xxx.settlment,不要com.xxx.Settlement單詞間不要用字符隔開,比如com.xxx.settlment.jsfutiL 而不要com. xxx. settlement. jsf_util1.4 類名1.4.1 首字母大寫類名要首字母大寫,比如Supplierservice, PaymentOrderAction;不要 supplierservice, paymentOrderAction.1.5 方法名 首字母小寫,如addOrder()不要AddOrder()

3、 動(dòng)詞在前,如 addOrder()9 不要 orderAdd()名稱不要太長動(dòng)詞前綴往往表達(dá)特定的含義,如下表:舉例前綴名createcreateOrder()deleteIIIJ'JdeleteOrderQinit或則初initializeObjectPool創(chuàng) 建, 暗addaddPaidOrder()示 新 創(chuàng) 建 的 對(duì) 象 屬remove 八除removeOrder()initialize始 化, 暗 示 會(huì) /ry, 做 些 諸 如 獲 取 資 源 等 特 殊 動(dòng) 作destroyObjectPooldestroy毀, 暗 示會(huì) 八J. 做些 諸 如放 資 源 的 特 殊

4、 動(dòng) 作open打開openConnection()close關(guān) 閉closeConnection()<read讀 取readUserName()write寫writellserName()入get獲 得getName()set設(shè) 置setName()prepare準(zhǔn) 備prepareOrderList()copy復(fù)制copyCustomerList()modity修 改modifyActualTotalAmount()數(shù)calculat e計(jì)calculateCommission()算執(zhí)行do某 個(gè)doOrderCancelJob()過程dispatcstartstopsend或流程判

5、斷程序流程轉(zhuǎn)向開始結(jié)束發(fā)送某個(gè)消息dispatchllserRequest()startOrderProcessing()stopOrderProcessingQsendOrderPaidMessage()receive接 受 消 息 或 時(shí) 間receiveOrderPaidMessgae()respond響 應(yīng) 用 戶 動(dòng) 作responseOrderListltemClicke d()findupdate查 找 對(duì) 象findNewSupplier()updateCommission()新 對(duì) 象find方法在業(yè)務(wù)層盡量表達(dá)業(yè)務(wù)含義,比如findUnsettledOrders(),查詢未

6、結(jié)算訂單,而 不要 findOrdersByStatus()o 數(shù)據(jù)訪問層, find,update等方法可以表達(dá)要執(zhí)行的sql,比 如findByStatusAndSupplierldOrderByName(S tatus.PAID, 345)1.4 域(field)名1.4.1 靜態(tài)常量 全大寫用下劃線分割,如public static find String ORDER_PAID_EVENT = "ORDER PAID EVENT55;1.4.2 枚舉全大寫,用下劃線分割,如public enum Events ORDER PAID,ORDERCREATED)1.4.3 其他首

7、字母小寫,駱駝法則,如:public String orderName;1.5 局部變量名 參數(shù)和局部變量名首字母小寫,駱駝法則。盡量 不要和域沖突,盡量表達(dá)這個(gè)變量在方法中的意 義。2.代碼格式用空格字符縮進(jìn)源代碼,不要用tab,每個(gè)縮進(jìn)4個(gè)空格。2.1 包的導(dǎo)入 刪除不用的導(dǎo)入,盡量不要使用整個(gè)包的導(dǎo)入。在eclipse下經(jīng)常使用快捷鍵ctrl+shift+o修正導(dǎo)入。2.2 域格式每行只能聲明一個(gè)域。域的聲明用空行隔開。2.3 代碼塊格式2.4.1縮進(jìn)風(fēng)格大括號(hào)的開始在代碼塊開始的行尾,閉合在和代 碼塊同一縮進(jìn)的行首,例如:package com.test;public class Te

8、ststyle extends SomeClass implements Applelnter z Bananalnter public static final String THIS_IS_CONST = nCONST VALUE11;private static void main(String args) int localvariable = 0;public void compute(String arg) if (arg.length() > 0) System.out.printin(arg);)for (int i = 0; i < 10; i+) System.

9、out.printin(arg); while (condition) do otherMethod(); while (condition);switch (i) case 0:callFunction();break;case 1:callFunctionb();break;default:break;2.4.2空格的使用 表示分割時(shí)用一個(gè)空格 不能這樣:if (a >/do something here; 二元三元運(yùn)算符兩邊用一個(gè)空格隔開 如下:a + b = c;b - d = e;return a = b ? 1 : 0;不能如下:a+b=c;b-d

10、=e;return a=b?l:0;2.423逗號(hào)語句后如不換行,緊跟一個(gè)空格如下:call(af b, c)不能如下:call(azb,c);2.4.3空行的使用空行可以表達(dá)代碼在語義上的分割,注釋的作用 不用空行隔開,而用空行隔開不同組的代碼,如 圖:范圍,O將類似操作,或一組操作放在一起order = orderDao.findOrderByld(id);/update propertiesorder.setUserName(userName);order.setPrice(456);order.setStatus(PAID);orderService.updateTotalAmount

11、(order);session . saveOrUpdate(order);上例中的空行,使注釋的作用域很明顯.連續(xù)兩行的空行代表更大的語義分割。方法之間用空行分割域之間用空行分割.超過十行的代碼如果還不用空行分割,就會(huì)增加閱讀困難3注釋規(guī)范3.1 注釋vs代碼 注釋宜少二精,不宜多而濫,更不能誤導(dǎo).命名達(dá)意,結(jié)構(gòu)清晰,類和方法等責(zé)任明確,往往不需要,或者只需要很少注釋,可以讓人讀懂;相反,代碼混亂,再多的注釋都不能彌補(bǔ)。所以,應(yīng)當(dāng)先在代碼本身下功夫。.不能正確表達(dá)代碼意義的注釋,只會(huì)損害代碼的可讀性。 過于詳細(xì)的注釋,對(duì)顯而易見的代碼添加的注釋,羅嗦的注釋,還不如不寫。 注釋要和代碼同步,過

12、多的注釋會(huì)成為開發(fā)的負(fù)擔(dān) 注釋不是用來管理代碼版本的,如果有代碼不要了,直接刪除,svn會(huì)有記錄的,不要 注釋掉,否則以后沒人知道那段注釋掉的代碼該不該刪除。3.2 Java Doc表明類、域和方法等的意義和用法等的注釋,要 以javadoc的方式來寫。Java Doc是個(gè)類的使用者來看的,主要介紹 是什么,怎么用等信息。凡是類的使用者需要知道,都要用Java Doc來寫。非Java Doc的注釋,往往是個(gè)代碼的維護(hù)者看的,著重告述讀者為什么這樣寫,如何修改, 注意什么問題等。如下:* This Is a class comment*/ public class TestClass * Thi

13、s is a field comment*/public String name;* This is a method comment*/ public void call() 3.3 塊級(jí)別注釋3.3.1 塊級(jí)別注釋,單行時(shí)用/,多行時(shí)用/* .*/o3.3.2 較短的代碼塊用空行表示注釋作用域3.3.3 較長的代碼塊要用/*start: */和/*end: */如:/*start:訂單處理*/ /取得daoOrderDao dao = Factory. getDao (nOrderDao11);/*查詢訂單*/Order order = dao.findByld(456);/更新訂單ord

14、er.setUserName(nuun);order.setPassword(npass n);order . setPrice (ndddfl);orderDao.save(order);/*end:訂單處理*/3.3.4 可以考慮使用大括號(hào)來表示注釋范目 使用大括號(hào)表示注釋作用范圍的例子:/*訂單處理*/(/取得daoOrderDao dao = Factory.getDao(nOrderDaon);/*查詢訂單*/Order order = dao.findByld(456);/更新訂單order.setUserName(nuuH);order.setPassword(npassn);o

15、rder.setPrice(ndddn);orderDao.save(order);)3.4 行內(nèi)注釋 行內(nèi)注釋用寫在行尾4最佳實(shí)踐和禁忌4.1 每次保存的時(shí)候,都讓你的代碼是最美的 程序員都是懶惰的,不要想著等我完成了功能, 再來優(yōu)化代碼的格式和結(jié)構(gòu),等真的把功能完 成,很少有人會(huì)再愿意回頭調(diào)整代碼。4.2 使用 log 而不是 System.out.printlnO log可以設(shè)定級(jí)別,可以控制輸出到哪里,容易區(qū)分是在代碼的什么地方打印的,而System.out.print 則不行。而且,System.out.print的速度很慢。所以,除非是有意的,否則,都要用log。至少在提交到svn

16、之 前把 System.out.print 換成 log。4.3 每個(gè)if while for等語句,都不要省略大括號(hào) 看下面的代碼:if (a > b)a+;如果在以后維護(hù)的時(shí)候,需要在a>b時(shí),把b+, 一步小心就會(huì)寫成:if (a > b)a+;b+;這樣就錯(cuò)了,因?yàn)闊o論a和b是什么關(guān)系,b+ 都會(huì)執(zhí)行。如果一開始就這樣寫:if (a > b) a+;相信沒有哪個(gè)笨蛋會(huì)把b+添加錯(cuò)的。而且,這 個(gè)大括號(hào)使作用范圍更明顯,尤其是后面那行很 長要折行時(shí)。4.4 善用 TODO:在代碼中加入/TODO:,大部分的ide都會(huì)幫 你提示,讓你知道你還有什么事沒有做。比如:i

17、f (order.isPaid() /TODO:更新訂單4.5 在需要留空的地方放一個(gè)空語句或注釋,告述讀者,你是故意的 比如:if (!exists(order) 或:if (!exists(order) /nothing to do4.6 不要再對(duì)boolean值做true false判斷比如:if (order.isPaid() = true) / Do some thing here不如寫成:if (order.isPaid() /Do something here 后者讀起來就很是if order is paid,.要比if order's isPaid method ret

18、urns true, . 更容易理解4.7 減少代碼嵌套層次 代碼嵌套層次達(dá)3層以上時(shí),一般人理解起來都 會(huì)困難。下面的代碼是一個(gè)簡單的例子:public void demo(int a, int b, int c) if (a > b) doJobA (); else if (b < c) doJobB() else if (a < c) doJobC ();減少嵌套的方法有很多:.合并條件利用return以省略后面的else.利用子方法 比如上例,合并條件后成為:public void demo(int a, int b, int c) if (a > b &

19、;& b > c) doJobA();if (a > b && c > b) doJobB();if (a <= b && c < b && a < c) doJobC();)如果利用return則成為:public void demo (int a, int b, int c) if (a > b) if (b > c) doJobAO ;return;doJobB()return;)if (b > c) if (a < c) doJobC();利用子方法,就是將嵌套的程序提取

20、出來放到另 外的方法里。4.8 程序職責(zé)單一 關(guān)注點(diǎn)分離是軟件開發(fā)的真理。人類自所以能夠 完成復(fù)雜的工作,就是因?yàn)槿祟惸軌驅(qū)⒐ぷ鞣纸?到較小級(jí)別的任務(wù)上,在做每個(gè)任務(wù)時(shí)關(guān)注更少 的東西。讓程序單元的職責(zé)單一,可以使你在編 寫這段程序時(shí)關(guān)注更少的東西,從而降低難度, 減少出錯(cuò)。4.9 變量的聲明,初始化和被使用盡量放到一起 比方說如下代碼:int orderNum= getOrderNum();/do something wlthou orderNum herecall(orderNum);上例中的注釋處代表了一段和orderNum不相 關(guān)的代碼。orderNum的聲明和初始化離被使用 的地方相

21、隔了很多行的代碼,這樣做不好,不如 這樣:/do something withou orderNum here int orderNum= getOrderNum();call(orderNum);4.10 縮小變量的作用域 能用局部變量的,不要使用實(shí)例變量,能用實(shí)例 變量的,不要使用類變量。變量的生存期越短, 意味著它被誤用的機(jī)會(huì)越小,同一時(shí)刻程序員要 關(guān)注的變量的狀態(tài)越少。實(shí)例變量和類變量默認(rèn) 都不是線程安全的,局部變量是線程安全的。比 如如下代碼:public class OrderPayAction private Order order;public void doAction()

22、order = orderDao.findOrder();doJobl(); doJob2(); )private void doJobl() doSomething(order);)private void doJob2() doOtherThing(order); 上例中order只不過擔(dān)當(dāng)了在方法間傳遞參數(shù) 之用,用下面的方法更好:public class OrderPayActionpublic void doAction() order = orderDao.findOrder(); doJobl(order);doJob2(order); private void doJobl(O

23、rder order) doSomething(order);private void doJob2(Order order) doOtherThing(order);) 4.11 盡量不要用參數(shù)來帶回方法運(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)

24、;/ do lots of things about order例子中calculate方法通過傳入的order對(duì)象來存儲(chǔ)結(jié)果,不如如下寫:public int calculate(Order order) int result = 0;/do lots of computing and store it in the result return result;)public void action() order = orderDao.findOrder();order.setResult(calculate(order);/ do lots of things about order)4.

25、12 避免在方法中出現(xiàn)多個(gè)return語句(退出在你的方法中,確保只有一個(gè) 退出點(diǎn)。不要在一個(gè)方法中使用多于一個(gè)return語句。如,下面的代碼是 不推薦的,因?yàn)樗卸鄠€(gè)退 出點(diǎn)(return語句)。private boolean isEligible(int age) if(age > 18) return true;else return false;上面的代碼可以這么寫(當(dāng)然,F面的代碼還可以改進(jìn),后面再說)。private boolean isEligible(int age) boolean result;if(age > 18) result = true;else result = false; return result;)4.13 簡化ifelse方法:我們寫了一些只要一個(gè)參數(shù)的工具方法,檢查一些條件并根據(jù)條件返回一個(gè)值。 如,在上面見到的isEligible方法。private boolean isEligi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論