JAVA 編程規范
1. 應用范圍
本規范應用于采用J2EE規范的項目中,所有項目中的JAVA代碼(含JSP,SERVLET,JAVABEAN,EJB)均應遵守這個(gè)規范。同時(shí),也可作為其它項目的參考。
2. 設計類(lèi)和方法
2.1 創(chuàng )建具有很強內聚力的類(lèi)
方法的重要性往往比類(lèi)的重要性更容易理解,方法是指執行一個(gè)統一函數的一段代碼。類(lèi)常被錯誤的視為是一個(gè)僅僅用于存放方法的容器。有些開(kāi)發(fā)人員甚至把這種思路作了進(jìn)一步的發(fā)揮,將他們的所有方法放入單個(gè)類(lèi)之中。
之所以不能正確的認識類(lèi)的功能,原因之一是類(lèi)的實(shí)現實(shí)際上并不影響程序的執行。當一個(gè)工程被編譯時(shí),如果所有方法都放在單個(gè)類(lèi)中或者放在幾十個(gè)類(lèi)中,這沒(méi)有任何關(guān)系。雖然類(lèi)的數量對代碼的執行并無(wú)太大的影響,但是當創(chuàng )建便于調試和維護的代碼時(shí),類(lèi)的數量有時(shí)會(huì )帶來(lái)很大的影響。
類(lèi)應該用來(lái)將相關(guān)的方法組織在一起。
當類(lèi)包含一組緊密關(guān)聯(lián)的方法時(shí),該類(lèi)可以說(shuō)具有強大的內聚力。當類(lèi)包含許多互不相關(guān)的方法時(shí),該類(lèi)便具有較弱的內聚力。應該努力創(chuàng )建內聚力比較強的類(lèi)。
大多數工程都包含許多并不十分適合與其他方法組合在一起的方法。在這種情況下,可以為這些不合群的方法創(chuàng )建一個(gè)綜合性收容類(lèi)。
創(chuàng )建類(lèi)時(shí),應知道“模塊化”這個(gè)術(shù)語(yǔ)的含義是什么。類(lèi)的基本目的是創(chuàng )建相當獨立的程序單元。
2.2 創(chuàng )建松散連接和高度專(zhuān)用的方法
1. 使所有方法都執行專(zhuān)門(mén)的任務(wù)
每個(gè)方法都應執行一項特定的任務(wù),它應出色的完成這項任務(wù)。應避免創(chuàng )建執行許多不同任務(wù)的方法。
創(chuàng )建專(zhuān)用方法有許多好處。首先調試將變得更加容易。
2. 盡量使方法成為自成一體的獨立方法
當一個(gè)方法依賴(lài)于其他方法的調用時(shí),稱(chēng)為與其他方法緊密連接的方法。緊密連接的方法會(huì )使調試和修改變得比較困難,因為它牽涉到更多的因素。松散連接的方法優(yōu)于緊密連接的方法,但你不可能使每個(gè)方法都成為獨立的方法。
若要使方法具備較強的獨立性,方法之一是盡量減少類(lèi)變量。
創(chuàng )建方法時(shí),設法將每個(gè)方法視為一個(gè)黑箱,其他例程不應要求了解該方法的內部工作情況,該方法也不應要求了解它外面的工程情況。這就是為什么你的方法應依靠參數而不應依靠全局變量的原因。
創(chuàng )建專(zhuān)用方法時(shí),請考慮下列指導原則:
1) 將復雜進(jìn)程放入專(zhuān)用方法。如果應用程序使用復雜的數學(xué)公式,請考慮將每個(gè)公式放入它自己的方法中。這樣使用這些公式的其他方法就不包含用于該公式的實(shí)際代碼。這樣也可以更容易發(fā)現與公式相關(guān)的問(wèn)題。
2) 將數據輸入/輸出(I/O)放入專(zhuān)用方法。
3) 將專(zhuān)用方法中可能要修改的代碼隔離。如果你知道某個(gè)進(jìn)程經(jīng)常變更,請將這個(gè)多變的代碼放入專(zhuān)用方法,以便以后可以更容易的進(jìn)行修改,并減少無(wú)意中給其他進(jìn)程帶來(lái)問(wèn)題的可能性。
4) 將業(yè)務(wù)規則封裝在專(zhuān)用方法中。業(yè)務(wù)規則常屬于要修改的代碼類(lèi)別,應與應用程序的其余部分隔開(kāi)。其他方法不應知道業(yè)務(wù)規則,只有要調用的方法才使用這些規則。
3. 設計類(lèi)和方法時(shí),要達到下列目的:
1) 創(chuàng )建更加容易調試和維護的方法
2) 創(chuàng )建具有強大內聚力的類(lèi)
3) 創(chuàng )建高度專(zhuān)用的方法
4) 創(chuàng )建松散連接的方法
5) 盡量使方法具有獨立性
6) 提高方法的扇入性
7) 降低方法的扇出性
2.3 編程原則
1. 為方法和類(lèi)賦予表義性強的名字
為了使代碼更加容易理解,最容易的方法之一是為你的方法賦予表義性強的名字。函數名DoIt、GetIt的可讀性很難與CalculateSalesTax、 RetrieveUserID相比。
由縮寫(xiě)方法名組成的代碼很難理解和維護,沒(méi)有理由再這樣做了。
給方法正確的命名,可使程序工程的調試和維護工作大大的改觀(guān)。請認真對待方法命名的工作,不要為了減少鍵入操作量而降低方法的可理解度。
實(shí)際應用舉例:
1) 給方法命名時(shí)應大小寫(xiě)字母混合使用。如果句子全使用大寫(xiě)字母,那么閱讀起來(lái)就非常困難,而大小寫(xiě)字母混合使用的句子,閱讀起來(lái)就很容易。
2) 定義方法名時(shí)不要使用縮寫(xiě)。如果你認為應用程序中的某些工程應使用縮寫(xiě),那么請將這些情況加上注釋?zhuān)⒋_保每個(gè)人在所有時(shí)間內都使用這些縮寫(xiě)。決不要在某些方法中對某些單詞進(jìn)行縮寫(xiě),而在別的方法中卻不使用縮寫(xiě)。
2. 為每個(gè)方法賦予單個(gè)退出點(diǎn)
3. 創(chuàng )建方法時(shí),始終都應顯式地定義它的作用域。
1) 如果你真的想創(chuàng )建一個(gè)公用方法,請向代碼閱讀者說(shuō)明這一點(diǎn)。
2) 通過(guò)為每個(gè)方法賦予一個(gè)明確定義的作用域,可以減少代碼閱讀者需要投入的工作量。應確保你為方法賦予最有意義的作用域。如果一個(gè)方法只被同一類(lèi)中的另一個(gè)方法調用,那么請將它創(chuàng )建成私有方法。如果該方法是從多個(gè)類(lèi)中的多個(gè)方法中調用,請將該說(shuō)明為公用方法。
4. 用參數在方法之間傳遞數據
應盡量避免使用類(lèi)變量。一般來(lái)說(shuō),變量的作用域越小越好。為了減少類(lèi)變量,方法之一是將數據作為參數在不同方法之間傳遞,而不是讓方法共享類(lèi)變量。
1) 為每個(gè)參數指定數據類(lèi)型。
2) 始終要對數進(jìn)行檢驗,決不要假設你得數據沒(méi)有問(wèn)題。程序員常犯的一個(gè)錯誤是在編寫(xiě)方法時(shí)假設數據沒(méi)有問(wèn)題。在初始編程階段,當編寫(xiě)調用方法時(shí),這樣的假設并無(wú)大礙。這時(shí)你完全能夠知道什么是參數的許可值,并按要求提供這些值。但如果你不對參數的數據進(jìn)行檢驗,那么下列情況就會(huì )給你帶來(lái)很大麻煩:另外某個(gè)人創(chuàng )建了一個(gè)調用方法,但此人不知道允許的值;你在晚些時(shí)候添加了新的調用方法,并錯誤的傳遞了壞數據。
3. 命名約定
所有變量的定義應該遵循匈牙利命名法,它使用3字符前綴來(lái)表示數據類(lèi)型,3個(gè)字符的前綴必須小寫(xiě),前綴后面是由表意性強的一個(gè)單詞或多個(gè)單詞組成的名字,而且每個(gè)單詞的首寫(xiě)字母大寫(xiě),其它字母小寫(xiě),這樣保證了對變量名能夠進(jìn)行正確的斷句。
這樣,在一個(gè)變量名就可以反映出變量類(lèi)型和變量所存儲的值的意義兩方面內容,這使得代碼語(yǔ)句可讀性強、更加容易理解。
3.1 包、類(lèi)及方法命名
| 標示符類(lèi)型 | 命名約定 | 例子 |
| 包 | l 全部小寫(xiě)。 l 標識符用點(diǎn)號分隔開(kāi)來(lái)。為了使包的名字更易讀,Sun 公司建議包名中的標識符用點(diǎn)號來(lái)分隔。 l Sun 公司的標準 java 分配包用標識符 .java 開(kāi)頭。 l 全局包的名字用你的機構的 Internet 保留域名開(kāi)頭 。 | 局部包: interface.screens 全局包: com.rational.www. interface.screens |
| 類(lèi),接口 | l 類(lèi)的名字應該使用名詞。 l 每個(gè)單詞第一個(gè)字母應該大寫(xiě)。 l 避免使用單詞的縮寫(xiě),除非它的縮寫(xiě)已經(jīng)廣為人知,如HTTP。 | Class Hello ; Class HelloWorld ; Interface Apple ; |
| 方法 | l 第一個(gè)單詞一般是動(dòng)詞。 l 第一個(gè)字母是小些,但是中間單詞的第一個(gè)字母是大寫(xiě)。 l 如果方法返回一個(gè)成員變量的值,方法名一般為get+成員變量名,如若返回的值是bool變量,一般以is作為前綴。 l 如果方法修改一個(gè)成員變量的值,方法名一般為:set + 成員變量名。 | getName(); setName(); isFirst(); |
| 變量 | l 第一個(gè)字母小寫(xiě),中間單詞的第一個(gè)字母大寫(xiě)。 l 不要用_或&作為第一個(gè)字母。 l 盡量使用短而且具有意義的單詞。 l 單字符的變量名一般只用于生命期非常短暫的變量。i,j,k,m,n一般用于integers;c,d,e一般用于characters。 l 如果變量是集合,則變量名應用復數。 l 命名組件采用匈牙利命名法,所有前綴均應遵循同一個(gè)組件名稱(chēng)縮寫(xiě)列表。 | String myName; int[] students; int i; int n; char c; btNew; (bt是Button的縮寫(xiě)) |
| 常量 | l 所有常量名均全部大寫(xiě),單詞間以‘_’隔開(kāi)。 | int MAX_NUM; |
3.2 其它
開(kāi)發(fā)人員如果遇到上述表格中未列舉的類(lèi)型,請書(shū)面通知相關(guān)管理人員,由管理人員集中更新列表內容,不得擅自啟用未經(jīng)確定的新變量前綴。
4. 使用常量
4.1 使用常量
1. 常數很容易在數據輸入時(shí)出錯
常數存在的主要問(wèn)題之一是你很容易在鍵入數字時(shí)出錯,從而顛倒了數字的位置。例如,當你鍵入數字10876時(shí),很容易的鍵入10867或18076。與處理變量和保留字的方法不同,編譯器并不在乎顛倒了位置和不正確的數字,有時(shí)簡(jiǎn)單的錯誤造成的問(wèn)題不會(huì )立即表現出來(lái),而當問(wèn)題表現出來(lái)時(shí),它們會(huì )以隨機的計算錯誤的形式出現,這些錯誤很難準確定位。用常量來(lái)取代常數時(shí),編譯器將在編譯時(shí)檢查常量的有效性。如果常量不存在,編譯器便將這一情況通知你,并拒絕進(jìn)行編譯,這可以消除錯誤鍵入的數字帶來(lái)的問(wèn)題,只要常量擁有正確的值,使用該常量的所有代碼也有使用該正確值。
2. 常數很難不斷更新
3. 常量使代碼更容易閱讀
使用常量后,得到的一個(gè)額外好處是可使創(chuàng )建的代碼更容易閱讀。常數很不直觀(guān)。也許你對常數非常了解,但其他人則根本看不明白。通過(guò)合理的給常量命名,使用這些常量的代碼就變得比較直觀(guān)了,更容易閱讀。
為常量賦予較寬的作用域,這與使用變量時(shí)的情況不同。在一個(gè)應用程序中你決不應該兩次創(chuàng )建相同的常量。如果你發(fā)現自己復制了一個(gè)常量,請將原始的常量說(shuō)明轉至較寬的作用域,直到該常量可供引用它的所有方法為止。
5. 變量
5.1 定義有焦點(diǎn)的變量
用于多個(gè)目的的變量稱(chēng)為無(wú)焦點(diǎn)(多焦點(diǎn))的變量。無(wú)焦點(diǎn)變量所代表的意義與程序的執行流程有關(guān),當程序處于不同位置時(shí),它所表示的意義是不固定的,這樣就給程序的可讀性和可維護性帶來(lái)了麻煩。
5.2 只對常用變量名和長(cháng)變量名進(jìn)行縮寫(xiě)
如果需要對變量名進(jìn)行縮寫(xiě)時(shí),一定要注意整個(gè)代碼中縮寫(xiě)規則的一致性。例如,如果在代碼的某些區域中使用Cnt,而在另一些區域中又使用Count,就會(huì )給代碼增加不必要的復雜性。
變量名中盡量不要出現縮寫(xiě)。
5.3 使用統一的量詞
通過(guò)在結尾處放置一個(gè)量詞,就可創(chuàng )建更加統一的變量,它們更容易理解,也更容易搜索。例如,請使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。
量詞列表:
| 量詞后綴 | 說(shuō)明 |
| First | 一組變量中的第一個(gè) |
| Last | 一組變量中的最后一個(gè) |
| Next | 一組變量中的下一個(gè)變量 |
| Prev | 一組變量中的上一個(gè) |
| Cur | 一組變量中的當前變量 |
5.4 使用肯定形式的布爾變量
給布爾變量命名時(shí),始終都要使用變量的肯定形式,以減少其它開(kāi)發(fā)人員在理解布爾變量所代表的意義時(shí)的難度。
5.5 為每個(gè)變量選擇最佳的數據類(lèi)型
這樣即能減少對內存的需求量,加快代碼的執行速度,又會(huì )降低出錯的可能性。用于變量的數據類(lèi)型可能會(huì )影響該變量進(jìn)行計算所產(chǎn)生的結果。在這種情況下,編譯器不會(huì )產(chǎn)生運行期錯誤,它只是迫使該值符合數據類(lèi)型的要求。這類(lèi)問(wèn)題極難查找。
5.6 盡量縮小變量的作用域
如果變量的作用域大于它應有的范圍,變量可繼續存在,并且在不再需要該變量后的很長(cháng)時(shí)間內仍然占用資源。
它們的主要問(wèn)題是,任何類(lèi)中的任何方法都能對它們進(jìn)行修改,并且很難跟蹤究竟是何處進(jìn)行修改的。
占用資源是作用域涉及的一個(gè)重要問(wèn)題。對變量來(lái)說(shuō),盡量縮小作用域將會(huì )對應用程序的可靠性產(chǎn)生巨大的影響。
6. 代碼的格式化
6.1 對代碼進(jìn)行格式化時(shí),要達到的目的
1. 通過(guò)代碼分割成功能塊和便于理解的代碼段,使代碼更容易閱讀和理解;
2. 使用空行和注釋行,將程序中邏輯上不相關(guān)的代碼塊分開(kāi)。比如:變量聲明部分和代碼語(yǔ)句間的分隔;較長(cháng)的方法中,完成不同功能的代碼塊間的分隔。要避免出現邏輯上混亂的分隔,如:某一邏輯功能代碼塊中間用空行進(jìn)行了分隔,但是在相鄰功能代碼塊之間卻沒(méi)有分隔,這樣會(huì )給程序閱讀者造成錯覺(jué)。
3. 減少為理解代碼結構而需要做的工作;
4. 使代碼的閱讀者不必進(jìn)行假設;
5. 使代碼結構盡可能做到格式清楚明了。
6.2 編程原則
1. 要將多個(gè)語(yǔ)句放在同一行上
不論是變量聲明,還是語(yǔ)句都不要在一行上書(shū)寫(xiě)多個(gè)。
2. 縮進(jìn)后續行
當你將變量設置為某個(gè)值時(shí),所有后續行的縮進(jìn)位置應與第一行的變量值相同;
當你調用一個(gè)方法時(shí),后續行縮進(jìn)到第一個(gè)參數的開(kāi)始處;
當你將變量或屬性設置為等于表達式的計算結果時(shí),請從后面分割該語(yǔ)句,以確保該表達式盡可能放在同一行上。
3. 在if語(yǔ)句后縮進(jìn);
在else語(yǔ)句后縮進(jìn)
在switch語(yǔ)句后縮進(jìn)
在case語(yǔ)句后縮進(jìn)
在do句后縮進(jìn)
已經(jīng)用行接續符分割的語(yǔ)句的各個(gè)行要縮進(jìn)
對從屬于行標注的代碼進(jìn)行縮進(jìn)。
4. 在執行統一任務(wù)的各個(gè)語(yǔ)句組之間插入一個(gè)空行。好的代碼應由按邏輯順序排列的進(jìn)程或相關(guān)語(yǔ)句組構成。
7. 代碼的注釋
7.1 使用代碼注釋的目的
1. 文字說(shuō)明代碼的作用(即為什么要用編寫(xiě)該代碼,而不是如何編寫(xiě));
2. 確指出該代碼的編寫(xiě)思路和邏輯方法;
3. 人們注意到代碼中的重要轉折點(diǎn);
4. 使代碼的閱讀者不必在他們的頭腦中仿真運行代碼的執行方法.
7.2 編程原則
1. 用文字說(shuō)明代碼的作用:
簡(jiǎn)單的重復代碼做寫(xiě)什么,這樣的注釋幾乎不能給注釋增加什么信息.如果你使用好的命名方法來(lái)創(chuàng )建直觀(guān)明了的代碼那么這些類(lèi)型的注釋絕對增加不了什么信息.
2. 如果你想違背好的編程原則,請說(shuō)明為什么
有的時(shí)候你可能需要違背好的編程原則,或者使用了某些不正規的方法,.遇到這種情況時(shí),請用內部注釋來(lái)說(shuō)明你在做什么和為什么要這樣做。
技巧性特別高的代碼段,一定要加詳細的注釋?zhuān)灰屍渌_(kāi)發(fā)人員花很長(cháng)時(shí)間來(lái)研究一個(gè)高技巧但不易理解的程序段。
3. 用注釋來(lái)說(shuō)明何時(shí)可能出錯和為什么出錯
4. 在編寫(xiě)代碼前進(jìn)行注釋
給代碼加注釋的方法之一是在編寫(xiě)一個(gè)方法前首先寫(xiě)上注釋.如果你愿意,可以編寫(xiě)完整句子的注釋或偽代碼.一旦你用注釋對代碼進(jìn)行了概述,就可以在注釋之間編寫(xiě)代碼.
5. 在要注釋的代碼前書(shū)寫(xiě)注釋
注釋一定出現在要注釋的程序段前,不要在某段程序后書(shū)寫(xiě)對這段程序的注釋?zhuān)瓤吹阶⑨寣Τ绦虻睦斫鈺?huì )有一定幫助。
如果有可能,請在注釋行與上面代碼間加一空行。
6. 純色字符注釋行只用于主要注釋
注釋中要分隔時(shí),請使用一行空注釋行來(lái)完成,不要使用純色字符,以保持版面的整潔、清晰。
7. 避免形成注釋框
用星號圍成的注釋框,右邊的星號看起來(lái)很好,但它們給注釋增加了任何信息嗎?實(shí)際上這會(huì )給編寫(xiě)或編輯注釋的人增加許多工作。
8. 增強注釋的可讀性
注釋是供人閱讀的,而不是讓計算機閱讀的。
1) 使用完整的語(yǔ)句。雖然不必將注釋分成段落(最好也不要分成段落),但你應盡量將注釋寫(xiě)成完整的句子。
2) 避免使用縮寫(xiě)??s寫(xiě)常使注釋更難閱讀,人們常用不同的方法對相同的單詞進(jìn)行縮寫(xiě),這會(huì )造成許多混亂,如果必須對詞匯縮寫(xiě),必須做到統一。
3) 將整個(gè)單詞大寫(xiě),以突出它們的重要性。若要使人們注意注釋中的一個(gè)或多個(gè)單詞,請全部使用大寫(xiě)字母。
9. 對注釋進(jìn)行縮進(jìn),使之與后隨的語(yǔ)句對齊。
注釋通常位于它們要說(shuō)明的代碼的前面。為了從視覺(jué)上突出注釋與它的代碼之間的關(guān)系,請將注釋縮進(jìn),使之與代碼處于同一個(gè)層次上。
10. 為每個(gè)方法賦予一個(gè)注釋標頭
每個(gè)方法都應有一個(gè)注釋標頭。方法的注釋標頭可包含多個(gè)文字項,比如輸入參數、返回值、原始作者、最后編輯該方法的程序員、上次修改日期、版權信息。
11. 當行尾注釋用在上面這種代碼段結構中時(shí),它們會(huì )使代碼更難閱讀。
使用多個(gè)行尾注釋時(shí)(比如用于方法頂部的多個(gè)變量說(shuō)明),應使它們互相對齊。這可使它們稍容易閱讀一些。
12. 何時(shí)書(shū)寫(xiě)注釋
1) 請在每個(gè)if語(yǔ)句的前面加上注釋。
2) 在每個(gè)switch語(yǔ)句的前面加上注釋。與if語(yǔ)句一樣,switch語(yǔ)句用于評估對程序執行產(chǎn)生影響的表達式。
3) 在每個(gè)循環(huán)的前面加上注釋。每個(gè)循環(huán)都有它的作用,許多情況下這個(gè)作用不清楚直觀(guān)。
7.3 注釋那些部分
| 項目 | 注釋哪些部分 |
| 實(shí)參/ 參數 | 參數類(lèi)型 參數用來(lái)做什么 任何約束或前提條件 示例 |
| 字段/ 字段/屬性 | 字段描述 注釋所有使用的不變量 示例 并行事件 可見(jiàn)性決策 |
| 類(lèi) | 類(lèi)的目的 已知的問(wèn)題 類(lèi)的開(kāi)發(fā)/維護歷史 注釋出采用的不變量 并行策略 |
| 編譯單元 | 每一個(gè)類(lèi)/類(lèi)內定義的接口,含簡(jiǎn)單的說(shuō)明 文件名和/或標識信息 版權信息 |
| 接口 | 目的 它應如何被使用以及如何不被使用 |
| 局部變量 | 用處/目的 |
| 成員函數注釋 | 成員函數做什么以及它為什么做這個(gè) 哪些參數必須傳遞給一個(gè)成員函數 成員函數返回什么 已知的問(wèn)題 任何由某個(gè)成員函數拋出的異常 可見(jiàn)性決策 成員函數是如何改變對象的 包含任何修改代碼的歷史 如何在適當情況下調用成員函數的例子適用的前提條件和后置條件 |
| 成員函數內部注釋 | 控制結構 代碼做了些什么以及為什么這樣做 局部變量 難或復雜的代碼 處理順序 |
7.4 示例
7.4.1 塊注釋?zhuān)?/span>
主要用來(lái)描述文件,類(lèi),方法,算法等。一般用在文檔和方法的前面,也可以放在文檔的任何地方。以‘/*’開(kāi)頭,‘*/’結尾。例:
……
/*
* 注釋
*/
……
7.4.2 行注釋?zhuān)?/span>
主要用在方法內部,對代碼,變量,流程等進(jìn)行說(shuō)明。與塊注釋格式相似,但是整個(gè)注釋占據一行。例:
……
/* 注釋 */
……
7.4.3 尾隨注釋?zhuān)?/span>
與行注釋功能相似,放在代碼的同行,但是要與代碼之間有足夠的空間,便于分清。例:
int m=4 ; /* 注釋 */
如果一個(gè)程序塊內有多個(gè)尾隨注釋?zhuān)總€(gè)注釋的縮進(jìn)應該保持一致。
7.4.4 行尾注釋?zhuān)?/span>
與行注釋功能相似,放在每行的最后,或者占據一行。以‘//’開(kāi)頭。
7.4.5 文檔注釋?zhuān)?/span>
與塊注釋相似,但是可以被javadoc處理,生成HTML文件。以‘/**’開(kāi)頭,‘*/’結尾。文檔注釋不能放在方法或程序塊內。例:
/**
注釋
*/
8. 表達式和語(yǔ)句
8.1 每行應該只有一條語(yǔ)句。
8.2 if-else,if-elseif語(yǔ)句,任何情況下,都應該有“{”,“}”,格式如下:
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
8.3 for語(yǔ)句格式如下:
for (initialization; condition; update) {
statements;
}
如果語(yǔ)句為空:
for (initialization; condition; update) ;
8.4 while語(yǔ)句格式如下:
while (condition) {
statements;
}
如果語(yǔ)句為空:
while (condition);
8.5 do-while語(yǔ)句格式如下:
do {
statements;
} while (condition);
8.6 switch語(yǔ)句,每個(gè)switch里都應包含default子語(yǔ)句,格式如下:
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
8.7 try-catch語(yǔ)句格式如下:
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
9. 錯誤處理和異常事件
通常的思想是只對錯誤采用異常處理:邏輯和編程錯誤,設置錯誤,被破壞的數據,資源耗盡,等等。
通常的法則是系統在正常狀態(tài)下以及無(wú)重載和硬件失效狀態(tài)下,不應產(chǎn)生任何異常。異常處理時(shí)可以采用適當的日志機制來(lái)報告異常,包括異常發(fā)生的時(shí)刻。不要使用異常實(shí)現來(lái)控制程序流程結構。
10. 封裝、事務(wù)
1. 非商務(wù)公用組件單獨封裝
2. 每一個(gè)業(yè)務(wù)流程單獨封裝
3. 一次方法(組件)的調用應能完成某一項功能或流程,即符合完整性
4. 一次方法(組件)的調用符合ACID事務(wù)性
5. 多次方法(組件)的調用應包含在一個(gè)事務(wù)中
11. 可移植性
1. 盡量不要使用已經(jīng)被標為不贊成使用的類(lèi)或方法。
2. 如果需要換行的話(huà),盡量用 println 來(lái)代替在字符串中使用"\n"。
3. 用separator()方法代替路徑中的”/”或”\” 。
4. 用pathSeptarator()方法代替路徑中的 ” : ” 或 ” ;” 。
聯(lián)系客服