




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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ù)庫設(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í)現(xiàn)實(shí)際上并不影響程序的執(zhí)行。當(dāng)一個(gè)工程被編譯時(shí),如果所有方法都放在單個(gè)類
2、中或者放在幾十個(gè)類中,這沒有任何關(guān)系。雖然類的數(shù)量對代碼的執(zhí)行并無太大的影響,但是當(dāng)創(chuàng)建便于調(diào)試和維護(hù)的代碼時(shí),類的數(shù)量有時(shí)會(huì)帶來很大的影響。類應(yīng)該用來將相關(guān)的方法組織在一起。當(dāng)類包含一組緊密關(guān)聯(lián)的方法時(shí),該類可以說具有強(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ù)語的含義是什么。類的基本目的是創(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í),請考慮下列指導(dǎo)原則:1) 將復(fù)雜進(jìn)程放入專用方法。如果應(yīng)用程序使用復(fù)雜的數(shù)學(xué)公式,請考慮將每個(gè)公式放入它自己的方法中。這樣使用這些公式的其他方法就不包含用于該公式的實(shí)際代碼。這樣也可以更容易發(fā)現(xiàn)與公式相關(guān)的問題。2)將數(shù)據(jù)輸入/輸出(I/O)放入專用方法。3) 將專用方法中可能要修改的代碼隔離。如果你知道某個(gè)進(jìn)程經(jīng)常變更,請將這個(gè)多變的代碼放入專用方法,以便以后可以更容易的進(jìn)行修改,并減少無意中給其他進(jì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ù),沒有理由再這樣做了。給方法正確的命名,可使程序工程的調(diào)試和維護(hù)工作大大的
6、改觀。請認(rèn)真對待方法命名的工作,不要為了減少鍵入操作量而降低方法的可理解度。實(shí)際應(yīng)用舉例:1) 給方法命名時(shí)應(yīng)大小寫字母混合使用。如果句子全使用大寫字母,那么閱讀起來就非常困難,而大小寫字母混合使用的句子,閱讀起來就很容易。2) 定義方法名時(shí)不要使用縮寫。如果你認(rèn)為應(yīng)用程序中的某些工程應(yīng)使用縮寫,那么請將這些情況加上注釋,并確保每個(gè)人在所有時(shí)間內(nèi)都使用這些縮寫。決不要在某些方法中對某些單詞進(jìn)行縮寫,而在別的方法中卻不使用縮寫。3) 定義方法名要統(tǒng)一使用英文單詞或者計(jì)算機(jī)專業(yè)英語,要做到見名知意。1.4.2. 創(chuàng)建方法時(shí),始終都應(yīng)顯式地定義它的作用域。1) 如果你真的想創(chuàng)建一個(gè)公用方法,請向代碼
7、閱讀者說明這一點(diǎn)。2) 通過為每個(gè)方法賦予一個(gè)明確定義的作用域,可以減少代碼閱讀者需要投入的工作量。應(yīng)確保你為方法賦予最有意義的作用域。如果一個(gè)方法只被同一類中的另一個(gè)方法調(diào)用,那么請將它創(chuàng)建成私有方法。如果該方法是從多個(gè)類中的多個(gè)方法中調(diào)用,請將該說明為公用方法。1.4.3. 用參數(shù)在方法之間傳遞數(shù)據(jù)應(yīng)盡量避免使用類變量。一般來說,變量的作用域越小越好。為了減少類變量,方法之一是將數(shù)據(jù)作為參數(shù)在不同方法之間傳遞,而不是讓方法共享類變量。1) 為每個(gè)參數(shù)指定數(shù)據(jù)類型。2) 始終要對數(shù)進(jìn)行檢驗(yàn),決不要假設(shè)你得數(shù)據(jù)沒有問題。程序員常犯的一個(gè)錯(cuò)誤是在編寫方法時(shí)假設(shè)數(shù)據(jù)沒有問題。在初始編程階段,當(dāng)編寫
8、調(diào)用方法時(shí),這樣的假設(shè)并無大礙。這時(shí)你完全能夠知道什么是參數(shù)的許可值,并按要求提供這些值。但如果你不對參數(shù)的數(shù)據(jù)進(jìn)行檢驗(yàn),那么下列情況就會(huì)給你帶來很大麻煩:另外某個(gè)人創(chuàng)建了一個(gè)調(diào)用方法,但此人不知道允許的值;你在晚些時(shí)候添加了新的調(diào)用方法,并錯(cuò)誤的傳遞了壞數(shù)據(jù)。1.4.4. 其他編程建議1. 注意釋放資源,如文件關(guān)閉,數(shù)據(jù)庫操作后關(guān)閉ResultSet, Statement, Connection 等, 其他涉及 IO 操作的如:各種Reader, Writer, InputStream , OutputStream 等等。2. 使用 StringBuffer 對象在處理 String 的時(shí)候
9、要盡量使用StringBuffer 類, StringBuffer 類是構(gòu)成String 類的基礎(chǔ)。 String 類將 StringBuffer 類封裝了起來,(以花費(fèi)更多時(shí)間為代價(jià))為開發(fā)人員提供了一個(gè)安全的接口。當(dāng)我們在構(gòu)造字符串的時(shí)候,我們應(yīng)該用StringBuffer 來實(shí)現(xiàn)大部分的工作,當(dāng)工作完成后將StringBuffer 對象再轉(zhuǎn)換為需要的String 對象。 比如: 如果有一 個(gè)字符串必須不斷地在其后添加許多字符來完成構(gòu)造,那么我們應(yīng)該使用StringBuffer 對象和它的append() 方法。 如果我們用String 對象代替StringBuffer 對象的話,會(huì)花費(fèi)許
10、多不必要的創(chuàng)建和釋放對象的CPU 時(shí)間。3. 避免太多的使用synchronized 關(guān)鍵字避免不必要的使用關(guān)鍵字synchronized,應(yīng)該在必要的時(shí)候再使用它,這是一個(gè)避免死鎖的好方法。必須使用時(shí),也盡量控制范圍,最好在塊級控制。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 語句,返回一個(gè)對象的列表,實(shí)現(xiàn)中用java.util.ArrayList實(shí)現(xiàn),于是定義方法為:public java.util.ArrayList getObjectItems(String sql)上面的方法存在一個(gè)問題,當(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、用索引來調(diào)用數(shù)據(jù)庫中間層組件返回的結(jié)果集 如:for(int i=1; i<=dt.getRowCount(); i+) String fieldl = dt.getField(i, 0).toString(); 而應(yīng)用字段名來存取結(jié)果集:for(int i=1; i<=dt.getRowCount(); i+) String fieldl = dt.getField(i, "field1").toString(); 這樣在數(shù)據(jù)庫設(shè)計(jì)更改或查詢的SQL 語句發(fā)生變化時(shí),不會(huì)影響到程序的執(zhí)行。3. 命名約定所有變量的定義應(yīng)該遵循匈牙利命名法,由表意性強(qiáng)的一個(gè)單詞或
13、多個(gè)單詞組成的名字,而且每個(gè)單詞的首寫字母大寫,其它字母小寫,這樣保證了對變量名能夠進(jìn)行正確的斷句。3.1. 工程的命名3.1.1. 工程的命名直接使用projectname.3.1.2. 工程目錄的分配(參照各類開發(fā)工具的設(shè)置)1. 設(shè)計(jì)文檔(design): design2. 源代碼(source): src.3. 引用的庫文件(library) : lib4. 生成的代碼(class): classes5. 生成的文檔(document) : docs3.2. 包3.2.1. 約定根級目錄以com.* 開頭!(即:實(shí)現(xiàn)主要流程的類和涉及項(xiàng)目系統(tǒng)各項(xiàng)目名稱為下一級包!本級目錄為項(xiàng)目的控制類
14、所在管理的類)。再下級的主要并列目錄名:1) Cloudframework 云存儲(chǔ)開發(fā)框架包2) Cngi 具體的應(yīng)用系統(tǒng)名全部小寫使用英語單詞,不要使用漢語拼音標(biāo)識符用點(diǎn)號分隔開來3.2.2. 舉例3.3. 類,接口3.3.1. 約定類的名字應(yīng)該使用名詞使用英語單詞,不要使用漢語拼音每個(gè)單詞首字母 應(yīng)該大寫避免使用單詞的縮寫,除非它的縮寫已經(jīng)廣為人知,如HTTP實(shí)現(xiàn)類一般采用接口類名+Impl 來展現(xiàn)3.3.2. 舉例Class Hello;Class HelloWorld ;Interface Apple;Class AppleImpl implements Apple;3.4. 方法3.
15、4.1. 約定第一個(gè)單詞一般是動(dòng)詞。使用英語單詞,不要使用漢語拼音第一個(gè)單詞是小寫,但是中間單詞的首字母是大寫。bool如果方法返回一個(gè)成員變量的值,方法名一般為get+ 成員變量名,如若返回的值是變量,一般以is 作為前綴。如果方法修改一個(gè)成員變量的值,方法名一般為:set+ 成員變量名。3.4.2. 舉例getName();setName();isFirst();3.5. 變量3.5.1. 約定單詞的首字母大寫;但是首個(gè)單詞字母都必須小寫使用英語單詞,不要使用漢語拼音不要用_或 &作為第一個(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. 約定所有常量名均全部大寫,單詞間以_隔開。使用英語單詞,不要使用漢語拼音特殊情況下可以使用全拼,但是請注釋說明3.6.2. 舉例int I_MAX_NUM;3.7. jsp,html,xml 等文件3.7.1. 約定使用英語單詞,不要使用
17、漢語拼音首單詞小寫,其它單詞首字母 應(yīng)該大寫避免使用單詞的縮寫,除非它的縮寫已經(jīng)廣為人知,如HTTP3.7.2. 舉例注冊,新增查詢頁面視圖維護(hù)頁面視圖按日期查詢頁面視圖register.jsp view.jsp infoMaintain.jsp dateView.jsp3.8. 數(shù)據(jù)庫表、視圖3.8.1. 約定全部小寫以“_”分隔單詞盡量表義使用英語單詞,不要使用漢語拼音主表用“ info ”表示,每個(gè)表名都加“t_ ”用來識別為表對象3.8.2. 舉例t_user_info縮寫ui 用戶主表t_user_type用戶類型字典表3.9. 數(shù)據(jù)庫字段3.9.1. 約定首單詞小寫,其他單詞首字母
18、大寫使用英語單詞,不要使用漢語拼音3.9.2. 舉例id name userType userId4. 使用常量4.1. 常數(shù)很容易在數(shù)據(jù)輸入時(shí)出錯(cuò)常數(shù)存在的主要問題之一是你很容易在鍵入數(shù)字時(shí)出錯(cuò),從而顛倒了數(shù)字的位置。例如,當(dāng)你鍵入數(shù)字10876 時(shí),很容易的鍵入10867 或18076。與處理變量和保留字的方法不同,編譯器并不在乎顛倒了位置和不正確的數(shù)字,有時(shí)簡單的錯(cuò)誤造成的問題不會(huì)立即表現(xiàn)出來,而當(dāng)問題表現(xiàn)出來時(shí),它們會(huì)以隨機(jī)的計(jì)算錯(cuò)誤的形式出現(xiàn),這些錯(cuò)誤很難準(zhǔn)確定位。用常量來取代常數(shù)時(shí),編譯器將在編譯時(shí)檢查常量的有效性。如果常量不存在,編譯器便將這一情況通知你,并拒絕進(jìn)行編譯,這可以消
19、除錯(cuò)誤鍵入的數(shù)字帶來的問題,只要常量擁有正確的值,使用該常量的所有代碼也有使用該正確值。4.2. 常數(shù)很難不斷更新4.3. 常量使代碼更容易閱讀使用常量后,得到的一個(gè)額外好處是可使創(chuàng)建的代碼更容易閱讀。常數(shù)很不直觀。也許你對常 數(shù)非常了解,但其他人則根本看不明白。通過合理的給常量命名,使用這些常量的代碼就變得 比較直觀了,更容易閱讀。為常量賦予較寬的作用域,這與使用變量時(shí)的情況不同。在一個(gè)應(yīng)用程序中你決不應(yīng)該兩次創(chuàng) 建相同的常量。如果你發(fā)現(xiàn)自己復(fù)制了一個(gè)常量,請將原始的常量說明轉(zhuǎn)至較寬的作用域,直 到該常量可供引用它的所有方法為止。5. 變量5.1. 定義有焦點(diǎn)的變量用于多個(gè)目的的變量稱為無焦
20、點(diǎn)(多焦點(diǎn))的變量。無焦點(diǎn)變量所代表的意義與程序的執(zhí)行流程有關(guān),當(dāng)程序處于不同位置時(shí),它所表示的意義是不固定的,這樣就給程序的可讀性和可維護(hù)性帶來了麻煩。5.2. 只對常用變量名和長變量名進(jìn)行縮寫如果需要對變量名進(jìn)行縮寫時(shí),一定要注意整個(gè)代碼中縮寫規(guī)則的一致性。例如,如果在代碼的某些區(qū)域中使用 Cnt,而在另一些區(qū)域中又使用Count,就會(huì)給代碼增加不必要的復(fù)雜性變量名中盡量不要出現(xiàn)縮寫。5.3. 使用統(tǒng)一的量詞通過在結(jié)尾處放置一個(gè)量詞,就可創(chuàng)建更加統(tǒng)一的變量,它們更容易理解,也更容易搜索。例如 , 請 使 用 strCustomerFirst 和 strCustomerLast , 而 不
21、要 使 用 strFirstCustomer 和 strLastCustomer 。量詞列表:First 、 Last 、 Next、 Prev、 Cur量詞后綴說明First 一組變量中的第一個(gè)Last 一組變量中的最后一個(gè)Next 一組變量中的下一個(gè)變量Prev 一組變量中的上一個(gè)Cur 一組變量中的當(dāng)前變量5.4. 使用肯定形式的布爾變量給布爾變量命名時(shí),始終都要使用變量的肯定形式,以減少其它開發(fā)人員在理解布爾變量所代表的意義時(shí)的難度。5.5. 為每個(gè)變量選擇最佳的數(shù)據(jù)類型這樣即能減少對內(nèi)存的需求量,加快代碼的執(zhí)行速度,又會(huì)降低出錯(cuò)的可能性。用于變量的數(shù)據(jù)類型可能會(huì)影響該變量進(jìn)行計(jì)算所產(chǎn)
22、生的結(jié)果。在這種情況下,編譯器不會(huì)產(chǎn)生運(yùn)行期錯(cuò)誤,它只是迫使該值符合數(shù)據(jù)類型的要求。這類問題極難查找。5.6. 盡量縮小變量的作用域如果變量的作用域大于它應(yīng)有的范圍,變量可繼續(xù)存在,并且在不再需要該變量后的很長 時(shí)間內(nèi)仍然占用資源。它們的主要問題是,任何類中的任何方法都能對它們進(jìn)行修改,并且很難跟蹤究竟是何處 進(jìn)行修改的。占用資源是作用域涉及的一個(gè)重要問題。對變量來說,盡量縮小作用域?qū)?huì)對應(yīng)用程序的 可靠性產(chǎn)生巨大的影響。6. 代碼的格式化6.1. 對代碼進(jìn)行格式化時(shí),要達(dá)到的目的1. 通過代碼分割成功能塊和便于理解的代碼段,使代碼更容易閱讀和理解;2. 使用空行和注釋行,將程序中邏輯上不相關(guān)
23、的代碼塊分開。比如:變量聲明部分和代碼語句間的分隔;較長的方法中,完成不同功能的代碼塊間的分隔。要避免出現(xiàn)邏輯上混亂的分隔,如:某一邏輯功能代碼塊中間用空行進(jìn)行了分隔,但是在相鄰功能代碼塊之間卻沒有分隔,這樣會(huì)給程序閱讀者造成錯(cuò)覺。3. 減少為理解代碼結(jié)構(gòu)而需要做的工作;4. 使代碼的閱讀者不必進(jìn)行假設(shè);5. 使代碼結(jié)構(gòu)盡可能做到格式清楚明了。6.2. 編程原則1. 不要將多個(gè)語句放在同一行上。不論是變量聲明,還是語句都不要在一行上書寫多個(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í),請從后面分割該語句,以確保該表達(dá)式盡可能放在同一行上。3. 在 if 語句后縮進(jìn);在 else 語句后縮進(jìn)在 switch 語句后縮進(jìn)在 case 語句后縮進(jìn)在do句后縮進(jìn)已經(jīng)用行接續(xù)符分割的語句的各個(gè)行要縮進(jìn)對從屬于行標(biāo)注的代碼進(jìn)行縮進(jìn)。4. 在執(zhí)行統(tǒng)一任務(wù)的各個(gè)語句組之間插入一個(gè)空行。好的代碼應(yīng)由按邏輯順序排列的進(jìn)程或相關(guān)語句組構(gòu)成。7. 代碼的注釋7.1. 使用代碼注釋的目的1. 文字說明代碼的作用(即為什么要用編寫該代碼, 而不是如何編寫);2. 確指出該代碼的編寫思路和邏輯方法;3. 方便人們注意到代碼中的重要轉(zhuǎn)折點(diǎn);4. 使代碼的閱讀者不必在他們的頭腦
25、中仿真運(yùn)行代碼的執(zhí)行方法.5. 說明代碼的使用條件。7.2. 編程原則7.2.1. 用文字說明代碼的作用:簡單的重復(fù)代碼做寫什么, 這樣的注釋幾乎不能給注釋增加什么信息. 如果你使用好的命名方法來創(chuàng)建直觀明了的代碼那么這些類型的注釋絕對增加不了什么信息.7.2.2. 如果你想違背好的編程原則,請說明為什么有的時(shí)候你可能需要違背好的編程原則,或者使用了某些不正規(guī)的方法,. 遇到這種情況時(shí), 請用內(nèi)部注釋來說明你在做什么和為什么要這樣做。技巧性特別高的代碼段,一定要加詳細(xì)的注釋,不要讓其他開發(fā)人員花很長時(shí)間來研究一個(gè)高技巧但不易理解的程序段。7.2.3. 用注釋來說明何時(shí)可能出錯(cuò)和為什么出錯(cuò)7.2
26、.4. 在編寫代碼前進(jìn)行注釋給代碼加注釋的方法之一是在編寫一個(gè)方法前首先寫上注釋. 如果你愿意, 可以編寫完整句子的注釋或偽代碼. 一旦你用注釋對代碼進(jìn)行了概述, 就可以在注釋之間編寫代碼.7.2.5. 在要注釋的代碼前書寫注釋注釋一定出現(xiàn)在要注釋的程序段前,不要在某段程序后書寫對這段程序的注釋,先看到注釋對程序的理解會(huì)有一定幫助。如果有可能,請?jiān)谧⑨屝信c上面代碼間加一空行。7.2.6. 純色字符注釋行只用于主要注釋注釋中要分隔時(shí),請使用一行空注釋行來完成,不要使用純色字符,以保持版面的整潔、清晰。7.2.7. 避免形成注釋框用星號圍成的注釋框,右邊的星號看起來很好, 但它們給注釋增加了任何信
27、息嗎?實(shí)際上這會(huì)給編寫或編輯注釋的人增加許多工作。7.2.8. 增強(qiáng)注釋的可讀性注釋是供人閱讀的,而不是讓計(jì)算機(jī)閱讀的。1) 使用完整的語句。雖然不必將注釋分成段落(最好也不要分成段落),但你應(yīng)盡量將注釋寫成完整的句子。2) 避免使用縮寫??s寫常使注釋更難閱讀,人們常用不同的方法對相同的單詞進(jìn)行縮寫,這會(huì)造成許多混亂,如果必須對詞匯縮寫,必須做到統(tǒng)一。3) 將整個(gè)單詞大寫,以突出它們的重要性。若要使人們注意注釋中的一個(gè)或多個(gè)單詞,請全部使用大寫字母。7.2.9. 對注釋進(jìn)行縮進(jìn),使之與后隨的語句對齊。注釋通常位于它們要說明的代碼的前面。為了從視覺上突出注釋與它的代碼之間的關(guān)系,請將注釋縮進(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è)變量說明),應(yīng)使它們互相對齊。這可使它們稍容易閱讀一些。7.2.12. 何時(shí)書寫注釋1) 請?jiān)诿總€(gè)if 語句的前面加上注釋。2) 在每個(gè) switch 語句的前面加上注釋。與if 語句一樣,switch 語句用于評估對程序執(zhí)行產(chǎn)生影響的表達(dá)式。3) 在每個(gè)循環(huán)的前面加上
29、注釋。每個(gè)循環(huán)都有它的作用,許多情況下這個(gè)作用不清楚直觀。7.3. 注釋那些部分7.3.1. 類類的目的參數(shù):參數(shù)類型參數(shù)用來做什么任何約束或前提條件已知的問題類的開發(fā)/ 維護(hù)歷史注釋出采用的不變量并行策略編譯單元每一個(gè)類/ 類內(nèi)定義的接口,含簡單的說明文件名和/ 或標(biāo)識信息版權(quán)信息7.3.2. 接口目的它應(yīng)如何被使用以及如何不被使用7.3.3. 類屬性用處目的不同值的含義7.3.4. 成員函數(shù)注釋成員函數(shù)做什么以及它為什么做這個(gè)哪些參數(shù)必須傳遞給一個(gè)成員函數(shù)成員函數(shù)返回什么已知的問題任何由某個(gè)成員函數(shù)拋出的異常可見性決策成員函數(shù)是如何改變對象的包含任何修改代碼的歷史如何在適當(dāng)情況下調(diào)用成員函
30、數(shù)的例子適用的前提條件和后置條件7.3.5. 成員函數(shù)內(nèi)部注釋控制結(jié)構(gòu)代碼做了些什么以及為什么這樣做局部變量 難或復(fù)雜的代碼 處理順序?qū)?if-else 語句的各個(gè)條件,要說明其含義。7.4. 示例7.4.1. 塊注釋:主要用來描述文件,類,方法,算法等。一般用在文檔和方法的前面,也可以放在文檔的任何地方。以/* 開頭, */ 結(jié)尾。例: /* 注釋*/7.4.2. 行注釋:主要用在方法內(nèi)部,對代碼,變量,流程等進(jìn)行說明。與塊注釋格式相似,但是整個(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á)式和語句1.1. 每行應(yīng)該只有一條語句。1.2. if-else,if-elseif 語句,任何情況下,都應(yīng)該有“”, “ ”,格式如下:if (num1>10 && isOK=true )state
32、ment;else if (condition)statements;else statements;1.3. for 語句格式如下:for (initialization; condition; update)statements;如果語句為空:for (initialization; condition; update) ;1.4. while 語句格式如下:while (condition) statements; 如果語句為空while (condition);1.5. do-while 語句格式如下:dostatements; while (condition);1.6. switc
33、h 語句,每個(gè)switch 里都應(yīng)包含default 子語句 ,格式如下:switch (condition) case ABC: statements;/* falls through */case DEF: statements; break;case XYZ: statements; break;default:statements;break;1.7. try-catch 語句格式如下:try statements;catch (ExceptionClass e)statements;finallystatements;9. 錯(cuò)誤處理和異常事件9.1. 法則通常的思想是只對錯(cuò)誤采用異常處理:邏輯和編程錯(cuò)誤,設(shè)置錯(cuò)誤,被破壞的數(shù)據(jù),資源耗盡,等等。通常的法則是系統(tǒng)在正常狀態(tài)下以及無重載和硬件失效狀態(tài)下,不應(yīng)產(chǎn)生任何異常。9.2. 方法異常處理采用日志機(jī)制來報(bào)告異常(調(diào)用系統(tǒng)LOG4J妾口統(tǒng)一管理),包括異常發(fā)生的時(shí)刻。不要使用異常實(shí)現(xiàn)來控制程序流程結(jié)構(gòu)。每一個(gè)類或文件都要處理異常或錯(cuò)誤。9.3. 異常封裝Dao層的類中統(tǒng)一封裝所有異常為DBExceptionService 層的類統(tǒng)一獲取底層的DBException 封裝為 Bu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 纖維生產(chǎn)項(xiàng)目管理與成本控制考核試卷
- 派遣工績效考核考核試卷
- 毛皮制品加工安全生產(chǎn)培訓(xùn)考核試卷
- 內(nèi)蒙古包頭市第二中學(xué)2025年初三下學(xué)期2月份月考生物試題含解析
- 網(wǎng)絡(luò)安全技術(shù)實(shí)踐教程(微課版)-教案 Linux操作系統(tǒng)安全加固
- 山東體育學(xué)院《學(xué)前教育研究方法與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 十堰市鄖縣2025屆五年級數(shù)學(xué)第二學(xué)期期末聯(lián)考模擬試題含答案
- 山西工商學(xué)院《中國文化英語教程》2023-2024學(xué)年第一學(xué)期期末試卷
- 寧夏石嘴山市名校2025屆初三第一次模擬(期末)考試生物試題試卷含解析
- 江西省鷹潭市貴溪市2024-2025學(xué)年初三下學(xué)期回頭考試數(shù)學(xué)試題含解析
- 投資學(xué)-第一講-教學(xué)內(nèi)容(教案)
- 2024年全國高考數(shù)學(xué)試題及解析答案(新課標(biāo)Ⅱ卷)
- Unit 5 Humans and nature Lesson 3 Race to the Pole 教學(xué)設(shè)計(jì)-2023-2024學(xué)年高中英語北師大版(2019)必修第二冊
- 2024年風(fēng)力發(fā)電運(yùn)維值班員(技師)技能鑒定考試題庫-上(選擇題)
- 《大學(xué)英語四級強(qiáng)化教程》全套教學(xué)課件
- 重點(diǎn)鎮(zhèn)評價(jià)標(biāo)準(zhǔn)
- DZ∕T 0097-2021 工程地質(zhì)調(diào)查規(guī)范(1:50 000)(正式版)
- 核輻射加工技術(shù)在食品安全監(jiān)管中的應(yīng)用
- 教育培訓(xùn)合同糾紛起訴狀模板
- 聲吶技術(shù)介紹
- 2023廣州美術(shù)學(xué)院附屬中等美術(shù)學(xué)校(廣美附中)入學(xué)招生測試卷數(shù)學(xué)模擬卷
評論
0/150
提交評論