版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026新疆阿克蘇地區(qū)拜城縣產(chǎn)業(yè)園區(qū)國企招聘考試備考試題及答案解析
- 中國標(biāo)準(zhǔn)化研究院質(zhì)量研究分院信用標(biāo)準(zhǔn)化研究崗企業(yè)編制職工招聘2人考試參考試題及答案解析
- 2026湖南張家界市永定區(qū)民政局招聘公益性崗位工作人員5人考試備考試題及答案解析
- 2026四川成都市現(xiàn)代種業(yè)發(fā)展集團(tuán)成都農(nóng)業(yè)開發(fā)有限公司社會化招聘5人考試參考試題及答案解析
- 2026四川綿陽虹源科技發(fā)展有限責(zé)任公司招聘品保部長崗位1人考試備考題庫及答案解析
- 2026內(nèi)蒙古包頭市昆都侖區(qū)招聘社區(qū)工作者后備庫儲備人員200人筆試備考試題及答案解析
- 2026山東第一醫(yī)科大學(xué)附屬皮膚病醫(yī)院招聘博士研究生工作人員3人考試備考試題及答案解析
- 2026湖南興湘科技創(chuàng)新有限公司招聘1人筆試備考題庫及答案解析
- 2026年哈密職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試模擬試題帶答案解析
- 2026年杭州師范大學(xué)招聘65人備考題庫(冬季)及1套完整答案詳解
- cobas-h-232心肌標(biāo)志物床邊檢測儀操作培訓(xùn)
- 第六講通量觀測方法與原理
- 海水淡化PX能量回收裝置維護(hù)說明書
- 林規(guī)發(fā)防護(hù)林造林工程投資估算指標(biāo)
- 婦產(chǎn)科學(xué)(第9版)第二章女性生殖系統(tǒng)解剖
- GB/T 23821-2022機(jī)械安全防止上下肢觸及危險(xiǎn)區(qū)的安全距離
- 中醫(yī)經(jīng)絡(luò)之-特定穴課件
- GB/T 9122-2000翻邊環(huán)板式松套鋼制管法蘭
- GB/T 5563-2013橡膠和塑料軟管及軟管組合件靜液壓試驗(yàn)方法
- GB/T 4963-2007聲學(xué)標(biāo)準(zhǔn)等響度級曲線
- 金融支付清算系統(tǒng)術(shù)語大全(中英文對照)
評論
0/150
提交評論