




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Java代碼規(guī)范1. 標識符命名規(guī)范1.1 簡潔簡潔是指,在統(tǒng)一和達意的前提下,用盡量少的標識符。如果不能達意,寧愿不要簡潔。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太長, transferedTargetSupplierOrderName則較好,但是transTgtSplOrdNm就不好了。省略元音的縮寫方式不要使用,我們的英語往往還沒有好到看得懂奇怪的縮寫。1.2 英文 vs 拼音盡量使用通俗易懂的英文單詞,如果不會可以向隊友求助,實在不行則使用漢語拼音,避免拼音與英文混用。比如表示歸檔,用archive比較好, 用pigeo
2、nhole則不好,用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()動詞在前,如 addOr
3、der(),不要orderAdd()名稱不要太長動詞前綴往往表達特定的含義,如下表:前綴名意義舉例create創(chuàng)建createOrder()delete刪除deleteOrder()add創(chuàng)建,暗示新創(chuàng)建的對象屬于某個集合addPaidOrder()remove刪除removeOrder()init或則initialize初始化,暗示會做些諸如獲取資源等特殊動作initializeObjectPooldestroy銷毀,暗示會做些諸如釋放資源的特殊動作destroyObjectPoolopen打開openConnection()close關(guān)閉closeConnection()<read讀
4、取readUserName()write寫入writeUserName()get獲得getName()set設(shè)置setName()prepare準備prepareOrderList()copy復(fù)制copyCustomerList()modity修改modifyActualTotalAmount()calculate數(shù)值計算calculateCommission()do執(zhí)行某個過程或流程doOrderCancelJob()dispatch判斷程序流程轉(zhuǎn)向dispatchUserRequest()start開始startOrderProcessing()stop結(jié)束stopOrderProcess
5、ing()send發(fā)送某個消息或事件sendOrderPaidMessage()receive接受消息或時間receiveOrderPaidMessgae()respond響應(yīng)用戶動作responseOrderListItemClicked()find查找對象findNewSupplier()update更新對象updateCommission()find方法在業(yè)務(wù)層盡量表達業(yè)務(wù)含義,比如 findUnsettledOrders(),查詢未結(jié)算訂單,而不要findOrdersByStatus()。 數(shù)據(jù)訪問層,find,update等方法可以表達要執(zhí)行的sql,比如findByStatusAn
6、dSupplierIdOrderByName(Status.PAID, 345)1.6 域(field)名1.6.1 靜態(tài)常量全大寫用下劃線分割,如public static find String ORDER_PAID_EVENT = “ORDER_PAID_EVENT”;1.6.2 枚舉全大寫,用下劃線分割,如public enum Events ORDER_PAID,ORDER_CREATED1.6.3 其他首字母小寫,駱駝法則,如:public String orderName;1.7 局部變量名參數(shù)和局部變量名首字母小寫,駱駝法則。盡量不要和域沖突,盡量表達這個變量在方法中的意義。2
7、. 代碼格式用空格字符縮進源代碼,不要用tab,每個縮進4個空格。2.1 包的導(dǎo)入刪除不用的導(dǎo)入,盡量不要使用整個包的導(dǎo)入。在eclipse下經(jīng)常使用快捷鍵 ctrl+shift+o 修正導(dǎo)入。2.2 域格式每行只能聲明一個域。域的聲明用空行隔開。2.3 代碼塊格式2.4.1 縮進風(fēng)格大括號的開始在代碼塊開始的行尾,閉合在和代碼塊同一縮進的行首,例如:package com.test; public class TestStyle extends SomeClass implements AppleInter, BananaInter public static final Stri
8、ng THIS_IS_CONST = "CONST VALUE" private static void main(String args) int localVariable = 0; public void compute(String arg) if (arg.length() > 0) System.out.println(arg); for (int i = 0; i < 10; i+) System.out.println(arg); while (condition)
9、 do otherMethod(); while (condition); switch (i) case 0: callFunction(); break; case 1: callFunctionb(); break; default: break; 2.4.2 空格的使用 表示分割時用一個空格不能這樣:if ( a > b ) /do something here; 二元三元運算符兩邊用一個空格隔開如下:a + b = c;b - d = e;return a = b ? 1 : 0;不能如下:a+b=c;b-d=e;return a=b?1
10、:0; 逗號語句后如不換行,緊跟一個空格如下:call(a, b, c);不能如下:call(a,b,c);2.4.3 空行的使用空行可以表達代碼在語義上的分割,注釋的作用范圍,等等。將類似操作,或一組操作放在一起不用空行隔開,而用空行隔開不同組的代碼, 如圖:order = orderDao.findOrderById(id); /update propertiesorder.setUserName(userName);order.setPrice(456);order.setStatus(PAID); orderService.updateTotalAmo
11、unt(order); session.saveOrUpdate(order);上例中的空行,使注釋的作用域很明顯.· 連續(xù)兩行的空行代表更大的語義分割。· 方法之間用空行分割· 域之間用空行分割· 超過十行的代碼如果還不用空行分割,就會增加閱讀困難3 注釋規(guī)范3.1 注釋 vs 代碼· 注釋宜少二精,不宜多而濫,更不能誤導(dǎo)· 命名達意,結(jié)構(gòu)清晰, 類和方法等責任明確,往往不需要,或者只需要很少注釋,就可以讓人讀懂;相反,代碼混亂,再多的注釋都不能彌補。所以,應(yīng)當先在代碼本身下功夫。· 不能正確表達代碼
12、意義的注釋,只會損害代碼的可讀性。· 過于詳細的注釋,對顯而易見的代碼添加的注釋,羅嗦的注釋,還不如不寫。· 注釋要和代碼同步,過多的注釋會成為開發(fā)的負擔· 注釋不是用來管理代碼版本的,如果有代碼不要了,直接刪除,svn會有記錄的,不要注釋掉,否則以后沒人知道那段注釋掉的代碼該不該刪除。3.2 Java Doc表明類、域和方法等的意義和用法等的注釋,要以javadoc的方式來寫。Java Doc是個類的使用者來看的,主要介紹 是什么,怎么用等信息。凡是類的使用者需要知道,都要用Java Doc 來寫。非Java Doc的注釋,往往是個代碼的維護者看的,著重告述讀者
13、為什么這樣寫,如何修改,注意什么問題等。 如下:/* This is a class comment*/public class TestClass /* * This is a field comment */ public String name; /* * This is a method comment */ public void call() 3.3 塊級別注釋3.3.1 塊級別注釋,單行時用 /, 多行時用 /* . */。3.3.2 較短的代碼塊用空行表示注釋作用域3.3.3 較長的代碼塊要用/*- start: -*/和/*- end: -*/包圍如
14、:/*-start: 訂單處理 - */取得daoOrderDao dao = Factory.getDao("OrderDao");/* 查詢訂單 */Order order = dao.findById(456);/更新訂單order.setUserName("uu");order.setPassword("pass");order.setPrice("ddd");orderDao.save(order);/*-end: 訂單處理 - */3.3.4 可以考慮使用大括號來表示注釋范圍使用大括號表示注釋作用范圍的
15、例子:/*-訂單處理 - */ /取得dao OrderDao dao = Factory.getDao("OrderDao"); /* 查詢訂單 */ Order order = dao.findById(456); /更新訂單 order.setUserName("uu"); order.setPassword("pass"); order.setPrice("ddd"); orderDao.save(order);3.4 行內(nèi)注釋行內(nèi)注釋用 / 寫在行尾4 最佳實踐和禁忌4.1 每次保
16、存的時候,都讓你的代碼是最美的程序員都是懶惰的,不要想著等我完成了功能,再來優(yōu)化代碼的格式和結(jié)構(gòu),等真的把功能完成,很少有人會再愿意回頭調(diào)整代碼。4.2 使用log而不是System.out.println()log可以設(shè)定級別,可以控制輸出到哪里,容易區(qū)分是在代碼的什么地方打印的,而System.out.print則不行。而且,System.out.print的速度很慢。所以,除非是有意的,否則,都要用log。至少在提交到svn之前把System.out.print換成log。4.3 每個if while for等語句,都不要省略大括號看下面的代碼:if (a > b) a+;如果在以
17、后維護的時候,需要在a > b 時,把b+,一步小心就會寫成:if (a > b) a+; b+;這樣就錯了,因為無論a和b是什么關(guān)系,b+都會執(zhí)行。 如果一開始就這樣寫:if (a > b) a+;相信沒有哪個笨蛋會把b+添加錯的。而且,這個大括號使作用范圍更明顯,尤其是后面那行很長要折行時。4.4 善用TODO:在代碼中加入 /TODO: ,大部分的ide都會幫你提示,讓你知道你還有什么事沒有做。比如:if (order.isPaid() /TODO: 更新訂單4.5 在需要留空的地方放一個空語句或注釋,告述讀者,你是故意的比如:if (!exists(order) ;或
18、:if (!exists(order) /nothing to do4.6 不要再對boolean值做true false判斷比如:if (order.isPaid() = true) / Do something here不如寫成:if (order.isPaid() /Do something here后者讀起來就很是 if order is paid, . 要比 if orders isPaid method returns true, 更容易理解4.7 減少代碼嵌套層次代碼嵌套層次達3層以上時,一般人理解起來都會困難。下面的代碼是一個簡單的例子:public void demo(int
19、 a, int b, int c) if (a > b) if (b > c) doJobA(); else if (b < c) doJobB() else if (b > c) if (a < c) doJobC(); 減少嵌套的方法有很多:· 合并條件· 利用 return 以省略后面的else· 利用子方法比如上例,合并條件后成為:public void demo(int a, int b, int c) if (a > b && b > c) doJobA(); if (a > b &
20、;& 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) doJobA(); return; doJobB() return; if (b > c) if (a < c) doJobC(); 利用子方法,就是將嵌套的程序提取出來放到另外的方法里。4.8 程序職責單一關(guān)注點分離是軟件開發(fā)
21、的真理。人類自所以能夠完成復(fù)雜的工作,就是因為人類能夠?qū)⒐ぷ鞣纸獾捷^小級別的任務(wù)上,在做每個任務(wù)時關(guān)注更少的東西。讓程序單元的職責單一,可以使你在編寫這段程序時關(guān)注更少的東西,從而降低難度,減少出錯。4.9 變量的聲明,初始化和被使用盡量放到一起比方說如下代碼:int orderNum= getOrderNum();/do something withou orderNum herecall(orderNum);上例中的注釋處代表了一段和orderNum不相關(guān)的代碼。orderNum的聲明和初始化離被使用的地方相隔了很多行的代碼,這樣做不好,不如這樣:/do something withou
22、orderNum hereint orderNum= getOrderNum();call(orderNum);4.10 縮小變量的作用域能用局部變量的,不要使用實例變量,能用實例變量的,不要使用類變量。變量的生存期越短,意味著它被誤用的機會越小,同一時刻程序員要關(guān)注的變量的狀態(tài)越少。實例變量和類變量默認都不是線程安全的,局部變量是線程安全的。比如如下代碼:public class OrderPayAction private Order order; public void doAction() order = orderDao.findOrder(); doJob1(); do
23、Job2(); private void doJob1() doSomething(order); private void doJob2() doOtherThing(order); 上例中order只不過擔當了在方法間傳遞參數(shù)之用,用下面的方法更好:public class OrderPayAction public void doAction() order = orderDao.findOrder(); doJob1(order); doJob2(order); private void doJob1(Order order) doSometh
24、ing(order); private void doJob2(Order order) doOtherThing(order); 4.11 盡量不要用參數(shù)來帶回方法運算結(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
25、 lots of things about order例子中calculate方法通過傳入的order對象來存儲結(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 orde
26、r4.12 避免在方法中出現(xiàn)多個return語句(退出點):在你的方法中,確保只有一個 退出點。不要在一個方法中使用多于一個return語句。如,下面的代碼是 不推薦的,因為它有多個退出點(return語句)。private boolean isEligible(int age) if(age > 18) return true; else return false; 上面的代碼可以這么寫(當然,下面的代碼還可以改進,后面再說)。private boolean isEligible(int age) boolean result; if(age > 18) result = true; else result = false; return result;4.13 簡化if-else方法:我們寫了一些只要一個參數(shù)的工具方法,檢查一些條件并根據(jù)條件返回一個值。如,在上面見到的 isEligible方法。privat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無線基站維護培訓(xùn)課件
- 抖音商戶短視頻創(chuàng)意提案評審制度
- BWA-6047-生命科學(xué)試劑-MCE
- 江蘇省興化市顧莊區(qū)三校2024-2025學(xué)年七上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 美發(fā)培訓(xùn)卷杠課件
- 國際多式聯(lián)運操作規(guī)范與風(fēng)險管理
- 航空行業(yè)三年發(fā)展報告:國際與國內(nèi)市場的比較研究
- 2024-2025學(xué)年浙江省杭州市濱江區(qū)數(shù)學(xué)七年級第一學(xué)期期末調(diào)研試題含解析
- 云南司法警官職業(yè)學(xué)院《國畫山水》2023-2024學(xué)年第一學(xué)期期末試卷
- 河道垃圾清理管理辦法
- 七十歲以上老年人換本考駕照三力測試題含答案
- 2026年版廣西高等職業(yè)教育考試(新職教高考)新聞傳播大類《攝影攝像》模擬試卷(第1套)
- 2025年度分布式光伏項目居間代理服務(wù)合同
- 《輸血相容性檢測設(shè)備性能驗證技術(shù)規(guī)范》
- 2024魯科版五四制六年級生物上冊全冊知識點(填空版+背誦版)
- 混齡分組教學(xué)活動設(shè)計
- 債權(quán)轉(zhuǎn)讓協(xié)議書范文范本下載電子版
- 代理記賬業(yè)務(wù)內(nèi)部規(guī)范(三篇)
- 會計師事務(wù)所職業(yè)道德規(guī)章制度
- 蘇教版二年級下冊混合計算題200道及答案
- 外研版(2021)中職英語基礎(chǔ)模塊1 Unit 6 Not Just Tasty For Better Performance,Around the world 教案
評論
0/150
提交評論