項(xiàng)目代碼編程規(guī)范_第1頁(yè)
項(xiàng)目代碼編程規(guī)范_第2頁(yè)
項(xiàng)目代碼編程規(guī)范_第3頁(yè)
項(xiàng)目代碼編程規(guī)范_第4頁(yè)
項(xiàng)目代碼編程規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩16頁(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、項(xiàng)目代碼編程規(guī)范1. 應(yīng)用范圍本規(guī)范應(yīng)用于采用 J2EE規(guī)范的項(xiàng)目中,所有項(xiàng)目中的JAVA代碼(含JSP, SERVLET JAVABEAN EJB) JS代碼、HTML弋碼及數(shù)據(jù)庫(kù)設(shè)計(jì)均應(yīng)遵守這個(gè)規(guī)范。同時(shí),也可作為其它項(xiàng)目的參考。2. 設(shè)計(jì)類和方法2.1. 創(chuàng)建具有很強(qiáng)內(nèi)聚力的類方法的重要性往往比類的重要性更容易理解,方法是指執(zhí)行一個(gè)獨(dú)立邏輯的一段代碼。類常被錯(cuò)誤的視為是一個(gè)僅僅用于存放方法的容器。有些開發(fā)人員甚至把這種思路作了進(jìn)一步的發(fā)揮,將他們的所有方法放入單個(gè)類之中。之所以不能正確的認(rèn)識(shí)類的功能,原因之一是類的實(shí)現(xiàn)實(shí)際上并不影響程序的執(zhí)行。當(dāng)一個(gè)工程被編譯時(shí),如果所有方法都放在單個(gè)類

2、中或者放在幾十個(gè)類中,這沒(méi)有任何關(guān)系。雖然類的數(shù)量對(duì)代碼的執(zhí)行并無(wú)太大的影響,但是當(dāng)創(chuàng)建便于調(diào)試和維護(hù)的代碼時(shí),類的數(shù)量有時(shí)會(huì)帶來(lái)很大的影響。類應(yīng)該用來(lái)將相關(guān)的方法組織在一起。當(dāng)類包含一組緊密關(guān)聯(lián)的方法時(shí),該類可以說(shuō)具有強(qiáng)大的內(nèi)聚力。當(dāng)類包含許多互不相關(guān)的方法時(shí),該類便具有較弱的內(nèi)聚力。應(yīng)該努力創(chuàng)建內(nèi)聚力比較強(qiáng)的類。大多數(shù)工程都包含許多并不十分適合與其他方法組合在一起的方法。在這種情況下,可以為這些不合群的方法創(chuàng)建一個(gè)綜合性收容類。創(chuàng)建類時(shí),應(yīng)知道“模塊化”這個(gè)術(shù)語(yǔ)的含義是什么。類的基本目的是創(chuàng)建相當(dāng)獨(dú)立的程 序單元。2.2. 創(chuàng)建松散連接和高度專用的方法2.2.1. 使所有方法都執(zhí)行專門的任

3、務(wù)每個(gè)方法都應(yīng)執(zhí)行一項(xiàng)特定的任務(wù),它應(yīng)出色的完成這項(xiàng)任務(wù)。應(yīng)避免創(chuàng)建執(zhí)行許多不同 任務(wù)的方法。創(chuàng)建專用方法有許多好處。首先調(diào)試將變得更加容易。2.2.2. 盡量使方法成為自成一體的獨(dú)立方法當(dāng)一個(gè)方法依賴于其他方法的調(diào)用時(shí),稱為與其他方法緊密連接的方法。緊密連接的方法會(huì)使調(diào)試和修改變得比較困難,因?yàn)樗鼱可娴礁嗟囊蛩?。松散連接的方法優(yōu)于緊密連接的方法,但你不可能使每個(gè)方法都成為獨(dú)立的方法。若要使方法具備較強(qiáng)的獨(dú)立性,方法之一是盡量減少類變量。創(chuàng)建方法時(shí),設(shè)法將每個(gè)方法視為一個(gè)黑箱,其他例程不應(yīng)要求了解該方法的內(nèi)部工作情況,該方法也不應(yīng)要求了解它外面的工程情況。這就是為什么你的方法應(yīng)依靠參數(shù)而不應(yīng)

4、依靠全局變量的原因。創(chuàng)建專用方法時(shí),請(qǐng)考慮下列指導(dǎo)原則:1) 將復(fù)雜進(jìn)程放入專用方法。如果應(yīng)用程序使用復(fù)雜的數(shù)學(xué)公式,請(qǐng)考慮將每個(gè)公式放入它自己的方法中。這樣使用這些公式的其他方法就不包含用于該公式的實(shí)際代碼。這樣也可以更容易發(fā)現(xiàn)與公式相關(guān)的問(wèn)題。2)將數(shù)據(jù)輸入/輸出(I/O)放入專用方法。3) 將專用方法中可能要修改的代碼隔離。如果你知道某個(gè)進(jìn)程經(jīng)常變更,請(qǐng)將這個(gè)多變的代碼放入專用方法,以便以后可以更容易的進(jìn)行修改,并減少無(wú)意中給其他進(jìn)程帶來(lái)問(wèn)題的可能性。4) 將業(yè)務(wù)規(guī)則封裝在專用方法中。業(yè)務(wù)規(guī)則常屬于要修改的代碼類別,應(yīng)與應(yīng)用程序的其余部分隔開。其他方法不應(yīng)知道業(yè)務(wù)規(guī)則,只有要調(diào)用的方法才

5、使用這些規(guī)則。1.3. 設(shè)計(jì)類和方法時(shí),要達(dá)到下列目的:1) 創(chuàng)建更加容易調(diào)試和維護(hù)的方法2) 創(chuàng)建具有強(qiáng)大內(nèi)聚力的類3) 創(chuàng)建高度專用的方法4) 創(chuàng)建松散連接的方法5) 盡量使方法具有獨(dú)立性6) 提高方法的扇入性7) 降低方法的扇出性1.4. 編程原則1.4.1. 為方法和類賦予表義性強(qiáng)的名字為了使代碼更加容易理解,最容易的方法之一是為你的方法賦予表義性強(qiáng)的名字。函數(shù)名DoIt 、 GetIt 的可讀性很難與CalculateSalesTax 、 RetrieveUserID 相比。由縮寫方法名組成的代碼很難理解和維護(hù),沒(méi)有理由再這樣做了。給方法正確的命名,可使程序工程的調(diào)試和維護(hù)工作大大的

6、改觀。請(qǐng)認(rèn)真對(duì)待方法命名的工作,不要為了減少鍵入操作量而降低方法的可理解度。實(shí)際應(yīng)用舉例:1) 給方法命名時(shí)應(yīng)大小寫字母混合使用。如果句子全使用大寫字母,那么閱讀起來(lái)就非常困難,而大小寫字母混合使用的句子,閱讀起來(lái)就很容易。2) 定義方法名時(shí)不要使用縮寫。如果你認(rèn)為應(yīng)用程序中的某些工程應(yīng)使用縮寫,那么請(qǐng)將這些情況加上注釋,并確保每個(gè)人在所有時(shí)間內(nèi)都使用這些縮寫。決不要在某些方法中對(duì)某些單詞進(jìn)行縮寫,而在別的方法中卻不使用縮寫。3) 定義方法名要統(tǒng)一使用英文單詞或者計(jì)算機(jī)專業(yè)英語(yǔ),要做到見(jiàn)名知意。1.4.2. 創(chuàng)建方法時(shí),始終都應(yīng)顯式地定義它的作用域。1) 如果你真的想創(chuàng)建一個(gè)公用方法,請(qǐng)向代碼

7、閱讀者說(shuō)明這一點(diǎn)。2) 通過(guò)為每個(gè)方法賦予一個(gè)明確定義的作用域,可以減少代碼閱讀者需要投入的工作量。應(yīng)確保你為方法賦予最有意義的作用域。如果一個(gè)方法只被同一類中的另一個(gè)方法調(diào)用,那么請(qǐng)將它創(chuàng)建成私有方法。如果該方法是從多個(gè)類中的多個(gè)方法中調(diào)用,請(qǐng)將該說(shuō)明為公用方法。1.4.3. 用參數(shù)在方法之間傳遞數(shù)據(jù)應(yīng)盡量避免使用類變量。一般來(lái)說(shuō),變量的作用域越小越好。為了減少類變量,方法之一是將數(shù)據(jù)作為參數(shù)在不同方法之間傳遞,而不是讓方法共享類變量。1) 為每個(gè)參數(shù)指定數(shù)據(jù)類型。2) 始終要對(duì)數(shù)進(jìn)行檢驗(yàn),決不要假設(shè)你得數(shù)據(jù)沒(méi)有問(wèn)題。程序員常犯的一個(gè)錯(cuò)誤是在編寫方法時(shí)假設(shè)數(shù)據(jù)沒(méi)有問(wèn)題。在初始編程階段,當(dāng)編寫

8、調(diào)用方法時(shí),這樣的假設(shè)并無(wú)大礙。這時(shí)你完全能夠知道什么是參數(shù)的許可值,并按要求提供這些值。但如果你不對(duì)參數(shù)的數(shù)據(jù)進(jìn)行檢驗(yàn),那么下列情況就會(huì)給你帶來(lái)很大麻煩:另外某個(gè)人創(chuàng)建了一個(gè)調(diào)用方法,但此人不知道允許的值;你在晚些時(shí)候添加了新的調(diào)用方法,并錯(cuò)誤的傳遞了壞數(shù)據(jù)。1.4.4. 其他編程建議1. 注意釋放資源,如文件關(guān)閉,數(shù)據(jù)庫(kù)操作后關(guān)閉ResultSet, Statement, Connection 等, 其他涉及 IO 操作的如:各種Reader, Writer, InputStream , OutputStream 等等。2. 使用 StringBuffer 對(duì)象在處理 String 的時(shí)候

9、要盡量使用StringBuffer 類, StringBuffer 類是構(gòu)成String 類的基礎(chǔ)。 String 類將 StringBuffer 類封裝了起來(lái),(以花費(fèi)更多時(shí)間為代價(jià))為開發(fā)人員提供了一個(gè)安全的接口。當(dāng)我們?cè)跇?gòu)造字符串的時(shí)候,我們應(yīng)該用StringBuffer 來(lái)實(shí)現(xiàn)大部分的工作,當(dāng)工作完成后將StringBuffer 對(duì)象再轉(zhuǎn)換為需要的String 對(duì)象。 比如: 如果有一 個(gè)字符串必須不斷地在其后添加許多字符來(lái)完成構(gòu)造,那么我們應(yīng)該使用StringBuffer 對(duì)象和它的append() 方法。 如果我們用String 對(duì)象代替StringBuffer 對(duì)象的話,會(huì)花費(fèi)許

10、多不必要的創(chuàng)建和釋放對(duì)象的CPU 時(shí)間。3. 避免太多的使用synchronized 關(guān)鍵字避免不必要的使用關(guān)鍵字synchronized,應(yīng)該在必要的時(shí)候再使用它,這是一個(gè)避免死鎖的好方法。必須使用時(shí),也盡量控制范圍,最好在塊級(jí)控制。4. 避免使用java.util.Vector 等那些在jdk1.3 前就有的集合類因?yàn)?"Unlike the new collection implementations, Vector is synchronized." ,所以使用 java.util.Vector 類在性能上會(huì)有所減低。5. 盡量使用接口而不是一個(gè)具體的類比方如下需求

11、,給定一個(gè)SQL 語(yǔ)句,返回一個(gè)對(duì)象的列表,實(shí)現(xiàn)中用java.util.ArrayList實(shí)現(xiàn),于是定義方法為:public java.util.ArrayList getObjectItems(String sql)上面的方法存在一個(gè)問(wèn)題,當(dāng)getObjectItems 內(nèi)改用 Vector 或 LinkedList 實(shí)現(xiàn),外部類必須做相應(yīng)更改。一個(gè)更好的方法是定義返回值為java.util.AbstractList 更合適:public java.util.AbstractList getObjectItems(String sql) 這樣即使更改實(shí)現(xiàn),外部類也不必做相應(yīng)更改。6. 避免使

12、用索引來(lái)調(diào)用數(shù)據(jù)庫(kù)中間層組件返回的結(jié)果集 如:for(int i=1; i<=dt.getRowCount(); i+) String fieldl = dt.getField(i, 0).toString(); 而應(yīng)用字段名來(lái)存取結(jié)果集:for(int i=1; i<=dt.getRowCount(); i+) String fieldl = dt.getField(i, "field1").toString(); 這樣在數(shù)據(jù)庫(kù)設(shè)計(jì)更改或查詢的SQL 語(yǔ)句發(fā)生變化時(shí),不會(huì)影響到程序的執(zhí)行。3. 命名約定所有變量的定義應(yīng)該遵循匈牙利命名法,由表意性強(qiáng)的一個(gè)單詞或

13、多個(gè)單詞組成的名字,而且每個(gè)單詞的首寫字母大寫,其它字母小寫,這樣保證了對(duì)變量名能夠進(jìn)行正確的斷句。3.1. 工程的命名3.1.1. 工程的命名直接使用projectname.3.1.2. 工程目錄的分配(參照各類開發(fā)工具的設(shè)置)1. 設(shè)計(jì)文檔(design): design2. 源代碼(source): src.3. 引用的庫(kù)文件(library) : lib4. 生成的代碼(class): classes5. 生成的文檔(document) : docs3.2. 包3.2.1. 約定根級(jí)目錄以com.* 開頭!(即:實(shí)現(xiàn)主要流程的類和涉及項(xiàng)目系統(tǒng)各項(xiàng)目名稱為下一級(jí)包!本級(jí)目錄為項(xiàng)目的控制類

14、所在管理的類)。再下級(jí)的主要并列目錄名:1) Cloudframework 云存儲(chǔ)開發(fā)框架包2) Cngi 具體的應(yīng)用系統(tǒng)名全部小寫使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音標(biāo)識(shí)符用點(diǎn)號(hào)分隔開來(lái)3.2.2. 舉例3.3. 類,接口3.3.1. 約定類的名字應(yīng)該使用名詞使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音每個(gè)單詞首字母 應(yīng)該大寫避免使用單詞的縮寫,除非它的縮寫已經(jīng)廣為人知,如HTTP實(shí)現(xiàn)類一般采用接口類名+Impl 來(lái)展現(xiàn)3.3.2. 舉例Class Hello;Class HelloWorld ;Interface Apple;Class AppleImpl implements Apple;3.4. 方法3.

15、4.1. 約定第一個(gè)單詞一般是動(dòng)詞。使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音第一個(gè)單詞是小寫,但是中間單詞的首字母是大寫。bool如果方法返回一個(gè)成員變量的值,方法名一般為get+ 成員變量名,如若返回的值是變量,一般以is 作為前綴。如果方法修改一個(gè)成員變量的值,方法名一般為:set+ 成員變量名。3.4.2. 舉例getName();setName();isFirst();3.5. 變量3.5.1. 約定單詞的首字母大寫;但是首個(gè)單詞字母都必須小寫使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音不要用_或 &作為第一個(gè)字母。盡量使用短而且具有意義的單詞。單字符的變量名一般只用于生命期非常短暫的變量。i,j,k

16、,m,n 一般用于int/integers ;c,d,e 一般用于characters 。如果變量是集合,則變量名應(yīng)用復(fù)數(shù)。boolean/ Boolean 類型的使用is 前綴命名組件采用匈牙利命名法。3.5.2. 舉例String fileName;int students;int i;int n;boolean isPass;3.6. 常量3.6.1. 約定所有常量名均全部大寫,單詞間以_隔開。使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音特殊情況下可以使用全拼,但是請(qǐng)注釋說(shuō)明3.6.2. 舉例int I_MAX_NUM;3.7. jsp,html,xml 等文件3.7.1. 約定使用英語(yǔ)單詞,不要使用

17、漢語(yǔ)拼音首單詞小寫,其它單詞首字母 應(yīng)該大寫避免使用單詞的縮寫,除非它的縮寫已經(jīng)廣為人知,如HTTP3.7.2. 舉例注冊(cè),新增查詢頁(yè)面視圖維護(hù)頁(yè)面視圖按日期查詢頁(yè)面視圖register.jsp view.jsp infoMaintain.jsp dateView.jsp3.8. 數(shù)據(jù)庫(kù)表、視圖3.8.1. 約定全部小寫以“_”分隔單詞盡量表義使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音主表用“ info ”表示,每個(gè)表名都加“t_ ”用來(lái)識(shí)別為表對(duì)象3.8.2. 舉例t_user_info縮寫ui 用戶主表t_user_type用戶類型字典表3.9. 數(shù)據(jù)庫(kù)字段3.9.1. 約定首單詞小寫,其他單詞首字母

18、大寫使用英語(yǔ)單詞,不要使用漢語(yǔ)拼音3.9.2. 舉例id name userType userId4. 使用常量4.1. 常數(shù)很容易在數(shù)據(jù)輸入時(shí)出錯(cuò)常數(shù)存在的主要問(wèn)題之一是你很容易在鍵入數(shù)字時(shí)出錯(cuò),從而顛倒了數(shù)字的位置。例如,當(dāng)你鍵入數(shù)字10876 時(shí),很容易的鍵入10867 或18076。與處理變量和保留字的方法不同,編譯器并不在乎顛倒了位置和不正確的數(shù)字,有時(shí)簡(jiǎn)單的錯(cuò)誤造成的問(wèn)題不會(huì)立即表現(xiàn)出來(lái),而當(dāng)問(wèn)題表現(xiàn)出來(lái)時(shí),它們會(huì)以隨機(jī)的計(jì)算錯(cuò)誤的形式出現(xiàn),這些錯(cuò)誤很難準(zhǔn)確定位。用常量來(lái)取代常數(shù)時(shí),編譯器將在編譯時(shí)檢查常量的有效性。如果常量不存在,編譯器便將這一情況通知你,并拒絕進(jìn)行編譯,這可以消

19、除錯(cuò)誤鍵入的數(shù)字帶來(lái)的問(wèn)題,只要常量擁有正確的值,使用該常量的所有代碼也有使用該正確值。4.2. 常數(shù)很難不斷更新4.3. 常量使代碼更容易閱讀使用常量后,得到的一個(gè)額外好處是可使創(chuàng)建的代碼更容易閱讀。常數(shù)很不直觀。也許你對(duì)常 數(shù)非常了解,但其他人則根本看不明白。通過(guò)合理的給常量命名,使用這些常量的代碼就變得 比較直觀了,更容易閱讀。為常量賦予較寬的作用域,這與使用變量時(shí)的情況不同。在一個(gè)應(yīng)用程序中你決不應(yīng)該兩次創(chuàng) 建相同的常量。如果你發(fā)現(xiàn)自己復(fù)制了一個(gè)常量,請(qǐng)將原始的常量說(shuō)明轉(zhuǎn)至較寬的作用域,直 到該常量可供引用它的所有方法為止。5. 變量5.1. 定義有焦點(diǎn)的變量用于多個(gè)目的的變量稱為無(wú)焦

20、點(diǎn)(多焦點(diǎn))的變量。無(wú)焦點(diǎn)變量所代表的意義與程序的執(zhí)行流程有關(guān),當(dāng)程序處于不同位置時(shí),它所表示的意義是不固定的,這樣就給程序的可讀性和可維護(hù)性帶來(lái)了麻煩。5.2. 只對(duì)常用變量名和長(zhǎng)變量名進(jìn)行縮寫如果需要對(duì)變量名進(jìn)行縮寫時(shí),一定要注意整個(gè)代碼中縮寫規(guī)則的一致性。例如,如果在代碼的某些區(qū)域中使用 Cnt,而在另一些區(qū)域中又使用Count,就會(huì)給代碼增加不必要的復(fù)雜性變量名中盡量不要出現(xiàn)縮寫。5.3. 使用統(tǒng)一的量詞通過(guò)在結(jié)尾處放置一個(gè)量詞,就可創(chuàng)建更加統(tǒng)一的變量,它們更容易理解,也更容易搜索。例如 , 請(qǐng) 使 用 strCustomerFirst 和 strCustomerLast , 而 不

21、要 使 用 strFirstCustomer 和 strLastCustomer 。量詞列表:First 、 Last 、 Next、 Prev、 Cur量詞后綴說(shuō)明First 一組變量中的第一個(gè)Last 一組變量中的最后一個(gè)Next 一組變量中的下一個(gè)變量Prev 一組變量中的上一個(gè)Cur 一組變量中的當(dāng)前變量5.4. 使用肯定形式的布爾變量給布爾變量命名時(shí),始終都要使用變量的肯定形式,以減少其它開發(fā)人員在理解布爾變量所代表的意義時(shí)的難度。5.5. 為每個(gè)變量選擇最佳的數(shù)據(jù)類型這樣即能減少對(duì)內(nèi)存的需求量,加快代碼的執(zhí)行速度,又會(huì)降低出錯(cuò)的可能性。用于變量的數(shù)據(jù)類型可能會(huì)影響該變量進(jìn)行計(jì)算所產(chǎn)

22、生的結(jié)果。在這種情況下,編譯器不會(huì)產(chǎn)生運(yùn)行期錯(cuò)誤,它只是迫使該值符合數(shù)據(jù)類型的要求。這類問(wèn)題極難查找。5.6. 盡量縮小變量的作用域如果變量的作用域大于它應(yīng)有的范圍,變量可繼續(xù)存在,并且在不再需要該變量后的很長(zhǎng) 時(shí)間內(nèi)仍然占用資源。它們的主要問(wèn)題是,任何類中的任何方法都能對(duì)它們進(jìn)行修改,并且很難跟蹤究竟是何處 進(jìn)行修改的。占用資源是作用域涉及的一個(gè)重要問(wèn)題。對(duì)變量來(lái)說(shuō),盡量縮小作用域?qū)?huì)對(duì)應(yīng)用程序的 可靠性產(chǎn)生巨大的影響。6. 代碼的格式化6.1. 對(duì)代碼進(jìn)行格式化時(shí),要達(dá)到的目的1. 通過(guò)代碼分割成功能塊和便于理解的代碼段,使代碼更容易閱讀和理解;2. 使用空行和注釋行,將程序中邏輯上不相關(guān)

23、的代碼塊分開。比如:變量聲明部分和代碼語(yǔ)句間的分隔;較長(zhǎng)的方法中,完成不同功能的代碼塊間的分隔。要避免出現(xiàn)邏輯上混亂的分隔,如:某一邏輯功能代碼塊中間用空行進(jìn)行了分隔,但是在相鄰功能代碼塊之間卻沒(méi)有分隔,這樣會(huì)給程序閱讀者造成錯(cuò)覺(jué)。3. 減少為理解代碼結(jié)構(gòu)而需要做的工作;4. 使代碼的閱讀者不必進(jìn)行假設(shè);5. 使代碼結(jié)構(gòu)盡可能做到格式清楚明了。6.2. 編程原則1. 不要將多個(gè)語(yǔ)句放在同一行上。不論是變量聲明,還是語(yǔ)句都不要在一行上書寫多個(gè)。2. 縮進(jìn)后續(xù)行當(dāng)你將變量設(shè)置為某個(gè)值時(shí),所有后續(xù)行的縮進(jìn)位置應(yīng)與第一行的變量值相同;當(dāng)你調(diào)用一個(gè)方法時(shí),后續(xù)行縮進(jìn)到第一個(gè)參數(shù)的開始處;當(dāng)你將變量或?qū)傩?/p>

24、設(shè)置為等于表達(dá)式的計(jì)算結(jié)果時(shí),請(qǐng)從后面分割該語(yǔ)句,以確保該表達(dá)式盡可能放在同一行上。3. 在 if 語(yǔ)句后縮進(jìn);在 else 語(yǔ)句后縮進(jìn)在 switch 語(yǔ)句后縮進(jìn)在 case 語(yǔ)句后縮進(jìn)在do句后縮進(jìn)已經(jīng)用行接續(xù)符分割的語(yǔ)句的各個(gè)行要縮進(jìn)對(duì)從屬于行標(biāo)注的代碼進(jìn)行縮進(jìn)。4. 在執(zhí)行統(tǒng)一任務(wù)的各個(gè)語(yǔ)句組之間插入一個(gè)空行。好的代碼應(yīng)由按邏輯順序排列的進(jìn)程或相關(guān)語(yǔ)句組構(gòu)成。7. 代碼的注釋7.1. 使用代碼注釋的目的1. 文字說(shuō)明代碼的作用(即為什么要用編寫該代碼, 而不是如何編寫);2. 確指出該代碼的編寫思路和邏輯方法;3. 方便人們注意到代碼中的重要轉(zhuǎn)折點(diǎn);4. 使代碼的閱讀者不必在他們的頭腦

25、中仿真運(yùn)行代碼的執(zhí)行方法.5. 說(shuō)明代碼的使用條件。7.2. 編程原則7.2.1. 用文字說(shuō)明代碼的作用:簡(jiǎn)單的重復(fù)代碼做寫什么, 這樣的注釋幾乎不能給注釋增加什么信息. 如果你使用好的命名方法來(lái)創(chuàng)建直觀明了的代碼那么這些類型的注釋絕對(duì)增加不了什么信息.7.2.2. 如果你想違背好的編程原則,請(qǐng)說(shuō)明為什么有的時(shí)候你可能需要違背好的編程原則,或者使用了某些不正規(guī)的方法,. 遇到這種情況時(shí), 請(qǐng)用內(nèi)部注釋來(lái)說(shuō)明你在做什么和為什么要這樣做。技巧性特別高的代碼段,一定要加詳細(xì)的注釋,不要讓其他開發(fā)人員花很長(zhǎng)時(shí)間來(lái)研究一個(gè)高技巧但不易理解的程序段。7.2.3. 用注釋來(lái)說(shuō)明何時(shí)可能出錯(cuò)和為什么出錯(cuò)7.2

26、.4. 在編寫代碼前進(jìn)行注釋給代碼加注釋的方法之一是在編寫一個(gè)方法前首先寫上注釋. 如果你愿意, 可以編寫完整句子的注釋或偽代碼. 一旦你用注釋對(duì)代碼進(jìn)行了概述, 就可以在注釋之間編寫代碼.7.2.5. 在要注釋的代碼前書寫注釋注釋一定出現(xiàn)在要注釋的程序段前,不要在某段程序后書寫對(duì)這段程序的注釋,先看到注釋對(duì)程序的理解會(huì)有一定幫助。如果有可能,請(qǐng)?jiān)谧⑨屝信c上面代碼間加一空行。7.2.6. 純色字符注釋行只用于主要注釋注釋中要分隔時(shí),請(qǐng)使用一行空注釋行來(lái)完成,不要使用純色字符,以保持版面的整潔、清晰。7.2.7. 避免形成注釋框用星號(hào)圍成的注釋框,右邊的星號(hào)看起來(lái)很好, 但它們給注釋增加了任何信

27、息嗎?實(shí)際上這會(huì)給編寫或編輯注釋的人增加許多工作。7.2.8. 增強(qiáng)注釋的可讀性注釋是供人閱讀的,而不是讓計(jì)算機(jī)閱讀的。1) 使用完整的語(yǔ)句。雖然不必將注釋分成段落(最好也不要分成段落),但你應(yīng)盡量將注釋寫成完整的句子。2) 避免使用縮寫。縮寫常使注釋更難閱讀,人們常用不同的方法對(duì)相同的單詞進(jìn)行縮寫,這會(huì)造成許多混亂,如果必須對(duì)詞匯縮寫,必須做到統(tǒng)一。3) 將整個(gè)單詞大寫,以突出它們的重要性。若要使人們注意注釋中的一個(gè)或多個(gè)單詞,請(qǐng)全部使用大寫字母。7.2.9. 對(duì)注釋進(jìn)行縮進(jìn),使之與后隨的語(yǔ)句對(duì)齊。注釋通常位于它們要說(shuō)明的代碼的前面。為了從視覺(jué)上突出注釋與它的代碼之間的關(guān)系,請(qǐng)將注釋縮進(jìn),使

28、之與代碼處于同一個(gè)層次上。7.2.10. 為每個(gè)方法和類賦予一個(gè)注釋標(biāo)頭每個(gè)方法都應(yīng)有一個(gè)注釋標(biāo)頭。方法的注釋標(biāo)頭可包含多個(gè)文字項(xiàng),比如輸入?yún)?shù)、返回值、原始作者、最后編輯該方法的程序員、上次修改日期、版權(quán)信息。7.2.11. 當(dāng)行尾注釋用在上面這種代碼段結(jié)構(gòu)中時(shí),它們會(huì)使代碼更難閱讀。使用多個(gè)行尾注釋時(shí)(比如用于方法頂部的多個(gè)變量說(shuō)明),應(yīng)使它們互相對(duì)齊。這可使它們稍容易閱讀一些。7.2.12. 何時(shí)書寫注釋1) 請(qǐng)?jiān)诿總€(gè)if 語(yǔ)句的前面加上注釋。2) 在每個(gè) switch 語(yǔ)句的前面加上注釋。與if 語(yǔ)句一樣,switch 語(yǔ)句用于評(píng)估對(duì)程序執(zhí)行產(chǎn)生影響的表達(dá)式。3) 在每個(gè)循環(huán)的前面加上

29、注釋。每個(gè)循環(huán)都有它的作用,許多情況下這個(gè)作用不清楚直觀。7.3. 注釋那些部分7.3.1. 類類的目的參數(shù):參數(shù)類型參數(shù)用來(lái)做什么任何約束或前提條件已知的問(wèn)題類的開發(fā)/ 維護(hù)歷史注釋出采用的不變量并行策略編譯單元每一個(gè)類/ 類內(nèi)定義的接口,含簡(jiǎn)單的說(shuō)明文件名和/ 或標(biāo)識(shí)信息版權(quán)信息7.3.2. 接口目的它應(yīng)如何被使用以及如何不被使用7.3.3. 類屬性用處目的不同值的含義7.3.4. 成員函數(shù)注釋成員函數(shù)做什么以及它為什么做這個(gè)哪些參數(shù)必須傳遞給一個(gè)成員函數(shù)成員函數(shù)返回什么已知的問(wèn)題任何由某個(gè)成員函數(shù)拋出的異常可見(jiàn)性決策成員函數(shù)是如何改變對(duì)象的包含任何修改代碼的歷史如何在適當(dāng)情況下調(diào)用成員函

30、數(shù)的例子適用的前提條件和后置條件7.3.5. 成員函數(shù)內(nèi)部注釋控制結(jié)構(gòu)代碼做了些什么以及為什么這樣做局部變量 難或復(fù)雜的代碼 處理順序?qū)?if-else 語(yǔ)句的各個(gè)條件,要說(shuō)明其含義。7.4. 示例7.4.1. 塊注釋:主要用來(lái)描述文件,類,方法,算法等。一般用在文檔和方法的前面,也可以放在文檔的任何地方。以/* 開頭, */ 結(jié)尾。例: /* 注釋*/7.4.2. 行注釋:主要用在方法內(nèi)部,對(duì)代碼,變量,流程等進(jìn)行說(shuō)明。與塊注釋格式相似,但是整個(gè)注釋占據(jù) 一行。例: /* 注釋 */7.4.3. 尾隨注釋:與行注釋功能相似,放在代碼的同行,但是要與代碼之間有足夠的空間,便于分清。例:int

31、m=4 ;/*注釋 */如果一個(gè)程序塊內(nèi)有多個(gè)尾隨注釋,每個(gè)注釋的縮進(jìn)應(yīng)該保持一致。7.4.4. 行尾注釋:與行注釋功能相似,放在每行的最后,或者占據(jù)一行。以/ 開頭。7.4.5. 文檔注釋:與塊注釋相似,但是可以被 javadoc處理,生成HTM戊件。以'/* '開頭,'*/ '結(jié)尾。文檔 注釋不能放在方法或程序塊內(nèi)。例:/*注釋*/. 表達(dá)式和語(yǔ)句1.1. 每行應(yīng)該只有一條語(yǔ)句。1.2. if-else,if-elseif 語(yǔ)句,任何情況下,都應(yīng)該有“”, “ ”,格式如下:if (num1>10 && isOK=true )state

32、ment;else if (condition)statements;else statements;1.3. for 語(yǔ)句格式如下:for (initialization; condition; update)statements;如果語(yǔ)句為空:for (initialization; condition; update) ;1.4. while 語(yǔ)句格式如下:while (condition) statements; 如果語(yǔ)句為空while (condition);1.5. do-while 語(yǔ)句格式如下:dostatements; while (condition);1.6. switc

33、h 語(yǔ)句,每個(gè)switch 里都應(yīng)包含default 子語(yǔ)句 ,格式如下:switch (condition) case ABC: statements;/* falls through */case DEF: statements; break;case XYZ: statements; break;default:statements;break;1.7. try-catch 語(yǔ)句格式如下:try statements;catch (ExceptionClass e)statements;finallystatements;9. 錯(cuò)誤處理和異常事件9.1. 法則通常的思想是只對(duì)錯(cuò)誤采用異常處理:邏輯和編程錯(cuò)誤,設(shè)置錯(cuò)誤,被破壞的數(shù)據(jù),資源耗盡,等等。通常的法則是系統(tǒng)在正常狀態(tài)下以及無(wú)重載和硬件失效狀態(tài)下,不應(yīng)產(chǎn)生任何異常。9.2. 方法異常處理采用日志機(jī)制來(lái)報(bào)告異常(調(diào)用系統(tǒng)LOG4J妾口統(tǒng)一管理),包括異常發(fā)生的時(shí)刻。不要使用異常實(shí)現(xiàn)來(lái)控制程序流程結(jié)構(gòu)。每一個(gè)類或文件都要處理異常或錯(cuò)誤。9.3. 異常封裝Dao層的類中統(tǒng)一封裝所有異常為DBExceptionService 層的類統(tǒng)一獲取底層的DBException 封裝為 Bu

溫馨提示

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