JAVA代碼規(guī)范之珍藏版_第1頁(yè)
JAVA代碼規(guī)范之珍藏版_第2頁(yè)
JAVA代碼規(guī)范之珍藏版_第3頁(yè)
JAVA代碼規(guī)范之珍藏版_第4頁(yè)
JAVA代碼規(guī)范之珍藏版_第5頁(yè)
已閱讀5頁(yè),還剩11頁(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)介

AvenJAVA代碼規(guī)范為規(guī)范代碼結(jié)構(gòu),增加代碼可讀性,提高開發(fā)效率,編寫此文檔。夢(mèng)通網(wǎng)絡(luò)科技發(fā)展有限公司AvenJAVA代碼規(guī)范為規(guī)范代碼結(jié)構(gòu),增加代碼可讀性,提高開發(fā)效率,編寫此文檔。夢(mèng)通網(wǎng)絡(luò)科技發(fā)展有限公司TOC\o"1-3"\h\z\u11046一.Java文件聲明順序 26965二.注釋規(guī)范 258781.文件注釋 3112902.類注釋 3201983.方法注釋 434674.重載方法注釋 4131685.委托方法注釋 4223876.屬性注釋 5145357.方法內(nèi)注釋 516738三.排版規(guī)范 591471.單行代碼長(zhǎng)度 5169972.縮進(jìn) 599113.換行 5175384.語(yǔ)句劃分 610186四.命名規(guī)范 6125861.包命名 6327252.類命名 615653.接口命名 6174984.方法命名 6242145.變量命名 6308416.常量命名 7314217.其他命名 7100138.關(guān)于ext部分的命名 724488五.語(yǔ)句規(guī)范 714196六.編碼規(guī)范 8154821.訪問(wèn)控制 856562.靜態(tài)屬性及方法訪問(wèn) 8259513.變量賦值 8247294.多路分支 8316005.JDBC 8282336.對(duì)象屬性方法 8206867.常量 8103648.函數(shù)參數(shù) 8211049.函數(shù)有效代碼行數(shù) 93009410.返回值 91982711.推薦鏈?zhǔn)骄幋a風(fēng)格 92188112.避免交叉引用 1021494七.編碼原則 109621.針對(duì)接口編程而不是針對(duì)實(shí)現(xiàn)編程 10260532.優(yōu)先使用(對(duì)象)組合而不是(類)繼承 10209843.單一職責(zé)原則 12254354.開放封閉原則 12182175.里氏替換原則 12179326.逆向依賴原則 12132967.接口隔離原則 12一.Java文件聲明順序類或接口應(yīng)該按以下順序聲明:包的定義impot類(輸入包的順序、避免使用*)輸入包應(yīng)該按照java.*.*,javax.*.*,org.*.*,com.*.*的順序import在import的時(shí)候不應(yīng)該使用*(例如:java.util.*)類或接口的定義靜態(tài)變量定義,按public,protected,private順序?qū)嵗兞慷x,按public,protected,private順序構(gòu)造方法方法定義順序按照public方法(類自己的方法),實(shí)現(xiàn)接口的方法,重載的public方法,受保護(hù)方法,包作用域方法和私有方法。建議:類中每個(gè)方法的代碼行數(shù)不要超過(guò)100行。內(nèi)部類的定義二.注釋規(guī)范點(diǎn)擊window的preferences,到下面頁(yè)面增加注釋模板Java>>codestyle>>codetemplates1.文件注釋/***@Title:${file_name}*@Package${package_name}*@Description:*@項(xiàng)目:--項(xiàng)目名稱--*@創(chuàng)建人:${user}*@創(chuàng)建日期:${date}${time}*@修改人:*@修改日期:*@修改原因:*@version:*/2.類注釋/***@ClassName:${package_name}.${type_name}*@Description:*@創(chuàng)建人:${user}*@創(chuàng)建日期:${date}${time}*@修改人:*@修改日期:*@修改原因:*@version:*${tags}*/3.方法注釋/***@Title:${enclosing_method}*@Description:*${tags}*@see${package_name}.${enclosing_type}.${enclosing_method}*@創(chuàng)建人:${user}*@創(chuàng)建時(shí)間:${date}${time}*@修改人:*@修改原因:*@修改時(shí)間:*@版本:*/4.重載方法注釋/***@Title:${enclosing_method}*${see_to_overridden}*@Description:*${tags}*@see${package_name}.${enclosing_type}.${enclosing_method}*@創(chuàng)建人:${user}*@創(chuàng)建時(shí)間:${date}${time}*@修改人:*@修改原因:*@修改時(shí)間:*@版本:*/5.委托方法注釋/***@Title:${enclosing_method}*${see_to_target}*@Description:*${tags}*@see${package_name}.${enclosing_type}.${enclosing_method}*@創(chuàng)建人:${user}*@創(chuàng)建時(shí)間:${date}${time}*@修改人:*@修改原因:*@修改時(shí)間:*@版本:*/6.屬性注釋屬性注釋使用//含義或者/*含義*/說(shuō)明該屬性含義即可7.方法內(nèi)注釋變量聲明注釋加載變量定義后面或者上面,使用//需加入適量的邏輯描述注釋三.排版規(guī)范1.單行代碼長(zhǎng)度代碼應(yīng)避免一行長(zhǎng)度超過(guò)60個(gè)字符2.縮進(jìn)4個(gè)空格常被作為縮進(jìn)排版的一個(gè)單位??s進(jìn)的確切解釋并未詳細(xì)指定(空格vs.制表符)。一個(gè)制表符等于4個(gè)空格。3.換行1.當(dāng)一個(gè)表達(dá)式無(wú)法容納在一行內(nèi)時(shí),可以依據(jù)如下一般規(guī)則斷開之:1).在一個(gè)逗號(hào)后面斷開2).在一個(gè)操作符前面斷開3)寧可選擇較高級(jí)別(higher-level)的斷開,而非較低級(jí)別(lower-level)的斷開4).新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開頭處對(duì)齊5).如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)4個(gè)空格2.關(guān)鍵詞和操作符之間加適當(dāng)?shù)目崭?.相對(duì)獨(dú)立的程序塊與塊之間加空行4.語(yǔ)句劃分循環(huán)、判斷等語(yǔ)句中若有較長(zhǎng)的表達(dá)式或語(yǔ)句,則要進(jìn)行適應(yīng)的劃分。劃分出的新行要進(jìn)行適應(yīng)的縮進(jìn),使排版整齊,語(yǔ)句可讀..函數(shù)或過(guò)程的開始、結(jié)構(gòu)的定義及循環(huán)、判斷等語(yǔ)句中的代碼都要采用縮進(jìn)風(fēng)格四.命名規(guī)范命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標(biāo)識(shí)符意圖的信息,有助于開發(fā)人員理解代碼。1.包命名包命名都是小寫字母,單詞之間用“.”分開。所有的JAVA文件必須建立在com.evensec包下。例如:packageer;2.類命名類命名應(yīng)該都是名詞,第一個(gè)字母都要大寫,其他每個(gè)單詞的第一個(gè)字母都要大寫。要用完整的單詞,除非是被公認(rèn)的單詞縮寫。例如:classIndexCreater3.接口命名接口命名應(yīng)該都是名詞或形容詞,第一個(gè)字母都要大寫,其他每個(gè)單詞第一個(gè)字母都要大寫。要用完整的單詞,除非是被公認(rèn)的單詞縮寫。例如:interfaceContainerOwnerinterfaceRunnable4.方法命名方法的命名應(yīng)該都用動(dòng)詞或是慣用短語(yǔ)描述,第一個(gè)字母都要小寫,其他每個(gè)單詞第一個(gè)字母都要大寫,采用駝峰標(biāo)識(shí)。例如:run()changeLocationTo()getContainerId()5.變量命名所有非靜態(tài)變量名的第一個(gè)字母都要小寫,其他每個(gè)單詞的第一個(gè)字母都要大寫。命名應(yīng)盡量簡(jiǎn)單并且要有意義。變量名的選用應(yīng)該易于記憶,能夠指出其用途。盡量避免單個(gè)字符的變量名,除非是一次性的臨時(shí)變量。臨時(shí)變量通常被取名為i,j,k,m和n,它們一般用于整型;c,d,e,它們一般用于字符型。變量名不應(yīng)以下劃線或美元符號(hào)開頭,盡管這在語(yǔ)法上是允許的。下面是一些正確的變量命名例子:intnumOfContainersStringcontainerId;Datenow;6.常量命名對(duì)于靜態(tài)final變量,在命名時(shí)每一個(gè)單詞都要大寫,單詞之間用“_”分開。例如:finalstaticMIN_WIDTH=4;finalstaticDEFAULT_CONTAINER_SIZE=20;7.其他命名Exception類最好能用“Exception”做為類命名的結(jié)尾。例如:DataNotFoundException抽象類最好能用“Abstract”做為類命名的開頭。例如:AbstractBeanDefinitionTest類最好能用“Test”做為類命名的結(jié)尾。例如:ContainerTest工廠方法最好能把該方法做要?jiǎng)?chuàng)建的對(duì)象類型描述出來(lái)。例如:publicContainercreateContainer();publicLocationnewLocation();類本身實(shí)現(xiàn)的工廠方法,則直接使用publicContainergetInstance()8.關(guān)于ext部分的命名五.語(yǔ)句規(guī)范1.每行至少包含一條簡(jiǎn)單語(yǔ)句。2.在return語(yǔ)句中,后面的value在比較明顯的時(shí)候不要用“()”。例如:return;returnmyDisk.size();return(size?size:defaultSize);3.if語(yǔ)句總是用“{”和“}”括起來(lái)。If-elseif-else一般按段換行,好加注釋,如:if(condition){statements;}//commonselseif(condition){statements;}elseif(condition){statements;}4.在for語(yǔ)句的初始化或更新子句中,避免因使用三個(gè)以上變量,而導(dǎo)致復(fù)雜度提高。5.當(dāng)switch的一個(gè)case順著往下執(zhí)行時(shí)(因?yàn)闆](méi)有break語(yǔ)句),通常應(yīng)在break語(yǔ)句的位置添加注釋。六.編碼規(guī)范1.訪問(wèn)控制提供對(duì)實(shí)例以及類變量的public或private訪問(wèn)控制,盡可能不使用默認(rèn)值或protected訪問(wèn)控制。2.靜態(tài)屬性及方法訪問(wèn)避免用一個(gè)對(duì)象訪問(wèn)一個(gè)類的靜態(tài)變量或方法。應(yīng)該用類名代替。3.變量賦值避免在一個(gè)語(yǔ)句中給多個(gè)變量賦相同的值。4.多路分支用switch()語(yǔ)句實(shí)現(xiàn)多路分支而不使用ifelse。5.JDBC如果使用JDBC,則考慮使用java.sql.PreparedStatement,而不是java.sql.Statement。java.sql.PreparedStatement的預(yù)編譯模式可以減少語(yǔ)句在執(zhí)行時(shí)的硬解析次數(shù)提高效率,同時(shí)本身可以預(yù)防一定的sql注入,安全一些。6.對(duì)象屬性方法用于設(shè)置對(duì)象狀態(tài)的方法前綴必須是set;用于檢索一個(gè)布爾類型對(duì)象狀態(tài)的方法前綴必須是is,而用于檢索其他方法前綴必須是get。7.常量程序中應(yīng)盡可能少使用數(shù)字(或字符),盡可能定義靜態(tài)變量來(lái)說(shuō)明該數(shù)字(或字符)的含義。程序中需要賦值或比較時(shí),使用前面定義的靜態(tài)變量。在循環(huán)控制中例外。8.函數(shù)參數(shù)函數(shù)傳遞的參數(shù)最多不超過(guò)10個(gè) 9.函數(shù)有效代碼行數(shù)單個(gè)函數(shù)的有效代碼行數(shù)最多不能超過(guò)40行,請(qǐng)盡量保持在20-40行10.返回值如果返回值是對(duì)象引用,考慮采用傳入該對(duì)象引用替換掉該返回值例如一個(gè)方法:List<Person>getOld(){returnnew…}List<Person>getYoung(){returnnew…}List<Person>getChild(){returnnew…}可改為:voidgetOld(List<Person>list){使用傳入list填充數(shù)據(jù)voidgetYoung(List<Person>list){使用傳入list填充數(shù)據(jù)}voidgetChild(List<Person>list){使用傳入list填充數(shù)據(jù)}當(dāng)需要填充3個(gè)所有數(shù)據(jù)到一個(gè)List返回,第一種方式需要new三個(gè)list最后合并,第二種則只在最外層new一個(gè),傳入填充,減少new對(duì)象的系統(tǒng)開銷11.推薦鏈?zhǔn)骄幋a風(fēng)格 publicclassPerson{ privateintid; privateStringname; publicPersonsetId(intid){ this.id=id; returnthis; } publicPersonsetName(Stringname){ =name; returnthis; } }使用時(shí)則可以采用這中編程風(fēng)格Personp=newPerson().setId(1).setName(“李”);12.避免交叉引用七.編碼原則1.針對(duì)接口編程而不是針對(duì)實(shí)現(xiàn)編程2.優(yōu)先使用(對(duì)象)組合而不是(類)繼承《極限編程》(Extremeprogramming)的指導(dǎo)原則之一是“只要能用,就做最簡(jiǎn)單的”。一個(gè)似乎需要繼承的設(shè)計(jì)常常能夠戲劇性地使用組合來(lái)代替而大簡(jiǎn)化,從而使其更加靈活。因此,在考慮一個(gè)設(shè)計(jì)時(shí),問(wèn)問(wèn)自己:“使用組合是不是更簡(jiǎn)單?這里真的需要繼承嗎?它能帶來(lái)什么好處?”繼承和組合的比較:面向?qū)ο笙到y(tǒng)中功能復(fù)用的兩種最常用技術(shù)是類繼承和對(duì)象組合(objectcomposition)。正如我們已解釋過(guò)的,類繼承允許你根據(jù)其他類的實(shí)現(xiàn)來(lái)定義一個(gè)類的實(shí)現(xiàn)。這種通過(guò)生成子類的復(fù)用通常被稱為白箱復(fù)用(white-boxreuse)。術(shù)語(yǔ)“白箱”是相對(duì)可視性而言:在繼承方式中,父類的內(nèi)部細(xì)節(jié)對(duì)子類可見(jiàn)。對(duì)象組合是類繼承之外的另一種復(fù)用選擇。新的更復(fù)雜的功能可以通過(guò)組裝或組合對(duì)象來(lái)獲得。對(duì)象組合要求被組合的對(duì)象具有良好定義的接口。這種復(fù)用風(fēng)格被稱為黑箱復(fù)用(black-boxreuse),因?yàn)閷?duì)象的內(nèi)部細(xì)節(jié)是不可見(jiàn)的。對(duì)象只以“黑箱”的形式出現(xiàn)。繼承和組合各有優(yōu)缺點(diǎn)。類繼承是在編譯時(shí)刻靜態(tài)定義的,且可直接使用,因?yàn)槌绦蛟O(shè)計(jì)語(yǔ)言直接支持類繼承。類繼承可以較方便地改變被復(fù)用的實(shí)現(xiàn)。當(dāng)一個(gè)子類重定義一些而不是全部操作時(shí),它也能影響它所繼承的操作,只要在這些操作中調(diào)用了被重定義的操作。但是類繼承也有一些不足之處。首先,因?yàn)槔^承在編譯時(shí)刻就定義了,所以無(wú)法在運(yùn)行時(shí)刻改變從父類繼承的實(shí)現(xiàn)。更糟的是,父類通常至少定義了部分子類的具體表示。因?yàn)槔^承對(duì)子類揭示了其父類的實(shí)現(xiàn)細(xì)節(jié),所以繼承常被認(rèn)為“破壞了封裝性”。子類中的實(shí)現(xiàn)與它的父類有如此緊密的依賴關(guān)系,以至于父類實(shí)現(xiàn)中的任何變化必然會(huì)導(dǎo)致子類發(fā)生變化。當(dāng)你需要復(fù)用子類時(shí),實(shí)現(xiàn)上的依賴性就會(huì)產(chǎn)生一些問(wèn)題。如果繼承下來(lái)的實(shí)現(xiàn)不適合解決新的問(wèn)題,則父類必須重寫或被其他更適合的類替換。這種依賴關(guān)系限制了靈活性并最終限制了復(fù)用性。一個(gè)可用的解決方法就是只繼承抽象類,因?yàn)槌橄箢愅ǔL峁┹^少的實(shí)現(xiàn)。對(duì)象組合是通過(guò)獲得對(duì)其他對(duì)象的引用而在運(yùn)行時(shí)刻動(dòng)態(tài)定義的。組合要求對(duì)象遵守彼此的接口約定,進(jìn)而要求更仔細(xì)地定義接口,而這些接口并不妨礙你將一個(gè)對(duì)象和其他對(duì)象一起使用。這還會(huì)產(chǎn)生良好的結(jié)果:因?yàn)閷?duì)象只能通過(guò)接口訪問(wèn),所以我們并不破壞封裝性;只要類型一致,運(yùn)行時(shí)刻還可以用一個(gè)對(duì)象來(lái)替代另一個(gè)對(duì)象;更進(jìn)一步,因?yàn)閷?duì)象的實(shí)現(xiàn)是基于接口寫的,所以實(shí)現(xiàn)上存在較少的依賴關(guān)系。對(duì)象組合對(duì)系統(tǒng)設(shè)計(jì)還有另一個(gè)作用,即優(yōu)先使用對(duì)象組合有助于你保持每個(gè)類被封裝,并被集中在單個(gè)任務(wù)上。這樣類和類繼承層次會(huì)保持較小規(guī)模,并且不太可能增長(zhǎng)為不可控制的龐然大物。另一方面,基于對(duì)象組合的設(shè)計(jì)會(huì)有更多的對(duì)象(而有較少的類),且系統(tǒng)的行為將依賴于對(duì)象間的關(guān)系而不是被定義在某個(gè)類中。這導(dǎo)出了我們的面向?qū)ο笤O(shè)計(jì)的第二個(gè)原則:優(yōu)先使用對(duì)象組合,而不是類繼承。組合

1.(對(duì)象)組合是一種通過(guò)創(chuàng)建一個(gè)組合了其它對(duì)象的對(duì)象,從而獲得新功能的復(fù)用方法。

2.將功能委托給所組合的一個(gè)對(duì)象,從而獲得新功能。

3.有些時(shí)候也稱之為"聚合"(aggregation)或"包容"(containment),盡管有些作者對(duì)這些術(shù)語(yǔ)賦予了專門的含義

4.例如:

a.聚合:一個(gè)對(duì)象擁有另一個(gè)對(duì)象或?qū)α硪粋€(gè)對(duì)象負(fù)責(zé)(即一個(gè)對(duì)象包含另一個(gè)對(duì)象或是另一個(gè)對(duì)象的一部分),并且聚合對(duì)象和其所有者具有相同的生命周期。(譯者注:即所謂的"同生共死"關(guān)系,可參見(jiàn)GOF的Design

Patterns:ElementsofReusableObject-OrientedSoftware的引言部分。)

b.包容:一種特殊類型的組合,對(duì)于其它對(duì)象而言,容器中的被包含對(duì)象是不可見(jiàn)的,其它對(duì)象僅能通過(guò)容器對(duì)象來(lái)訪問(wèn)被包含對(duì)象。(Coad)

5.包含可以通過(guò)以下兩種方式實(shí)現(xiàn):

a.根據(jù)引用(Byreference)

b.根據(jù)值(Byvalue)

6.C++允許根據(jù)值或引用來(lái)實(shí)現(xiàn)包含。

7.但是在Java中,一切皆為對(duì)象的引用!組合的優(yōu)點(diǎn)和缺點(diǎn)

1.優(yōu)點(diǎn):

a.容器類僅能通過(guò)被包含對(duì)象的接口來(lái)對(duì)其進(jìn)行訪問(wèn)。

b."黑盒"復(fù)用,因?yàn)楸话瑢?duì)象的內(nèi)部細(xì)節(jié)對(duì)外是不可見(jiàn)。

c.對(duì)裝性好。

d.實(shí)現(xiàn)上的相互依賴性比較小。(譯者注:被包含對(duì)象與容器對(duì)象之間的依賴關(guān)系比較少)

e.每一個(gè)類只專注于一項(xiàng)任務(wù)。

f.通過(guò)獲取指向其它的具有相同類型的對(duì)象引用,可以在運(yùn)行期間動(dòng)態(tài)地定義(對(duì)象的)組合。

2.缺點(diǎn):

a.從而導(dǎo)致系統(tǒng)中的對(duì)象過(guò)多。

b為了能將多個(gè)不同的對(duì)象作為組合塊(compositionblock)來(lái)使用,必須仔細(xì)地對(duì)接口進(jìn)行定義。

繼承1.(類)繼承是一種通過(guò)擴(kuò)展一個(gè)已有對(duì)象的實(shí)現(xiàn),從而獲得新功能的復(fù)用方法。2.泛化類(超類)可以顯式地捕獲那些公共的屬性和方法。3.特殊類(子類)則通過(guò)附加屬性和方法來(lái)進(jìn)行實(shí)現(xiàn)的擴(kuò)展。繼承的優(yōu)點(diǎn)和缺點(diǎn)

1.優(yōu)點(diǎn):

a.容易進(jìn)行新的實(shí)現(xiàn),因?yàn)槠浯蠖鄶?shù)可繼承而來(lái)。

b.易于修改或擴(kuò)展那些被復(fù)用的實(shí)現(xiàn)。

2.缺點(diǎn):

a.破壞了封裝性,因?yàn)檫@會(huì)將父類的實(shí)現(xiàn)細(xì)節(jié)暴露給子類。

b."白盒"復(fù)用,因?yàn)楦割惖膬?nèi)部細(xì)節(jié)對(duì)于子類而言通常是可見(jiàn)的。

c.當(dāng)父類的實(shí)現(xiàn)更改時(shí),子類也不得不會(huì)隨之更

溫馨提示

  • 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)論