java編碼規(guī)范(華為)1_第1頁
java編碼規(guī)范(華為)1_第2頁
java編碼規(guī)范(華為)1_第3頁
java編碼規(guī)范(華為)1_第4頁
java編碼規(guī)范(華為)1_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Documentnumber文檔編號Confidentialitylevel密級

內(nèi)部公開

Documentversion文檔版本

Total34pages共34頁

VI.00

Java語言編碼規(guī)范

PreparedbyDate

yyyy-mm-dd

擬制日期

ReviewedbyDate

yyyy-mm-dd

評審人日期

ApprovedbyDate

yyyy-mm-dd

批準(zhǔn)口期

RevisionRecord修訂記錄

DateRevisionSe.No.ChangeDescriptionAuthor

日期Version修改章節(jié)修改描述作者

修訂版本

yyyy-mm-ddVx.xx

TableofContents目錄

1.范圍4

2.規(guī)范性引用文件4

3.術(shù)語和定義5

4.排版規(guī)范6

4.1.規(guī)則8

4.2.建議10

5.注釋規(guī)范11

5.1.規(guī)則11

5.2.建議16

6.命名規(guī)范18

6.1.規(guī)則20

6.2.建議21

7.編碼規(guī)范23

7.1.規(guī)則23

7.2.建議26

8.JTEST規(guī)范28

8.1.規(guī)則30

8.2.建議31

是否

可使

用這

些文

件的

最新

版技

凡是

不注

日期

的引

用文

隹其

翔本

范免

序號

1

12

-2001.

A1040

DKB

公司-

程規(guī)范

語言編

《Java

和定

術(shù)語

3.

則。

守的原

必須遵

時(shí)強(qiáng)制

:編程

規(guī)則

。

的原則

以考慮

必須加

編程時(shí)

建議:

明。

式的說

規(guī)范格

:對此

格式

4.說明:對此規(guī)范或建議進(jìn)行必要的解釋。

5.示例:對此規(guī)范或建議從正、反兩個(gè)方面給出例子。

6.排版規(guī)范

6.1.規(guī)則

6.1.1.*程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個(gè)。

說明:對于由開發(fā)工具自動生成的代碼可以有不一致。

*分界符(如大括號'{'和'}')應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對齊。在函數(shù)體的

開始、類和接口的定義、以及if、for、do、whilesswitch%case語句中的程序都要采用如上的縮進(jìn)方式。

示例:如下例子不符合規(guī)范。

for(...){

/.progra.code

}

if(…)

(

/.progra.code

)

voidexamplefun(void)

(

/.progra.code

)

應(yīng)如下"寫;

for(...)

(

/.progra.code

}

if(…)

(

/.progra.code

)

voidexample_fun(void)

(

/.progra.code

次較長的語句、表達(dá)式或參數(shù)(>30字符)要分成多行書寫、長友達(dá)式要在低優(yōu)先級操作符處

劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀,

示例:

if(filename!=null

&&newFile(logPath+filename).length()<LogConfig.getFileSize())

(

/.progra.code

)

publicstaticLogiteratorread(StringlogType,DatestartTime,DateendTime,

intlogLevel,StringuserName,intbufferNum)

*不允許把多個(gè)短語句寫在一行中,即一行只寫一條語句

示例:如下例子不符合規(guī)范。

LogFilenamenow=null;LogFilenamethat=null;

應(yīng)如下書寫:

LogFilenamenow=null;

LogFilenamethat=null;

*if,for,do,while,case,switch,default等語句自占-?行,且if,for,do,while等語句

的執(zhí)行語句無論多少都要加括號{}。

示例:如下例子不符合規(guī)范.

if(writeToFile)writeFileTerrupt();

應(yīng)如下書寫:

if(writeToFile)

(

writeFileTerrupt();

}

6.1.2.*相對獨(dú)立的程序塊之間、變量說明之后必須加空行。

示例:如下例子不符合規(guī)范。

if(log.getLevel()<LogConfig.getRecordLevel())

(

return;

}

LogWriterwriter;

應(yīng)如卜.書寫:

if(log.getLevel()<LogConfig.getRecordLevel())

(

return;

)

LogWriterwriter;

intindex;

*對齊只使用空格鍵,不使用TAB鍵。

說明:以免用不同的編輯器閱讀程序時(shí),因TAB鍵所設(shè)置的空格數(shù)目不同而造成程序布局不整齊。

JBuilder、UltraEdil等編輯環(huán)境,支持行苜TAB替換成空格,應(yīng)洛該選項(xiàng)打開。

興在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)行對等操作時(shí),它們之間的操作符之前、之后或者前后

要加空格;進(jìn)行非對等操作時(shí),如果是關(guān)系密切的立即操作符(如.),后不應(yīng)加空格。

說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。

由于留空格所產(chǎn)生的清晰性是相對的,所以,在已經(jīng)非常清晰的語句中沒有必要再留空格,如

果語句已足夠清晰則括號內(nèi)側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,

因?yàn)樵贘ava語言中括號已經(jīng)是最清晰的標(biāo)志了。

在長語句I中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作

符留空格時(shí)不要連續(xù)留兩個(gè)以上空格。

示例:

(1)逗號、分號只在后面加空格。

inta,b,c;

比較操作符,賦值糅作符“=”、"+=",算術(shù)操作符"+"、邏輯操作符“&&"、"&",位域操作符”《"、

"人”等雙目操作符的前后加空格。

if(current_time>=MAX_TIME_VALUE)

d=b+c;

a*=2;

a-bA2;

⑵(地址運(yùn)算符)等單目操作符前后不加空格。

flag=lisEmpty;//非操作”!”與內(nèi)容之間

i++;//”++“,“一”與內(nèi)容之間

(3)前后不加空格。

p.id=pid;//前后不加空格

if、for、while,switch等與后面的括號間附加空格,使if等關(guān)鍵字更為突出、明顯。

if(a>=b&&c>d:

6.2.建議

類屬性和類方法不要交叉放置,不同存取范I制的屬性或者方法也盡量不要交叉放置。

格式:

類定義

(

類的公有屬性定義

類的保護(hù)屬性定義

類的私有屬性定義

類的公有方法定義

類的保護(hù)方法定義

類的私有方法定義

}

7.注釋規(guī)范

7.1.規(guī)則

?般情況下,源程序有效注釋量必須在30%以上。

說明:注釋的原則是有助于對程序的閱讀理解,在該加的地方都加了,注釋不宜太多也不能太

少,注釋語言必須準(zhǔn)確、易懂、簡潔??梢杂米⑨尳y(tǒng)計(jì)工具來統(tǒng)計(jì)。

包的注釋:包的注釋寫入一名為package.html的HTML格式說明文件放入當(dāng)前路徑。

說明:方便JavaDoc收集

示例:

com/huawei/msg/relay/comm/package.html

包的注釋內(nèi)容:簡述本包的作用、詳細(xì)描述本包的內(nèi)容、產(chǎn)品模塊名稱和版本、公司版權(quán)。

說明:在詳細(xì)描述中應(yīng)該說明這個(gè)包的作用以及在整人項(xiàng)目中的位置。

格式:

<html>

<body>

<p>一句話簡述。

<p>詳細(xì)描述。

<P>產(chǎn)品模塊名稱和版本

<br>公司版權(quán)信息

</body>

</html>

示例:

<html>

<body>

<P>為Relay提供通信類,上層業(yè)務(wù)使用本包的通信類與SP進(jìn)行通信。

<p>詳細(xì)描述。0004000

<p>MMSCV100R002Relay

<br>(C)版權(quán)所有2002-2007文思創(chuàng)新技術(shù)有限公司

</body>

</html>

文件注釋:文件注釋寫入文件頭部,包名之前的位置。

說明:注意以/*開始避免被JavaDoc收集

示例:

/*

*注群內(nèi)容

packagecom.huawei.msg.relay.comm;

文件注釋內(nèi)容:版權(quán)說明、描述信息、生成R期、修改歷史。

說明:文件名可選。

格式:

/*

*文件名:[文件名]

*版權(quán):〈版權(quán))

*描述:〈描述)

*修改人:〈修改人)

*修改時(shí)間:YYYY-MM-DD

*修改單號:〈修改單號〉

*修改內(nèi)容:〈修改內(nèi)容〉

說明:每次修改后在文件頭部寫明修改信息,Checkin的時(shí)候可以直接把藍(lán)色字體信息粘貼到

VSS的注釋上。在代碼受控之前可以免去。

示例:

/*

*文件名:LogManager.java

.版權(quán):Copyrigh.2002-200.Huawe.Tech.Co.Ltd.Al.Right.Reserved.

*描述:MMSCV1D0R002Relay通用日志系統(tǒng)

*修改人:張三

*修改時(shí)間:2001-02-16

*修改內(nèi)容:新增

*修改人:李四

*修改時(shí)間:2001-02-26

*修改單號:WSS368

*修改內(nèi)容:。。。。。。

*修改人:王五

*修改時(shí)間:2001-03-25

*修改單號:WSS498

*修改內(nèi)容:。。。。。。

類和接口的注釋:該注釋放在package關(guān)鍵字之后,class或者interface關(guān)鍵字之前。

說明:方便JavaDoc收集。

示例:

packagecom.huawei.msg.relay.comm;

*注釋內(nèi)容

*/

publicclassCommManager

類和接口的注釋內(nèi)容:類的注釋主要是一句話功能簡述、功能詳細(xì)描述。

說明:可根據(jù)需要列出:版本號、生成日期、作者、內(nèi)容、功能、與其它類的關(guān)系等。如果

一個(gè)類存在Bug,請如實(shí)說明這些Bug。

格式:

/**

*〈一句話功能簡述)

*〈功能詳細(xì)描述〉

*?author[作者]

*^version[版本號,YYYY-MM-DD]

*@see[相關(guān)類/方法]

*@since[產(chǎn)品/模塊版本]

*^deprecated

*/

說明:描述部分說明該類或者接口的功能、作用、使月方法和注意事項(xiàng),每次修改后增加作者

和更新版本號和日期,@since表示從那個(gè)版本開始就有這個(gè)類或者接口,?deprecated表示不建議

使用該類或者接口。

示例:

/**

*LogManager類集中控制對日志讀寫的操作。

*全部為靜態(tài)變量和靜態(tài)方法,對外提供統(tǒng)一接口。分配對應(yīng)日志類型的讀寫器,

*讀取或?qū)懭敕蠗l件的日志紀(jì)錄。

*?author張三,李四,王五

*@version1.2,2001-03-25

*@seeLoglteraotor

*@seeBasicLog

*@sinceCommonLogl.0

類屬性、公有和保護(hù)方法注釋:寫在類屬性、公有和保護(hù)方法上面。

示例:

//★

*注釋內(nèi)容

*/

privateStringlogType;

*注釋內(nèi)容

*/

publicvoidwrite()

成員變最注釋內(nèi)容:成員變軟的意義、目的、功能,可能被用到的地方。

公自和保護(hù)方法注釋內(nèi)容:列出方法的一句話功能簡述、功能詳細(xì)描述、輸入?yún)?shù)、輸出參

數(shù)、返回值、違例等。

格式:

/★★

*〈一句話功能簡述,

*〈功能詳細(xì)描述〉

*@param[參數(shù)1][參數(shù)1說明]

*@param[參數(shù)2][參數(shù)2說明]

*^return[返回類型說明]

*@exception/throws[違例類型][違例說明]

*@see[類、類#方法、類#成員]

*^deprecated

*/

說明:@since表示從那個(gè)版本開始就有這個(gè)方法:?exception或throws列出可能仍1出的異

常:@dcprccatcd表示不建議使用該方法。

示例:

*根據(jù)日志類型和時(shí)間讀取日志。

*分配對應(yīng)日志類型的LogReader,指定類型、查詢時(shí)間段、條件和反復(fù)器緩沖數(shù),

*讀取日志記錄。查詢條件為null或0表示無限制,反復(fù)器緩沖數(shù)為0讀不到日志。

*查詢時(shí)間為左包含原則,即[startTime,endTime)。

*@paramlogTypeName日志類型名(在配置文件中定義的)

*PparamstartTime杳詢?nèi)罩镜拈_始時(shí)間

*@paramendTime查詢?nèi)罩镜慕Y(jié)束時(shí)間

*@paramlogLevel查詢?nèi)罩镜募墑e

*@paramuserName查詢該用戶的日志

*@parambufferNum日志反復(fù)器緩沖記錄數(shù)

?return結(jié)果集,日志反復(fù)器

@sinceCommonLogl.0

*/

publicstaticLogiteratorread(StringlogType,DatestartTime,DateendTime,

intlogLevel,StringuserName,intbufferNum)

對于方法內(nèi)部用throw語句拋出的異常,必須在方法的注釋中標(biāo)明,對于所調(diào)用的其他方法所拋

出的異常,選擇主要的在注釋中說明。對于非RimtimeExcepHon、即throws子句聲明會拋出的異常,

必須在方法的注釋中標(biāo)明。

說明:異常注釋用?exception或@throws表示,在JavaDoc中兩者等價(jià),但推薦用?exception標(biāo)

注Runlime異常,@〔hrows標(biāo)注非Runlime異常。異常的注釋必須說明該異常的含義及什么條件下拋

出該異常。

*注釋應(yīng)與其描述的代碼相近,對代碼的注釋應(yīng)放在其上方或右方(對單條語句的注釋)相鄰

位置,不可放在下面,如放于上方則需與其.L:面的代碼用空行隔開。

7.1.1.*注釋與所描述內(nèi)容進(jìn)行同樣的縮排。

說明:可使程序排版整齊,并方便注釋的閱讀與理解.

示例:如下例子,排版不整齊,閱讀稍感不方便。

publicvoidexample()

(

//注釋

CodeBlockOne

//注釋

CodeBlockTwo

}

應(yīng)改為如下布局。

publicvoidexample()

(

//注釋

CodeBlockOne

//注釋

CodeBlockTwo

)

7.1.2.*將注釋與其上面的代碼用空行隔開。

示例:如下例子,顯得代碼過于緊湊。

//注釋

programcodeone

//注釋

programcodetwo

應(yīng)如下書寫:

//注釋

programcodeone

//注釋

programcodetwo

7.1.3.*對變量的定義和分支語句(條件分支、循環(huán)語句等)必須編寫注釋。

說明:這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)犍,對于維護(hù)人員來說,良好的注料格助更

好的理解程序,有時(shí)甚至優(yōu)于看設(shè)計(jì)文檔。

*對于$wiich語句下的case語句,如果因?yàn)樘厥馇闆r需要處理完一個(gè)case后進(jìn)入下一個(gè)case處理,

必須在該case語句處理完、下一個(gè)case語句前加上明確的注釋。

說明:這樣比較清楚程序編寫者的意圖,有效防止無故遺漏break語句。

*邊寫代碼邊注群、修改代碼同時(shí)修改相應(yīng)的注椎,以保證注釋與代碼的一致性。不再有用的

注釋要?jiǎng)h除。

云注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。

說明:錯(cuò)誤的注釋不但無益反而有害。

我避免在注釋中使用縮寫,特別是不常用縮寫。

說明:在使用縮寫時(shí)或之前,應(yīng)對縮寫進(jìn)行必要的說明。

7.2.建議

7.2.1.*避免在一行代碼或表達(dá)式的中間插入注釋。

說明:除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋,否則容易使代碼可理解性變差。

*通過對函數(shù)或過程、變審、結(jié)構(gòu)等正確的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注

釋的。

說明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。

落在代碼的功能、意圖層次上進(jìn)行注糕,提供有用、額外的信息。

說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,格助讀者理解代碼,防止沒必

要的重曳注釋信息。

示例:如下注釋意義不大.

//如果receiveFlag為真

if(receiveFlag)

而如下的注釋則給出了額外有用的信息。

//如果從連結(jié)收到消息

if(receiveFlag)

*在程序塊的結(jié)束行右方加注釋標(biāo)記,以表明某程序塊的結(jié)束。

說明:當(dāng)代舒段較長,特別是多垂嵌套時(shí),這樣做可以使代碼更消晰,更便于閱讀。

示例:參見如下例子。

if(…)

(

programcodel

while(index<MAX_INDEX)

(

programcode2

}//endofwhile(index<MAX_INDEX)//指明該條while語句結(jié)束

}//endofifi...)//指明是哪條if語句結(jié)束

*注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除

非能用非常流利準(zhǔn)確的英文表達(dá)。

說明:注釋語言不統(tǒng)一,影響程序易讀件和外觀排版,出干維護(hù)的考慮,建議使用中文.

7.2.2.方法內(nèi)的單行注釋使用〃。

說明:調(diào)試程序的時(shí)候可以方便的使用產(chǎn)°。??⑨尩粢婚L段程序。

注釋盡量使用中文注群和中文標(biāo)點(diǎn)。方法和類描述的第?句話盡量使用簡潔明了的話概括一

下功能,然后加以句號。接下來的部分可以詳細(xì)描述。

說明:JavaDocJL具收集簡介的時(shí)候使用選取第一句話。

順序?qū)崿F(xiàn)流程的說明使用123.4在每個(gè)實(shí)現(xiàn)步驟部分的代碼前面進(jìn)行注釋。

示例:如下是對設(shè)置屬性的流程注釋

//I.判斷輸入?yún)?shù)是否有效。

OOOOO

//2.設(shè)置本地變量。

7.2.3.一些復(fù)雜的代碼需要說明。

示例:這里主要是對閏年算法的說明。

.//I.如果能被4整除,是閏年;

8..〃2.如果能被100整除,不是閏年.;

9.?〃3.如果能被400整除,是閏年.。

10.命名規(guī)范

10.1.規(guī)則

包名采用域后綴倒置的加上自定義的包名,采用小寫字母。在部門內(nèi)部應(yīng)該規(guī)劃好包名的范

圍,防止產(chǎn)生沖突。部門內(nèi)部產(chǎn)品使用部門的名稱加上模塊名稱。產(chǎn)品線的產(chǎn)品使用產(chǎn)品的名稱

加上模塊的名稱。

格式:

com.huawei.產(chǎn)品名.模塊名稱

com.huawei.部門名稱.項(xiàng)目名稱

示例:

Relay模塊包名con.huawei.msg.relay

通用日志模塊包名com.huawei.msg.log

類名和接口使用類意義完整的英文描述,每個(gè)英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。

示例:OrderinformationyCustomerList^Lo^Manager,LogConfig

方法名使用類意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余

字母小寫的大小寫混合法。

示例:

privatevoidcalculateRate();

publicvoidaddNewOrder();

方法中,存取屬性的方法采用setter和getter方法,動作方法采用動詞和動賓結(jié)構(gòu)。

格式:

get+非布爾屬性名[)

is+布爾屬性名()

set+屬性名0

動詞()

動詞+賓語()

示例:

publicStringgetType();

publicbooleanisFinished();

publicvoidsetVisible(boolean);

publicvoidshowi);

publicvoidaddKeyListener(Listener);

屬性名使用意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余字

母小寫的大小寫混合法。屬性名不能與方法名相同。

示例:

privatecustomerName;

privateorderNumber;

privatesmpSession;

常量名使用全人寫的英文描述,英文單詞之間用卜.劃線分隔開,并且使用aUskilic修飾。

示例:

publicfinalstaticintMAX_VALUE=1000;

publicfinalstaticStringDEFAULT_START_DATE="2001-12-08”;

屬性名可以和公有方法參數(shù)相同,不能和局部變量相同,引用非靜態(tài)成員變量時(shí)使用this引用、

引用靜態(tài)成員變量時(shí)使用類名引用。

示例:

publicclassPerson

(

privateStringname;

privatestaticListproperties;

publicvoidsetName(Stringname)

(

=name;

}

publicvoidsetProperties(Listproperties)

(

Pperties=properties;

)

}

10.2.建議

1()21.常用組件類的命名以組件名加上組件類型名結(jié)尾。

示例:

Application類型的,命名以App結(jié)尾MainApp

Frame類型的,命名以Frame結(jié)尾TopoFrane

Panel類型的,建議令■名以Panel結(jié)尾CreateCircuitPanel

Bean類型的,建議命名以Bean結(jié)尾DataAccessBean

EJB類型的,建議命名以EJB結(jié)尾——DBProxyEJB

Applet類型的,建議命名以Applet結(jié)尾--PictureShowApplet

如果函數(shù)名超過15個(gè)字母,可采用以去掉元音字母的方法或者以行業(yè)內(nèi)約定俗成的縮寫方式縮寫函數(shù)名。

示例:getCustomerl"formation。改為getCustomerJnJo()

準(zhǔn)確地確定成員函數(shù)的存取控制符號,不是必須使用public屬性的,請使用protected,不是必須使用

protected/請使用private.

示例:protectedvoidsetUserName(),privatevoidcalculateRate()

含有集合意義的屬性命名,盡量包含其復(fù)數(shù)的意義。

示例:customers,orderUems

11.編碼規(guī)范

11.1.規(guī)則

長明確方法功能,精確(而不是近似)地實(shí)現(xiàn)方法設(shè)計(jì)。?個(gè)函數(shù)僅完成?件功能,即使簡單

功能也應(yīng)該編寫方法實(shí)現(xiàn)。

說明:雖然為僅用一兩行就可完成的功能去編方法好象沒有必要,但用方法可使功能明確化,

增加程序可讀性,亦可方便維護(hù)、測試。

應(yīng)明確規(guī)定對接口方法參數(shù)的合法性檢查應(yīng)由方法的調(diào)用者負(fù)責(zé)還是由接口方法本身負(fù)責(zé),

缺省是由方法調(diào)用者負(fù)責(zé)。

說明:對于模塊間接口方法的參數(shù)的合法性檢查這一問題,往往有兩個(gè)極端現(xiàn)象,即:要么是

調(diào)用者和被調(diào)用者對參數(shù)均不作合法性檢查,結(jié)果就遺漏了合法性檢查這一必要的處理過程,造成

問題隱患;要么就是調(diào)用者和被調(diào)用者均對參數(shù)進(jìn)行合法性檢查,這種情況雖不會造成問題,但產(chǎn)

生了冗余代碼.降低了效率。

明確類的功能,精確(而非近似)地實(shí)現(xiàn)類的設(shè)計(jì)。一個(gè)類僅實(shí)現(xiàn)?組相近的功能。

說明:劃分類的時(shí)候,應(yīng)該盡量把邏輯處理、數(shù)據(jù)和顯示分離,實(shí)現(xiàn)類功能的單一性,

示例:

數(shù)據(jù)類不能包含數(shù)據(jù)處理的邏輯。

通信類不能包含顯示處理的邏輯。

所有的數(shù)據(jù)類必須重載toSMng。方法、返回該類有意義的內(nèi)容。

說明:父類如果實(shí)現(xiàn)了比較合理的toString(),子類可以繼承不必再重寫。

示例:

publicTopoNode

(

privateStringnodeName;

publicStringtoString()

(

return"NodeName:"+nodeName;

}

}

11.1.1.數(shù)據(jù)庫操作、IO操作等需要使用結(jié)束close。的對象必須在try-catch-finally的finally中

closeQo

示例:

try

)

catch(lOExceptionioe)

(

??//??????

)

finally

(

try

(

out.close();

)

catch(lOExceptionioe)

(

....//

)

)

異常捕獲后,如果不對該異常進(jìn)行處理,則應(yīng)該紀(jì)錄日志或者ex.primStackTraceO。

說明:若有特殊原因必須用注釋加以說明。

示例:

try

(

)

catch(lOExceptionioe)

(

ioe.printStackTrace();

}

11.1.2.自己拋出的異常必須要填寫詳細(xì)的描述信息。

說明:便于問題定位。

示例:

thrownewlOException("Writingdataerror!Data:"+data.toString());

運(yùn)行期異常使用RimUmeExcepiion的子類來表示,不用在可能拋出異常的方法聲明/throws

子句。非運(yùn)行期異常是從Excepiion繼承而來,必須在方法聲明上加throws子句。

說明:

非運(yùn)行期異常是由外界運(yùn)行環(huán)境決定異常拋出條件的異常,例如文件操作,可能受權(quán)限、磁盤

空間大小的影響而失敗,這種異常是程序本身無法避免的,需要調(diào)用者明確考慮該異常出現(xiàn)時(shí)該如

何處理方法,因此非運(yùn)行期異常必須有throws子句標(biāo)此不標(biāo)出或者調(diào)用者不捕獲該類型異常都會

導(dǎo)致編譯失敗,從而防止程序員本身疏忽。

運(yùn)行期異常是程序在運(yùn)行過程中本身考慮不周導(dǎo)致的異常,例如傳入錯(cuò)誤的參數(shù)等。拋出運(yùn)

行期異常的目的是防止異常擴(kuò)散,導(dǎo)致定位困難。因此在做異常體系設(shè)計(jì)時(shí)要根據(jù)錯(cuò)誤的性質(zhì)合

理選擇自定義異常的繼承關(guān)系。

還有一種異常是Error繼承而來的,這種異常由虛擬機(jī)自己維護(hù),表示發(fā)生了致命錯(cuò)誤,程序無

法繼續(xù)運(yùn)行例如內(nèi)存不足。我們自己的程序不應(yīng)該捕獲這種異常,并且也不應(yīng)該創(chuàng)建該種類型的

異常。

在程序中使用異常處理還是使用錯(cuò)誤返回碼處理,根據(jù)是否有利于程序結(jié)構(gòu)來確定,并且異常

和錯(cuò)誤碼不應(yīng)該混合使用,推薦使用異常。

說明:

一個(gè)系統(tǒng)或者模塊應(yīng)該統(tǒng)一規(guī)劃異常類型和返回碼的含義。

但是不能用異常來做般流程處理的方式.不要過多地使用異常.異常的處理效率比條件分支

低,而且異常的跳轉(zhuǎn)流程難以預(yù)測。

卷注意運(yùn)算符的優(yōu)先級,并用括號明確表達(dá)式的操作順序、避免使用默認(rèn)優(yōu)先級。

說明:防止閱讀程序時(shí)產(chǎn)生誤解,防止因默認(rèn)的優(yōu)先級與設(shè)計(jì)思想不符而導(dǎo)致程序出錯(cuò)。

示例:

下列語句中的表達(dá)式

word=(high<<8)|low(1)

if((a|b)&&(a&c))(2)

if((aIb)<(c&d))(3)

如果書寫為

high?8|low

a|b&&a&c

aIb<c&d

(1)(2)雖然不會出錯(cuò),但語句不易理解;(3)造成了判斷條件出錯(cuò)。

*避免使用不易理解的數(shù)字,用有意義的標(biāo)識來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)

字,必須用有意義的靜態(tài)變量來代替。

示例:如下的程序可讀性差。

if(state==0)

(

state=1;

/.progra.code

|

應(yīng)改為如下形式:

privatefinalstaticintTRUNK_IDLE=0;

privatefinalstaticintTRUNK_BUSY=1;

privatefinalstaticintTRUNK_UNKNOWN=-1;

if(state==TRUNK_工DLE)

(

state=TRUNK_BUSY;

/.progra.code

)

數(shù)組聲明的時(shí)候使用irtf/index,而不要使用intindex"。

說明:使用iniindex[]格式使程序的可讀性較差

示例:

如下程序可讀性差:

publicintgetlndex()[]

(

)

如卜程序可讀性好:

publicint[]getlndex()

(

)

調(diào)試代碼的時(shí)候,不要使用Sysiem.oiu和Sysiem.ec,進(jìn)行:打印,應(yīng)該使用一個(gè)包含統(tǒng)一開關(guān)的

測試類進(jìn)行統(tǒng)一打印。

說明:代碼發(fā)布的時(shí)候可以統(tǒng)一關(guān)閉調(diào)試代碼,定位問題的時(shí)候又可以打開開關(guān)。

用調(diào)測開關(guān)來切換軟件的DEBUG版和正式版,而不要同時(shí)存在正式版本和DEBUG版本的不同

源文件,以減少維護(hù)的難度。

11.2.建議

記錄異常不耍保存excepliun.gelMessuge。,而耍記錄e入。

示例:NullPointExceplion拋出時(shí)常常描述為空,這樣往往看不出是出了什么錯(cuò)。

11.2.1.一個(gè)方法不應(yīng)拋出太多類型的異常。

說明:如果程序中需要分類處理,則將異常根據(jù)分類組織成繼承關(guān)系。如果確實(shí)有很多異常類

型首先考慮用異常描述來區(qū)別,throws/exception子句標(biāo)明的異常最好不要超過三個(gè)。

異常捕獲盡最不要直接catch(Exceptionex),應(yīng)該把異常細(xì)分處理。

*如果多段代碼重復(fù)做同一件事情、那么在方法的劃分上可能存在問題。

說明:若此段代碼各語句之間有實(shí)質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此段代

碼構(gòu)造成?個(gè)新的方法。

對于創(chuàng)建的主要的類,最好置入maW)函數(shù),包含用于測試那個(gè)類的代碼。

說明:主要類包括:

I、能完成獨(dú)立功能的類,如通訊。

2、具有完整界面的類,如一個(gè)對話框、一個(gè)窗口、一個(gè)幀等。

3.JavaBean類。

示例:

publicstaticvoidmain(String[]arguments)

(

CreateCircuitDialogcircuitDialogl=newCreateCircuitDialog(null,

"Ciruit1*,false);

circuitDialogl.setvisible(true);

}

集合中的數(shù)據(jù)如果不使用了應(yīng)該及時(shí)釋放,尤其是可重復(fù)使用的集合。

說明:由于集合保存了對象的句柄,虛擬機(jī)的垃圾收臬器就不會回收。

1122.*源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。

說明:便于程序閱讀和查找。

示例:矩形的長與寬關(guān)系較密切,放在一起。

rect.length=10;

rect.width=5;

12.*不要使用難懂的技巧性很高的語句,除非很有必要時(shí),

13.說明:高技巧語句不等于高效率的程序,實(shí)際上程序的效率關(guān)鍵在于算法。

14.JTEST規(guī)范

14.1.規(guī)則

1.在switch中每個(gè)case語句都應(yīng)該包含break或者return。

2.不要使用空的for、if、while語句。

3.在運(yùn)算中不要減小數(shù)據(jù)的精度。

4.switch語句中的ease關(guān)鍵字要和后面的常量保持一個(gè)空格,switch語句中不要定義case之

外的無用標(biāo)簽。

5.不要在if語句中使用等號二進(jìn)行賦值操作。

6.靜態(tài)成員或者方法使用類名訪問,不使用句柄訪問。

7.方法重載的時(shí)候,一定要注意方法名相同,避免類中使用兩個(gè)非常相似的方法名。

8.不要在ComponenlLponeniResizedO方法中調(diào)用serResize()方法。

9.不要覆蓋父類的靜態(tài)方法和私有方法。

10.不要覆蓋父類的屬性。

11.不要使用兩級以上的內(nèi)部類。

12.把內(nèi)部類定義成私有類。

13.去掉接口中多余的定義(不使用public,abstract,static,final等,這是接口中默認(rèn)的)。

14.不要定義不會被用到的局部變量、類私有屬性、類私有方法和方法參數(shù).

15.顯式初始化所有的靜態(tài)屬性。

16.不要使用System.getenv()方法。

17.不要硬編碼和'W作為換行符號.

18.不要直接使用java.awt.peer.*里面的接口。

19.使用System.arraycopyO,不使用循環(huán)來復(fù)制數(shù)組。

20.避免不必要的instanceof比較運(yùn)算和類造型運(yùn)算。

21.不要在finalize。方法中刪除監(jiān)聽器(Listeners),>

22.在finalize()方法中一定要調(diào)用super.finalize()方法。

23.在finalizc()方法中的finally中調(diào)用super.finalize。方法。

24.進(jìn)行字符轉(zhuǎn)換的時(shí)候應(yīng)該盡可能的較少臨時(shí)變量。

25.使用ObjectSlream的方法后,調(diào)用reset。,釋

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論