版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java編碼規(guī)范交流信息中心信息中心2016.012016.01簡介 本文提供一整套編寫高效可靠的 Java 代碼的標(biāo)準(zhǔn)、約定和指南。它們以安全可靠的軟件工程原則為基礎(chǔ),使代碼易于理解、維護(hù)和增強(qiáng)。而且,通過遵循這些程序設(shè)計(jì)標(biāo)準(zhǔn),作為一個 Java 軟件開發(fā)者的生產(chǎn)效率會有顯著提高。經(jīng)驗(yàn)證明,若從一開始就花時間編寫高質(zhì)量的代碼,則在軟件開發(fā)階段,對代碼的修改要容易很多。最后,遵循一套通用的程序設(shè)計(jì)標(biāo)準(zhǔn)將帶來更大的一致性,使軟件開發(fā)團(tuán)隊(duì)的效率明顯提高。 最根本的原則 運(yùn)用常識。運(yùn)用常識。當(dāng)找不到任何規(guī)則或指導(dǎo)方針,當(dāng)規(guī)則明顯不能適用,當(dāng)所有的方法都失效的時侯: 運(yùn)用常識并核實(shí)這些基本原則。這條規(guī)
2、則比其它所有規(guī)則都重要。常識是必不可少的。 參考SUN java SDK中的代碼,這些代碼、注釋是比較標(biāo)準(zhǔn)的。程序設(shè)計(jì)標(biāo)準(zhǔn) Java 的程序設(shè)計(jì)標(biāo)準(zhǔn)很重要,原因在于它將提高開發(fā)團(tuán)隊(duì)各成員的代碼的一致性。一致性的提高會使代碼更易理解,這意味著它更易開發(fā)和維護(hù)。從而降低了應(yīng)用程序的總開發(fā)成本。 你必須牢記的是:你的 Java 代碼在你已離開并開始另一個項(xiàng)目之后,會保留相當(dāng)長的一端時間。因此開發(fā)過程中一個很重要的目標(biāo)就是要確保在開發(fā)成員或開發(fā)團(tuán)隊(duì)之間的工作可以順利交接,不必花很大的力氣便能理解已編寫的代碼,以便繼續(xù)維護(hù)和改進(jìn)以前的工作。如果代碼難以理解,很有可能被廢棄和重寫。命名約定命名約定 我們將
3、在整個標(biāo)準(zhǔn)中討論命名約定,所以讓我們先討論幾個基本點(diǎn) 命名約定命名約定- -使用可以準(zhǔn)確說明變量/字段/類的完整的英文描述符 例如,采用類似 firstName,grandTotal 或 CorporateCustomer 這樣的名字。雖然象 x1,y1 或 fn 這樣的名字很簡短,輸入起來容易,但是我們難以知道它們代表什么、結(jié)果是什么含義,因而使代碼難以理解、維護(hù)和改進(jìn)。 命名約定命名約定- -采用該領(lǐng)域的術(shù)語 如果用戶稱他們的“客戶” (clients) 為“顧客” (customers),那么就采用術(shù)語 Customer 來命名這個類,而不用 Client。許多程序開發(fā)者會犯的一個錯誤是
4、,不去使用工業(yè)或領(lǐng)域里已經(jīng)存在著很完美的術(shù)語時,卻生造出一些普通詞匯。 命名約定命名約定- -采用大小寫混合,提高名字的可讀性采用大小寫混合,提高名字的可讀性 一般應(yīng)該采用小寫字母,但是類和接口的名字的首字母,以及任何中間單詞的首字母應(yīng)該大寫 命名約定命名約定- -盡量少用縮寫,但如果一定要使用,就要謹(jǐn)慎盡量少用縮寫,但如果一定要使用,就要謹(jǐn)慎地使用地使用 這意味著應(yīng)該保留一個標(biāo)準(zhǔn)縮寫的列表,明智地從中選取,并且在使用時保持一致。例如,想對單詞“number”采用縮寫,那么可從 nbr,no 或者 num 中選取一個,說明一下采用了哪一個(具體是哪個倒無所謂),并且只使用這一種形式。 命名約定
5、命名約定- -避免使用長名字避免使用長名字 雖然 PhysicalOrVirtualProductOrService 看起來似乎是個不錯的類名,但是這個名字太長了,應(yīng)該考慮重新給它起個短一點(diǎn)的名字,比如象 Offering。 命名約定命名約定- -避免使用相似或者僅在大小寫上有區(qū)別的名字避免使用相似或者僅在大小寫上有區(qū)別的名字 例如,不應(yīng)同時使用變量名 persistentObject 和 persistentObjects,以及 anSqlDatabase 和 anSQLDatabase。 注釋約定注釋約定 注釋應(yīng)該增加代碼的清晰度 避免使用裝飾性內(nèi)容,也就是說,不要使用象廣告橫幅那樣的注釋
6、語句 保持注釋的簡潔 先寫注釋,后寫代碼 注釋信息不僅要包括代碼的功能,還應(yīng)給出原因 成員函數(shù)標(biāo)準(zhǔn)成員函數(shù)標(biāo)準(zhǔn) 命名成員函數(shù) 成員函數(shù)的命名應(yīng)采用完整的英文描述符,大小寫混合使用:所有中間單詞的第一個字母大寫。成員函數(shù)名稱的第一個單詞常常采用一個有強(qiáng)烈動作色彩的動詞。 示例:示例: openAccount() printMailingLabel() save() delete() 這種約定常常使人一看到成員函數(shù)的名稱就能判斷它的功能。雖然這種約定要使開發(fā)者多做一些輸入的工作,因?yàn)楹瘮?shù)名常常較長,但是回報(bào)是提高代碼的可理解性。命名存取成員函數(shù) 獲取函數(shù)獲取函數(shù) 獲取函數(shù)作為一個成員函數(shù),返回一個
7、字段的值。除了布爾字段之外,應(yīng)采用獲取函數(shù)作為一個成員函數(shù),返回一個字段的值。除了布爾字段之外,應(yīng)采用 get 作為字作為字段的前綴;布爾字段采用段的前綴;布爾字段采用 is 作為前綴。作為前綴。 示例:示例: getFirstName() getAccountNumber() isPersistent() isAtEnd() 遵循這個命名約定,顯然,成員函數(shù)將返回對象的字段,布爾型的獲取函數(shù)將返回布爾值遵循這個命名約定,顯然,成員函數(shù)將返回對象的字段,布爾型的獲取函數(shù)將返回布爾值“真真”或者或者“假假”。這個標(biāo)準(zhǔn)的另一個優(yōu)點(diǎn)是:它遵循。這個標(biāo)準(zhǔn)的另一個優(yōu)點(diǎn)是:它遵循 beans develo
8、pment kit (BDK) 對獲取對獲取成員函數(shù)采用的命名約定成員函數(shù)采用的命名約定 DES97。它的一個主要的缺點(diǎn)是。它的一個主要的缺點(diǎn)是 get 是多余的,需要額外的錄入是多余的,需要額外的錄入工作。工作。設(shè)置函數(shù) 設(shè)置函數(shù),也叫變值函數(shù),是可以修改一個字段值的成員函數(shù),。無論何種字段類型,都要在字段名的前面加上 set 前綴。 示例:示例: setFirstName(String aName) setAccountNumber(int anAccountNumber) setReasonableGoals(Vector newGoals) setPersistent(boolean
9、isPersistent) setAtEnd(boolean isAtEnd) 按照這種命名約定,顯然是一個成員函數(shù)設(shè)定一個對象的字段值。這個標(biāo)準(zhǔn)的另一個優(yōu)點(diǎn)按照這種命名約定,顯然是一個成員函數(shù)設(shè)定一個對象的字段值。這個標(biāo)準(zhǔn)的另一個優(yōu)點(diǎn)是:它遵循是:它遵循 beans development kit (BDK) 對設(shè)置函數(shù)采用的命名約定對設(shè)置函數(shù)采用的命名約定 DES97。命名構(gòu)造函數(shù) 構(gòu)造函數(shù)是在一個對象初次生成時,完成所有必需的初始化的成員函數(shù)。構(gòu)造函數(shù)與它所屬類的名字總是相同的。例如,類 Customer 的構(gòu)造函數(shù)是 Customer()。注意大小寫一致。 示例:示例: Custome
10、r()SavingsAccount()PersistenceBroker() 這個命名約定由這個命名約定由 Sun 公司設(shè)定,必須嚴(yán)格遵守。公司設(shè)定,必須嚴(yán)格遵守。成員函數(shù)的可見性 良好的程序設(shè)計(jì)應(yīng)該盡可能減小類與類之間耦合,所遵循的經(jīng)驗(yàn)法則是:盡量限制成員函數(shù)的可見性。如果成員函數(shù)沒必要公有 (public),就定義為保護(hù) (protected);沒必要保護(hù) (protected),就定義為私有 (private)。 可見性說明正確用法可見性說明正確用法 public公有成員函數(shù)可被任何其它對象和類的成員函數(shù)調(diào)用。當(dāng)該成員函數(shù)必須被該函數(shù)所在的層次結(jié)構(gòu)之外的其他對象和類在訪問時。 prote
11、cted被保護(hù)的成員函數(shù)可被它所在的類或該類的子類的任何成員函數(shù)調(diào)用。當(dāng)該成員函數(shù)提供的行為被它所在類的層次結(jié)構(gòu)內(nèi)部而非外部需要時。 private私有成員函數(shù)只可以被該類所在的其它成員函數(shù)調(diào)用,該類的子類不可以調(diào)用。當(dāng)該成員函數(shù)所提供的行為明確針對定義它的類時。私有成員函數(shù)常常是重新分配要素的結(jié)果。重新分配要素又叫“重組”,指類內(nèi)其它成員函數(shù)封裝某一個特定行為的做法。注釋成員函數(shù)注釋成員函數(shù) 如何注釋一個成員函數(shù)常常成為判斷函數(shù)是否可被理解,進(jìn)而可維護(hù)和可擴(kuò)展的決定性因素。成員函數(shù)的函數(shù)頭 每一個 Java 成員函數(shù)都應(yīng)包含某種稱之為“成員函數(shù)文檔”的函數(shù)頭。這些函數(shù)頭在源代碼的前面,用來記
12、錄所有重要的有助于理解函數(shù)的信息。 這些信息包含但不僅僅局限于以下內(nèi)容: 成員函數(shù)做什么以及它為什么做這個 哪些參數(shù)必須傳遞給一個成員函數(shù) 成員函數(shù)返回什么 已知的問題。成員函數(shù)中的任何突出的問題都應(yīng)說明,以便讓其他程序開發(fā)者了解該成員函數(shù)的弱點(diǎn)和難點(diǎn)。如果在一個類的多個成員函數(shù)中都存在著同樣的問題,那么這個問題應(yīng)該寫在類的說明里。 成員函數(shù)的函數(shù)頭 任何由某個成員函數(shù)拋出的異常。應(yīng)說明成員函數(shù)拋出的所有異常,以便使其他程序員明白他們的代碼應(yīng)該捕獲些什么。在 (第 1.4.2節(jié)“快速瀏覽 javadoc”) 中討論的 javadoc exception 標(biāo)識便用于此目的。 可見性決策。如果你覺
13、得你對于一個成員函數(shù)可見性的選擇會遭可見性決策。如果你覺得你對于一個成員函數(shù)可見性的選擇會遭到別人的質(zhì)疑,例如可能你將一個成員函數(shù)設(shè)為公共的,但是卻到別人的質(zhì)疑,例如可能你將一個成員函數(shù)設(shè)為公共的,但是卻沒有任何對象調(diào)用該成員函數(shù),那么應(yīng)說明你的決定。這將幫助沒有任何對象調(diào)用該成員函數(shù),那么應(yīng)說明你的決定。這將幫助其他開發(fā)者了解你的想法,使他們不必浪費(fèi)時間操心考慮你為什其他開發(fā)者了解你的想法,使他們不必浪費(fèi)時間操心考慮你為什么要選擇一種有疑問的東西。么要選擇一種有疑問的東西。 成員函數(shù)的函數(shù)頭 僅當(dāng)注釋增加代碼的清晰度時,才應(yīng)加上注釋僅當(dāng)注釋增加代碼的清晰度時,才應(yīng)加上注釋 對于每個成員函數(shù),
14、并非要說明以上所有部分,因?yàn)閷τ诿恳粋€成員函數(shù)來說,并不是以上所有的部分都適用。但是,對于所寫的每個成員函數(shù)要說明以上的部分內(nèi)容。 內(nèi)部注釋 除成員函數(shù)注釋以外,在成員函數(shù)內(nèi)部還需加上注釋語句來說明你的工作。 目的是使成員函數(shù)更易理解、維護(hù)和增強(qiáng)。 內(nèi)部注釋應(yīng)采用兩種方式:C 語言風(fēng)格的注釋 (/* 和 */) 和單行注釋 (/)。正如上述所討論的,應(yīng)認(rèn)真考慮給代碼的業(yè)務(wù)邏輯采用一種風(fēng)格的注釋,給要注釋掉的無用代碼采用另外一種風(fēng)格的注釋。建議對業(yè)務(wù)邏輯采用單行注釋,因?yàn)樗捎糜谡凶⑨尯托心┳⑨尅2捎?C 語言風(fēng)格的注釋語句去掉無用的代碼,因?yàn)檫@樣僅用一個語句就可以容易地去掉幾行代碼內(nèi)部注釋
15、在函數(shù)內(nèi),一定要說明: 控制結(jié)構(gòu)。說明每個控制結(jié)構(gòu),例如比較語句和循環(huán)。你無須讀完整個控制結(jié)構(gòu)內(nèi)的代碼才判斷它的功能,而僅控制結(jié)構(gòu)。說明每個控制結(jié)構(gòu),例如比較語句和循環(huán)。你無須讀完整個控制結(jié)構(gòu)內(nèi)的代碼才判斷它的功能,而僅需看看緊靠它之前的一到兩行注釋即可。需看看緊靠它之前的一到兩行注釋即可。 代碼做了些什么以及為什么這樣做。通常你常能看懂一段代碼做了什么,但對于那些不明顯的代碼,你很少能判代碼做了些什么以及為什么這樣做。通常你常能看懂一段代碼做了什么,但對于那些不明顯的代碼,你很少能判斷出它為什么要那樣做。例如,看完一行代碼,你很容易地就可以斷定它是在定單總額上打了斷出它為什么要那樣做。例如,
16、看完一行代碼,你很容易地就可以斷定它是在定單總額上打了 5% 的折扣。這很的折扣。這很容易。不容易的是為什么要打這個折扣。顯然,肯定有一條商業(yè)法則說應(yīng)打折扣,那么在代碼中至少應(yīng)該提到那容易。不容易的是為什么要打這個折扣。顯然,肯定有一條商業(yè)法則說應(yīng)打折扣,那么在代碼中至少應(yīng)該提到那條商業(yè)法則,這樣才能使其他開發(fā)者理解你的代碼為什么會是這樣。條商業(yè)法則,這樣才能使其他開發(fā)者理解你的代碼為什么會是這樣。 局部變量。雖然我們在第局部變量。雖然我們在第 4 章將仔細(xì)討論這一點(diǎn),在一個成員函數(shù)內(nèi)定義的每一個局部變量都應(yīng)在它代碼的所在章將仔細(xì)討論這一點(diǎn),在一個成員函數(shù)內(nèi)定義的每一個局部變量都應(yīng)在它代碼的所
17、在行聲明,并且應(yīng)采用一個行內(nèi)注釋說明它的用法。行聲明,并且應(yīng)采用一個行內(nèi)注釋說明它的用法。 難或復(fù)雜的代碼。若發(fā)現(xiàn)不能或者沒有時間重寫代碼,那么應(yīng)將成員函數(shù)中的復(fù)雜代碼詳細(xì)地注釋出來。一般性難或復(fù)雜的代碼。若發(fā)現(xiàn)不能或者沒有時間重寫代碼,那么應(yīng)將成員函數(shù)中的復(fù)雜代碼詳細(xì)地注釋出來。一般性的經(jīng)驗(yàn)法則是,如果代碼并非顯而易見的,則應(yīng)說明。的經(jīng)驗(yàn)法則是,如果代碼并非顯而易見的,則應(yīng)說明。 處理順序。如果代碼中有的語句必須在一個特定的順序下執(zhí)行,則應(yīng)保證將這一點(diǎn)注釋出來處理順序。如果代碼中有的語句必須在一個特定的順序下執(zhí)行,則應(yīng)保證將這一點(diǎn)注釋出來 AMB98。沒有比下。沒有比下面更糟糕的事了:你對一
18、段代碼做一點(diǎn)簡單的改動,卻發(fā)現(xiàn)它不工作,于是花了幾個小時查找問題,最后發(fā)現(xiàn)原面更糟糕的事了:你對一段代碼做一點(diǎn)簡單的改動,卻發(fā)現(xiàn)它不工作,于是花了幾個小時查找問題,最后發(fā)現(xiàn)原來是搞錯了代碼的執(zhí)行順序。來是搞錯了代碼的執(zhí)行順序。 編寫清晰整潔的代碼的技巧 給代碼加上注釋 給代碼分段 使用空白 遵循 30 秒條規(guī)則 說明消息發(fā)送的順序 寫短小單獨(dú)的命令行 讓代碼分段/縮進(jìn) 一種提高代碼可讀性的方法是給代碼分段,換句話說,就是在代碼塊內(nèi)讓代碼縮進(jìn)。所有在括號 和 之內(nèi)的代碼,構(gòu)成一個塊?;舅枷胧?,塊內(nèi)的代碼都應(yīng)統(tǒng)一地縮進(jìn)去一個單位。 Java 的約定似乎是開括號放在塊的所有者所在行的后面,閉括號應(yīng)
19、縮進(jìn)一級。在 LAF97 指出的很重要的一點(diǎn)是,你所在的機(jī)構(gòu)應(yīng)選取一個縮進(jìn)風(fēng)格并始終使用這種風(fēng)格。采用與你的 Java 開發(fā)環(huán)境所生成的代碼一樣的縮進(jìn)風(fēng)格。 在代碼中使用空白。在代碼中使用空白。 在 Java 代碼中加入幾個空行,也叫空白,將代碼分為一些小的、容易理解的部分,可以使它更加可讀。VIS96 建議采用一個空行來分隔代碼的邏輯組,例如控制結(jié)構(gòu),采用兩個空行來分隔成員函數(shù)定義。沒有空白的代碼很難讀,很難理解。遵循 30 秒條法則 其他的程序員應(yīng)能在少于 30 秒鐘的時間內(nèi)完全理解你的成員函數(shù),理解它做什么,為什么這樣做,它是怎樣做的。如果他們做不到,說明你的代碼太難維護(hù),應(yīng)加以改進(jìn)。3
20、0 秒鐘,明明白白。 一個好的經(jīng)驗(yàn)法則是:如果一個成員函數(shù)一個屏幕裝不下,那么它就很可能太長了。 寫短小單獨(dú)的命令行 每一行代碼只做一件事情。 若想在一行里做多件事情,就會使代碼難于理解。為什么要這樣呢?我們應(yīng)使代碼盡量容易理解,從而更容易維護(hù)和改進(jìn)。正如同一個成員函數(shù)應(yīng)該并且只能做一件事一樣,一行代碼也只應(yīng)做一件事情。 此外,應(yīng)讓代碼在一個屏幕內(nèi)可見 VIS96。 也不應(yīng)向右滾動編輯窗口來讀取一整行代碼,包括含有行內(nèi)注釋語句的代碼。 字段標(biāo)準(zhǔn)字段標(biāo)準(zhǔn) field 這個詞在這里指的是字段,Beans Development Kit (BDK) 叫它“屬性” DES97。字段是說明一個對象或者一
21、個類的一段數(shù)據(jù)。字段可以是象字符串或者浮點(diǎn)數(shù)這樣的基本數(shù)據(jù)類型,也可以是一個對象,例如一個消費(fèi)者或者一個銀行帳戶。 應(yīng)采用完整的英文描述符來命名字段 GOS96,AMB98,以便使字段所表達(dá)的意思一目了然。象數(shù)組或者矢量這樣是集合的字段,命名時應(yīng)使用復(fù)數(shù)來表示它們代表多值。 示例:示例: firstName zipCode unitPrice discountRate orderItems命名組件(部件) 應(yīng)采用完整的英文描述符命名組件(接口部件),名字的后綴是組件類型名。這讓你容易區(qū)分一個組件的目的和它的類型,容易在一個表里找到各個組件(許多可視化的編程環(huán)境在一個 Applet 程序或者一個
22、應(yīng)用程序中提供了一個所有組件的列表。如果所有名字都是類似于 button1, button2, & 這樣的話,很容易混淆)。 示例:示例: okButton customerList fileMenu newFileMenuItem命名常量 Java 中,常量,即不變的值,一般用類的靜態(tài)常量字段來實(shí)現(xiàn)。公認(rèn)的約定是,采用完整的英文大寫單詞,在詞與詞之間用下劃線連接 GOS96。 示例:示例: MINIMUM_BALANCE MAX_VALUE DEFAULT_START_DATE 這個約定的主要優(yōu)點(diǎn)是,它有助于區(qū)分常量和變量。在本文后面的章節(jié)中我們將看到,如果用定義獲取函數(shù)返回常量值的
23、方法來取代定義常量,代碼的可適應(yīng)性和可維護(hù)性都會大大提高。命名集合 一個集合,例如數(shù)組和矢量,應(yīng)采用復(fù)數(shù)命名來表示隊(duì)列中存放的對象類型。命名應(yīng)采用完整的英文描述符,名字中所有非開頭的單詞的第一個字母應(yīng)大寫。 示例:示例: customersorderItemsaliases 這種約定的主要優(yōu)點(diǎn)是有助于區(qū)分表這種約定的主要優(yōu)點(diǎn)是有助于區(qū)分表示復(fù)數(shù)值(集合)和單值(非集合)的字段。示復(fù)數(shù)值(集合)和單值(非集合)的字段。不要“隱藏”名字 字隱藏是指給局部變量、參數(shù)或者字段所取的名字,與另一個更大范圍內(nèi)定義的變量、參數(shù)或者字段的名字相同(或相似)。例如,如果把一個字段叫做 firstName ,就不
24、要再生成一個局部變量或者參數(shù)叫做 firstName,或者任何類似的名字,如 firstNames 或 fistName。名字隱藏會使代碼難于理解,并容易產(chǎn)生問題。因?yàn)槟慊蛘咂渌_發(fā)者在修改代碼時,會誤讀代碼,而錯誤又很難發(fā)現(xiàn)。 注釋一個字段 所有的字段都應(yīng)很好地加以注釋,以便其他開發(fā)者理解它。要想有效地注釋,以下的部分需要說明: 字段的說明。需說明一個字段,才能使人了解如何使用它。字段的說明。需說明一個字段,才能使人了解如何使用它。 注釋出所有采用的不變量。字段中的不變量是指永遠(yuǎn)為注釋出所有采用的不變量。字段中的不變量是指永遠(yuǎn)為“真真”的條件。例如,字段的條件。例如,字段 dayOfMont
25、h 的不變量可能是它的值只能在的不變量可能是它的值只能在 1 到到 31 之間(顯然,可以用基于某一年里的某之間(顯然,可以用基于某一年里的某個月份來限制這個字段值,使其變的更加復(fù)雜)。通過說明字段值的限制條件,有助于定個月份來限制這個字段值,使其變的更加復(fù)雜)。通過說明字段值的限制條件,有助于定義重要的業(yè)務(wù)規(guī)則,使代碼更易理解。義重要的業(yè)務(wù)規(guī)則,使代碼更易理解。 示例。對于那些有復(fù)雜業(yè)務(wù)規(guī)則與之相關(guān)聯(lián)的字段,應(yīng)提供幾個例子,使它們?nèi)菀桌斫?。示例。對于那些有?fù)雜業(yè)務(wù)規(guī)則與之相關(guān)聯(lián)的字段,應(yīng)提供幾個例子,使它們?nèi)菀桌斫?。一個例子常象一幅畫:它抵得上幾千個詞語。一個例子常象一幅畫:它抵得上幾千個詞
26、語。 并行事件。對眾多程序開發(fā)者來說,并行性是一個新而復(fù)雜的概念;事實(shí)上,即使對有經(jīng)并行事件。對眾多程序開發(fā)者來說,并行性是一個新而復(fù)雜的概念;事實(shí)上,即使對有經(jīng)驗(yàn)的并行程序開發(fā)者來說,并行性也是一個老但卻復(fù)雜的課題。最終結(jié)果是,如果應(yīng)用了驗(yàn)的并行程序開發(fā)者來說,并行性也是一個老但卻復(fù)雜的課題。最終結(jié)果是,如果應(yīng)用了 Java 的并行編程特性,那么你應(yīng)在程序中詳細(xì)地注釋出來。的并行編程特性,那么你應(yīng)在程序中詳細(xì)地注釋出來。 命名存取函數(shù) 獲取成員函數(shù)應(yīng)在名字中加上 get + 字段名,除非字段表示的是一個布爾值(“真”或者“假”),這時獲取函數(shù)名中應(yīng)加上 is + 字段名。無論何種字段類型,設(shè)
27、置成員函數(shù)應(yīng)在名字中加上 set + 字段名 GOS96,DES97。注意字段名始終采用大小寫混合,所有單詞的第一個字母要大寫。命名約定在 JDK 中被始終使用,在 beans development 中也必須使用。 Examples: 字段類型字段類型 獲取函數(shù)名獲取函數(shù)名 設(shè)置函數(shù)名設(shè)置函數(shù)名 firstName 字符串字符串 getFirstName() setFirstName() address 地址對象地址對象 getAddress() setAddress() persistent 布爾值布爾值 isPersistent() setPersistent() customerNo
28、整型整型 getCustomerNo() setCustomerNo() orderItems OrderItem的對象數(shù)組的對象數(shù)組 getOrderItems() 類的聲明 一種讓你的類容易被理解的方法是用一致的方式來聲明它們。Java 中常用的方法是按如下順序聲明一個類: 公共成員函數(shù) 公共字段 被保護(hù)成員函數(shù) 被保護(hù)字段 私有成員函數(shù) 私有字段將公共和保護(hù)接口最小化 向?qū)ο蟪绦蛟O(shè)計(jì)的基本點(diǎn)之一是最小化一個類的公共接口。這樣做有幾個理由: 可學(xué)習(xí)性。要了解如何使用一個類,只需了解它的公共接口即可。公共接口越小,類越容可學(xué)習(xí)性。要了解如何使用一個類,只需了解它的公共接口即可。公共接口越小,
29、類越容易學(xué)習(xí)。易學(xué)習(xí)。 減少耦合。當(dāng)一個類的實(shí)例向另一個類的實(shí)例或者直接向這個類發(fā)送一條消息時,這兩個減少耦合。當(dāng)一個類的實(shí)例向另一個類的實(shí)例或者直接向這個類發(fā)送一條消息時,這兩個類變得耦合起來。最小化公共接口意味著將耦合的可能降到最低。類變得耦合起來。最小化公共接口意味著將耦合的可能降到最低。 更大的靈活性。這直接與耦合相聯(lián)系。一旦想改變一個公共接口的成員函數(shù)的實(shí)現(xiàn)方法,更大的靈活性。這直接與耦合相聯(lián)系。一旦想改變一個公共接口的成員函數(shù)的實(shí)現(xiàn)方法,如你可能想修改成員函數(shù)的返回值,那么你很可能不得不修改所有調(diào)用了該成員函數(shù)的代如你可能想修改成員函數(shù)的返回值,那么你很可能不得不修改所有調(diào)用了該成
30、員函數(shù)的代碼。公共接口越小,封裝性就越大,代碼的靈活性也越大。碼。公共接口越小,封裝性就越大,代碼的靈活性也越大。 盡力使公共接口最小化這一點(diǎn)盡力使公共接口最小化這一點(diǎn)明顯地很值得你的努力,但通常不明顯的是也應(yīng)使被保護(hù)接口最小化。基本思想是,從一明顯地很值得你的努力,但通常不明顯的是也應(yīng)使被保護(hù)接口最小化?;舅枷胧牵瑥囊粋€子類的角度來看,它所有超類的被保護(hù)接口是公共的。任何在被保護(hù)接口內(nèi)的成員函數(shù)個子類的角度來看,它所有超類的被保護(hù)接口是公共的。任何在被保護(hù)接口內(nèi)的成員函數(shù)可被一個子類調(diào)用。所以,出于與最小化公共接口同樣的理由,應(yīng)最小化類的被保護(hù)接口??杀灰粋€子類調(diào)用。所以,出于與最小化公共
31、接口同樣的理由,應(yīng)最小化類的被保護(hù)接口。首先定義公共接口首先定義公共接口 大多數(shù)有經(jīng)驗(yàn)的開發(fā)者在開始編寫類的代碼之前就先定義類的公共接口。 第一,如果你不知道一個類要完成怎樣的服務(wù)/行為,你仍有一些設(shè)計(jì)工作要做。第二,這樣做使這個類很快地初具雛形,以便其他有賴于該類的開發(fā)者在“真正的”類被開發(fā)出來以前至少可以用這個雛形開始工作。 第三,這種方法給你提供了一個初始框架,圍繞著這個框架你構(gòu)造類。 包的標(biāo)準(zhǔn) -命名包 關(guān)于包的命名有幾條規(guī)則。按順序來說,這些規(guī)則是: 標(biāo)識符用點(diǎn)號分隔開來。為了使包的名字更易讀,標(biāo)識符用點(diǎn)號分隔開來。為了使包的名字更易讀,Sun 公司建議包名中的標(biāo)識符用點(diǎn)號來公司建議
32、包名中的標(biāo)識符用點(diǎn)號來分隔。例如,包名分隔。例如,包名 java.awt 含有兩個標(biāo)識符含有兩個標(biāo)識符 java 和和 awt。 Sun 公司的標(biāo)準(zhǔn)公司的標(biāo)準(zhǔn) java 分配包用標(biāo)識符分配包用標(biāo)識符 .java 開頭。開頭。Sun 保有這種權(quán)利,使得無論你的保有這種權(quán)利,使得無論你的 Java 開開發(fā)環(huán)境的零售商是怎樣的,標(biāo)準(zhǔn)發(fā)環(huán)境的零售商是怎樣的,標(biāo)準(zhǔn) java 包的命名始終一致。包的命名始終一致。 局部包的名字中的第一個標(biāo)識符不能都是大寫。所謂局部包是指那些在你的機(jī)構(gòu)內(nèi)部使用,局部包的名字中的第一個標(biāo)識符不能都是大寫。所謂局部包是指那些在你的機(jī)構(gòu)內(nèi)部使用,不會應(yīng)用到其他機(jī)構(gòu)中去的包。這樣的
33、包的名字的例子有不會應(yīng)用到其他機(jī)構(gòu)中去的包。這樣的包的名字的例子有 persistence.mapping.relational 和和interface.screens。 全局包的名字用你的機(jī)構(gòu)的全局包的名字用你的機(jī)構(gòu)的 Internet 保留域名開頭。一個要應(yīng)用到多個機(jī)構(gòu)的包應(yīng)包含創(chuàng)保留域名開頭。一個要應(yīng)用到多個機(jī)構(gòu)的包應(yīng)包含創(chuàng)建機(jī)構(gòu)的域名,并且最高層的域名類型要大寫。例如,要應(yīng)用前面的包,它們應(yīng)被命名為建機(jī)構(gòu)的域名,并且最高層的域名類型要大寫。例如,要應(yīng)用前面的包,它們應(yīng)被命名為 com.rational.www.persistence.mapping.relational 和和 com.
34、erface.screens。0 錯誤處理和異常錯誤處理和異常 系統(tǒng)在正常狀態(tài)下以及無重載和硬件失效狀態(tài)下,不應(yīng)產(chǎn)生異常。 盡早采用適當(dāng)?shù)娜罩緳C(jī)制來報(bào)告異常,包括在異常發(fā)生的時刻。 不得不在每一級處理大量的異常使得代碼難于理解和維護(hù)。有時,異常阻礙了正常的處理。 對于經(jīng)常發(fā)生的可預(yù)計(jì)事件不要采用異常。對于經(jīng)常發(fā)生的可預(yù)計(jì)事件不要采用異常。 不要使用異常實(shí)現(xiàn)控制結(jié)構(gòu)不要使用異常實(shí)現(xiàn)控制結(jié)構(gòu) 在代碼進(jìn)行安全性檢查,不要指望你的客戶會去做這件事在代碼進(jìn)行安全性檢查,不要指望你的客戶會去做這件事 導(dǎo)入類 在說明類名時,import 語句允許使用通配符。例如, impor
35、t java.awt.* 語句 一次性地引入了包 java.awt 中的所有類。 實(shí)際上,這并不完全正確。實(shí)際情況是每一個所使用的取自于 java.awt 包中的類,在編譯時被引入代碼,而其中未使用的類不被引入。雖然這聽起來象是一個好的特點(diǎn),但是它卻降低了代碼的可讀性。一個更好的方法是完全限制代碼所使用的類的名字 LAF97,VIS96。一個較好的導(dǎo)入類的方法如下面的例子所示: import java.awt.Color; import java.awt.Button; import java.awt.Container; 有效地使用這些標(biāo)準(zhǔn) 以下的建議將幫助你更有效地使用本文所描述的 Java 編程標(biāo)準(zhǔn)和指南: 理解標(biāo)準(zhǔn)?;ㄐr間去理解為什么每個標(biāo)準(zhǔn)和指南會使開發(fā)效率提高。比如說,不要僅僅是因?yàn)橹咐斫鈽?biāo)準(zhǔn)?;ㄐr間去理解為什么每個標(biāo)準(zhǔn)和指南會使開發(fā)效率提高。比如說,不要僅僅是因?yàn)橹改现幸竽悴旁谝恍袃H聲明一個局
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版購車貸款利率調(diào)整合同3篇
- 金融服務(wù)工程承諾書
- 環(huán)保設(shè)備采購招投標(biāo)合同范本
- 建筑工程腳手架租賃合同范本
- 律師協(xié)會財(cái)務(wù)風(fēng)險(xiǎn)管理規(guī)范
- 資金運(yùn)用監(jiān)控規(guī)范
- 眼鏡生產(chǎn)廠房租賃合同
- 非營利組織安全責(zé)任區(qū)管理辦法
- 體育產(chǎn)業(yè)招投標(biāo)領(lǐng)導(dǎo)小組啟動
- 垃圾處理安全事故防范指南
- 德菲婭定制衣柜導(dǎo)購培訓(xùn)手冊
- 人文英語3復(fù)習(xí)資料
- 2023-2024學(xué)年云南省昆明市小學(xué)語文二年級期末評估測試題附參考答案和詳細(xì)解析
- 靜脈輸液新標(biāo)準(zhǔn)
- 機(jī)械原理課程設(shè)計(jì)-自動蓋章機(jī)
- 供應(yīng)室提高腔鏡器械清洗質(zhì)量PDCA案例
- 【林芝市藏漢通婚帶來的影響調(diào)研分析報(bào)告3300字】
- FURUNOECDISMultipleChoiceTest古野電子海圖題庫測試題
- 中醫(yī)骨傷學(xué)課程教案
- 央國企信創(chuàng)白皮書 -基于信創(chuàng)體系的數(shù)字化轉(zhuǎn)型
- JJF 1596-2016X射線工業(yè)實(shí)時成像系統(tǒng)校準(zhǔn)規(guī)范
評論
0/150
提交評論