Java代碼編寫規(guī)范_第1頁
Java代碼編寫規(guī)范_第2頁
Java代碼編寫規(guī)范_第3頁
Java代碼編寫規(guī)范_第4頁
Java代碼編寫規(guī)范_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、系統(tǒng)Java代碼編寫規(guī)范內部編號:(YUUTTBBYMMUTURRUYUOOYDBUYI0128)JAVA編碼規(guī)范南京朗坤軟件有限公司2004年 南京朗坤自動化有限公司 版權所有 機密文檔,未經授權,不得外傳文檔類型:作者:日期:版本:客戶:發(fā)布人員:文檔審核:文檔批準:編碼規(guī)范技術平臺小組南京朗坤軟件有限公司南京市江寧區(qū)銅山金銅路2號211156電話:+86 25傳真:+86 25Web:2004 年8月31日年月日年月日年月日修正記錄版本日期作者修改描述2004-8-31技術平臺小組初稿1概述1.1背景程序的編碼是一個創(chuàng)造性極強的工作,雖然要奇思妙想,但也必須要遵守一 定的規(guī)則和限制,編碼

2、風格的重要性對大型軟件項目開發(fā)來說是不言而喻的。Liems3產品開發(fā)基于Java語言J2EE技術路線,為了規(guī)范Java編碼、提高編 碼質量、增強代碼的可讀性和可維護性特制定本規(guī)范。開發(fā)工程師在開發(fā)過程中必須遵守本規(guī)范,規(guī)范是代碼編寫及代碼驗收等管 理環(huán)節(jié)中必須執(zhí)行的標準。1.2讀者對象本手冊的讀者對象為Java開發(fā)工程師和測試工程師。1.3商討對規(guī)范如有疑問請及時和技術平臺小組聯(lián)系。LUCULENT2基本原則以下是開發(fā)過程中必須遵循的基本原則,可能缺乏操作性,卻是后續(xù)規(guī)范的概括和總結。對暫未能列入本編碼規(guī)范的問題,作一般性要求。2.1 一開始就必須正確的使用規(guī)范為保證整個產品編碼風格的一致性,

3、要求在產品的第一個模塊開始,必須嚴 格使用本規(guī)范開始編碼。2.2簡易性原則代碼的編寫力求簡易性,構建類和方法力求簡單,提高代碼的可讀性和可維 護性。2.3清晰性原則確保每一個類、接口、方法、變量和對象都有清楚的功能,并解釋在何時、 何地使用。設計人員應確保此原則的貫徹執(zhí)行。2.4健壯性原則程序要健壯,要為錯誤和異常提供可預見的處理,不能隱藏錯誤和異常。2.5效率原則編碼要兼顧程序運行期效率。3格式規(guī)范3.1代碼縮進所有的語句塊內部需要縮進,語句塊通常被包圍,它包括但不僅包括類定義, 函數(shù)定義,條件分支,循環(huán)體采用兩個空格來進行代碼縮進,增強可讀性,不要使用太多的空格。class MyClass

4、 .void function(int arg) . if (arg 0)for (int index 二 0: index (x / length) : x;空白行使用在下列情況下:對于負號的情況,如果之后為長表達式,按二元操作符的要求補空格,如int a = -3(沒有空格)int a = - a + 3(補一個空格)方法實現(xiàn)中的每一個邏輯塊:void handleMessage(Message message) Datalnput content =();Int messageType =();Switch (messageType) case WARNING:處理.break;case

5、 ERROR:.處理.break;defauIt:處理.break;類和接口的成員定義public class Foo /*定義一個內部類*/class InnerFoo /*成員Bar.*/private Bar bar;/*用指定的Bar構建一個Foo /*/Foo (Bar bar) 源代碼文件中每個類和接口的定義/ *文件描述./*.接口描述*/interface FooInterface *.類描述*/public class Foo implements Foolnterface 3.4不允許使用TAB使用TAB鍵來進行源代碼的縮進和排列可能對環(huán)境的依賴很強,在原始開發(fā) 環(huán)境中顯示

6、正常格式的代碼,轉換到不能很好的支持TAB鍵的環(huán)境中時,代碼將失 去原有的格式。如TAB = 8 space 的效果:private final int EXAMPLE_1= 2:private final int EXAMPLE_TAB_LONG_NAME= 4;而在TAB = 4 space的效果private final int EXAMPLE_1= 2;private final int EXAMPLE_TAB_LONG_NAME = 4;原本的對齊效果失去了意義提示:Jbuilder X中支持將Tab轉換為固定空格,因此可以認為在JBuilder 中TAB與空格等價,因此可以使用。3

7、.5 SQL語句書寫規(guī)范3.5.1.1 SELECT語句書寫規(guī)則分為兩種情況:關鍵字用大寫,一目 了然,如:SELECT count (*) as counter FROMctrmas, select語句的選擇字段需要詳細,原則上不鼓勵使用select * from, 而應該書寫具體的字段名,以免表結構變更帶來兼容性問題。對于簡單的Select語句可以使用一個變量來寫完:strSql = select count(*) as counter from ctrmas;對于復雜的select語句使用連個變量完成一條語句,要求每個字段、每個where中的條件作為一行方便閱讀,在每行的前面加一個空格。

8、同時要求每行的字段對齊,SQL關鍵字對齊。例1:strFrom = select distinct, + +from asgmas, outer empmas “;不允許下面的寫法,上面的語句能被編譯器優(yōu)化為常量字符串,下面的語句會被處理成4條語句,要構造3次StringBufferostrFrom =“;strFrom 二 strFrom + select distinct,;strFrom 二 strFrom +“;strFrom 二 strFrom +from asgmas, outer empmas例2:strWhere 二where二 + mstrPKey +andisnot nul

9、l +and= +orderbyshtnanT;或用下面寫法strWhere 二strWhere 二 strWhere+” where=+ mstrPKey -/ 9strWhere 二 strWhere+andis not null “;strWhere 二 strWhere+andVstrWhere 二 strWhere+” order bysht;3)strSQL 二 strFrom + strWhere:3.5.1.2 insert語句書寫規(guī)則insert語句的編寫規(guī)則,必須列出所有要插入的字段。每個字段的值占用一 行,方便閱讀與檢查。strSQL 二insert into rtama

10、s +,z (rtanum, avltyp, effdat, expdat, begtim, endtim, enttyp,planed, crewno, skilcd, empnum, unvcod, shtnam, qtyval, lstusr, lstdtm, fstusr, fstdtm) +values (“+mlngSeqnum +、 +mstrAvltyp +FormatDBDate(mdtmDatefr) + +FormatDBDate(mdtmDateto) + J +Format(mdtmTimefhh:mni:ss) + 八 J +Format (mcltmTimeto,

11、 hh:mni: ss) +八、+ EW J ” +mstrPlancd+, /zmstrCrewno+, ,mstrSkilcd+, /zmstrEmpnum+,zmstrUnvcod+,zTrim(ReplaceChar(mstrDescription, ) +WB, +FormatDBDateTime (Now) +,WB ”+FormatDBDateTime(Now) +;也可以每行分開寫,如:strSQL = ”;strSQL 二 strSQL + insert into rtamas ;endtim,1stusr,strSQL 二 strSQL + (rtanum, avltyp,

12、 effdat, expdat, begtim, enttyp, planed, crewno, skilcd, empnum, unvcod, shtnam, qtyval, lstdtm, fstusr, fstdtm)strSQL 二 strSQL + values (;strSQL =strSQL+mlngSeqnum+,.strSQL =strSQL+mstrAvltyp+,, strSQL =strSQL+FormatDBDate(mdtmDatefr) +、strSQL =strSQL+FormatDBDate(mdtmDateto) +strSQL =strSQL+Format

13、 (mdtmTimefr, hh:mni: ss) +strSQL =strSQL4-Format (mcltmTimeto, hh:mni: ss) +strSQL =strSQL+strSQL =strSQL+mstrPlancd+,strSQL =strSQL+mstrCrewno+,, strSQL =strSQL+mstrSkiled+,strSQL =strSQL+mstrEmpnum+9strSQL =strSQL+mstrUnvcod+,strSQL =strSQL4-Trim(ReplaceChar(mstrDescription,strSQLstrSQLstrSQLstrS

14、QLstrSQLstrSQLFormatDBDateTime(Now) +, ”strSQLstrSQLstrSQLstrSQLFormatDBDateTime(Now) +;3.5.1. 3update語句的編寫規(guī)則與insert語句相似,對于一行必須只能給一個字段的賦値。但是當where條 件復雜時可以用單獨的變量來處理,同樣也可以采用分行寫的方法。+ mstrAvltyp +strSQL 二update rtamas set avltyp 二effdat 二+ FormatDBDate(mdtmDatefr) +expdat 二,+FormatDBDate(mdtmDateto) +,

15、+begtim =,+Format (mcltmTimefr,1 1 . , hh:mm:ss 丿 +,+endtim =+Format(mdtmTimeto,1 1 , , hh:mm:ss )+,+“planed = +mstrPlancd + , crewno =+mstrCrewno +、+skilcd =+mstrSkilcd + , empnum 二+ms tr Empnum +八、+i,unvcod =+mstrUnvcod + 八,+shtnam =+mstrDescription +,zlstusr = WBy+lstdtm = +FormatDBDateTime(Now)

16、+z,where rtanum 二 + mlngSeqnum;,+3.5.1.4 delete語句的編寫規(guī)則。與select語句相似。當where條件復雜時可以用單獨的變量來處理。每個條件占用一行??梢圆捎梅中袑懙姆椒ātrSQL 二delete from rtamas +z,where rtanum =+ mlngSeqnum +and planed =+ mstrPlancd + 八,+andcrewno =+ mstrCrewno +4命名規(guī)范4.1使用有意義的命名在命名一個類、變量、方法或常量時,使用有意義的命名,可提高程序的可 讀性,避免使用單個字符或通用名字來定義類、變量、方法或

17、常量。下面例中的變量“a”和常量“65”的意義就不清楚。if (a 65) public Msg appndSgntr(Msg msg, String sgntr) 如果需要移出元音來簡化長命名,那么就應該考慮初始的命名是不是適當 的。4.2縮寫后的首字母大寫對于那些以單詞作為分割的命名,這條規(guī)則可以幫助我們排除混淆。setDSToffsetsetDstOffsetloadXMLDocumentloadXmlDocument但不要在以下的處理中使用這個規(guī)則:對于那些只包含大寫字母的常量(常量的命名規(guī)則參見)static final String XML_DOCUMENT = text/XML”

18、方法、變量、參數(shù)命名時,首單詞的縮寫用小寫(參見)private Document xmlDocument4.3不要用字符的大小寫來區(qū)分命名JAVA編譯器能夠通過大小寫來區(qū)分只存在大小寫差異的兩個不同命名。但對 于閱讀代碼的人來說,在讀取的時候就容易造成混淆。例如:在同一個代碼范圍內,存在兩個變量theSQLInputStream和 theSqllnputStream,這樣的代碼就會給閱讀的人帶來很大的不便。4.4包命名4.4.1包命名使用公司顛倒的Internet域名作為包的根限定。例如定義一個包為server, 那么這個包的命名為提示:在命名的過程中,不要使用java和javax來命名包。

19、 4.4.2使用單一的、小寫單詞來命名每一個包包在命名時,采用有含義的單個小寫單詞,例如:和4.5類命名4.5.1類或接口的每個單詞的首字母大寫類或接口的每個單詞的首字母大寫。在每個命名中使用首字母大寫來區(qū)分每 個單詞,用這種方式來區(qū)分類或接口與變量的命名(變量的命名規(guī)則參見 public class PrintStreamextends FilterOutputStream public interface ActionListenerextends EventListener 4.5.2使用名詞來命名類類用來定義對象或相關的事物,故而使用名詞標識符來命名類。class CustomerAc

20、count public abstract class KeyAdapter implements KeyListener 4.5.3 一組有關系的屬性、靜態(tài)服務或常量的類命名采用復數(shù)使用類來命名的一組有關系的屬性、靜態(tài)服務或變量,使用復數(shù)來進行類的命名O/* The LineMetrics class giveaccess to the metrics needed to layoutcharacters along a line ant to layout ofset of lines*/public class LineMetries public LineMetrics()public

21、 abstract int getNumChars();public abstract float getAscent():public abstract float getDescent();public abstract float getLeading();public abstract float getHeight();* The Beans class provides somegeneral purpose beans control methods*/public class Beans :publicstaticObject instantiate () ;publicsta

22、ticObject getlnstanceOf ();publicstaticboolean isInstanceOf () ;publicstaticbooleani sDesignTime () ;publicstaticboolean isGuiAvailable() ;publicstaticvoid setDesignTime () ;publicstaticvoid setGuiAvailable() ;public interface Runable public void run();*The Types class defines constants*that are use

23、d to identify SQL types*/publicfinalstaticintTINYINT = -6;publicfinalstaticintSMALLINT = 5;publicfinalstaticintINTEGER 二 4;publicfinalstaticintBIGINT = -5;publicfinalstaticintFLOAT = 6;publicfinalstaticintREAL = 7;publicfinalstaticintDOUBLE = 8;publicfinalstaticintNUMERIC = 2;publicfinalstaticintDEC

24、IMAL 二 3;publicfinalstaticintCHAR = 1;4.6接口命名4.6.1使用名詞或形容詞來命名接口一個接口用來描述一個提供的服務,或用來描述一個服務提供的功能,故而用名詞或形容詞來描述一個接口。public interface ActionListener lpublic void actionPe:rformed(ActionEvent e);使用形容詞來命名接口的功能和行為,大多數(shù)的接口命名釆用動詞后加“able”或“ible”后綴的形容詞來描述接口的功能:public interface Accessible :public Context getContex

25、t ();4.7方法的命名4.7.1方法的首單詞的首字母小寫,后面的單詞的首字母大寫大寫字母用于分割方法名中使用的單詞,首字母小寫用來區(qū)分方法和構造 器。class MyImage extends Image public Mylmage() public void flush0 public Image getScaledinstance () 4.7.2使用動詞來命名方法方法和操作通常使用動詞來定義其行為:class Accout private int balance:public void withdraw(int amount) deposit (-1 * amount);publi

26、c void deposit(int amount) += amount;4.7.3遵從JavaBeans規(guī)則來命名訪問方法JavaBeans為訪問javaBeans實例的屬性方法建立了一套標準的規(guī)范,那么在 類中命名一個方法時就必須遵從這個規(guī)范,不管是否實現(xiàn)一個beanoJavaBean中定義一個布爾類型的方法的命名時,以“is”開始boolean isValid ()return ;JavaBean提供一個讀取的方法時,命名采用“get”開始String get Name () return ;訪問方法讀取一個索引屬性時,使用” int index”String getAlias(int

27、index) return (index);JavaBean中設定一個布爾或其他類型的屬性時,命名采用“set”開始void setValid (Boolean isVaiid) =isValid;void setName(String name) =name;訪問方法設定一個索引屬性時,使用” int index”和“set”void setAlias(int index, String alias) index = alias;請在JDK中,堅持使用這些規(guī)則,用is/get/set符號來處理Bean的屬性。4.8變量命名4.8.1在變量的命名中,變量的首單詞的首字母小寫,后面的單詞的首字母

28、大寫大寫字母用于分割變量名中使用的單詞,首字母小寫用來區(qū)分變量和類(類 定義規(guī)則參見規(guī)則)class Customer private Address address;private Phone daytimePhone: public Address setAddress(Address address) :Address oldAddress 二;二 address:return oldAddress;public void setDaytimePhone(Phone daytimePhone)4.8.2使用名詞來命名變量變量用來表示一個對象或事物,故而采用名詞來標識變量:class Cu

29、stomer private Address billingAddress:private Address shippingAddress;private Phone daytimePhone:private Vector openOrders;4.8.3集合含義的變量釆用復數(shù)形式進行命名對于代表一個集合的變量或屬性,使用復數(shù)形式來進行命名,這種命名方式可將代表集合值的的變量或屬性與代碼單個值的變量或屬性分離開:Customer customers - newCustomerLMAX_CUSTOMERS:void addCustomer(int index, Customer customer

30、) index 二 customervector orderitems 二 new Vector ():void addOrderltem(OrderItem orderItem) 4. 8. 4建立一套標準的臨時使用的變量規(guī)則應該使用全名來描述大多數(shù)變量,但對于Java代碼中經常使用的且具有相同“簡寫”的變量,使用另外的字母代替,在下表中列出了一些例子:Characterc, d, eCoordinatex, y, zExceptionEGraphicsGObject0Streamin, out, inOutStringS4.9屬性命名4.9.1使用“this”關鍵字限定屬性變量,用于區(qū)分邏

31、輯變量 class Dude private String name: public Dude(String name) =name:public setName(String name) name;4.10參數(shù)命名4.10.1當一個構件器或一個“set”方法通過參數(shù)賦值給一個屬性時,將參數(shù)和屬 性采用同樣的名字來命名使用邏輯變量來隱藏實例變量的名稱,這是一種” P?!憋L格,但這種規(guī)則 也有些有益的地方,使用相同的命名能比使用不同的命名更能讓人意識到其中的 重要性,同時使用相同的命名能讓你準確地了解參數(shù)是賦值給屬性的。class Dude private String name;public

32、Dude(String name) =name;public setName(String name) =name;4.11常量命名在命名常數(shù)時,每一個單詞中的所有字母大寫,單詞之間采用下劃線來進行 分割使用大寫來命名常量。使得他們能夠很好與變量區(qū)分。class Byte publicstaticfinalbyte MAX_VALUEpublicstaticfinalbyte MIN VALUE255;0;publicstaticfinalClass TYPE 二;5注釋規(guī)范5.1保持注釋和代碼同步當修改代碼時,必須同時更新對應的注釋,代碼和文檔同時為一個軟件產 品,故而同樣重要。5.2使用主

33、動語態(tài)并盡量忽略不需要的用詞對于代碼來說,注釋是應該是有力的、清楚的并且是簡明的語言,故在編寫注釋時盡量采用主動語態(tài)并盡量忽略不需要的用詞。5.3注釋類型Java提供三種注釋類型:文檔注釋用“/*”開始,并由” */”結束/*文檔注釋.*/標準的c語言格式注釋,用” /*”開始” */”結束/*標準注釋*/單行或行尾注釋,采用”.每一種注釋類型均有特有的使用場合,合理地使用這三種規(guī)則。5.4版權信息注釋版權信息必須在java文件的開頭。/* Title:主題/p* Description:描述* Copyright: Copyright (c) 2004* Company: luculent*

34、 author:* version*/5.5使用文檔注釋來描述程序接口在代碼中,應該把文檔注釋放在編寫的類、接口、方法、構件器或者是屬性 前,這對于使用javadoc工具來生成對應的HTML格式的文檔很有好處,javadoc 功能只認可在類、接口、構造器、方法或屬性前編寫的文檔,javadoc會忽略在方 法內部的注釋,javadoc只認可語句前的一段注釋,所以不要在語句前使用多個注 釋段。文檔注釋的主要目的是約定客戶端和服務器端之間的連接,一個與方法關聯(lián) 的文檔,應該描述所有的可供調用的的功能,以及返回值,沒有必要闡述具體的 實現(xiàn)細節(jié)。下面實例中,使用文檔注釋一個類中包含內部類、屬性、方法、和

35、構造器:/* The Rectangle2D class describles*a rectangle defined by location (x, y) anddimensions(w, h)*/public abstract class Rectangle2Dextends Rectangu1arShape /* The Double class defines a* rectangle specified in double coordinate*/static class Double extends Rectangle2D /*The bitmask that indicates

36、that a point lies*below this Rectangle2D */static int 0UT_B0TT0M; /*Adds a Rectangle2D to this Rectangle2D*/public void add(Rectangle2D r) /* This is an abstract class that cannot be* instantiated derectly.*/protected Rectangle2D() 5.6使用標準代碼去隱藏代碼而不要刪除它當希望臨時隱藏一段代碼時在編譯時不使用,那么使用C類型的注釋,使用 這種注釋時,要確保在這段注釋

37、里沒有嵌套其它類型的注釋段。下面代碼片斷描述了怎樣使用這種注釋類型來隱藏一個成員函數(shù)的定義:/*.*deprecated*/*我想臨時刪除這個方法,想知道其它包是否在用它。public void thisOldFunction() */5.7使用行注釋來解釋實現(xiàn)細節(jié)在文檔中使用一個或多個行注釋:指出變量或表達式的目的實現(xiàn)層次的實際要求 復雜的運算規(guī)則缺陷修復 優(yōu)化代碼時注釋問題、缺陷以及不足在編寫代碼文檔時,盡量減少需要的嵌套注釋的使用,對于簡單重復出現(xiàn)的 代碼不要使用注釋、注釋中只描寫其有用的信息。double totalCost;./body標簽中的內容作為包的描述。5.7.1對每個應用或

38、一組包提供概要描述信息和總體的功能javadoc工具能夠將一組互不相干的包的總體功能描述生成文檔,使用這個功 能為每一個應用或有關聯(lián)的包提供總體描述。為了創(chuàng)建一個總體的描述,你必須創(chuàng)建一個總體的注釋文件,注釋問題擴展 名為“.html”,例如:。為了在文檔中包括這個文件,必須告訴javadoc I具, 通過-overview選項來設定文件路徑包注釋文件包含HTML,而不包含java源代碼。總體功能信息,應該包含在 HTML文檔的body標簽中,javadoc匸具將HTML文件中的body. . . /body標簽 中的內容作為一個應用或一組包的概要描述。5.8注釋格式5.8.1在所有的文檔注釋

39、中,使用一致的格式和結構一個適當?shù)母袷轿臋n注釋,依據(jù)一個或多個javadoc的標簽來進行描述,每 個一個文檔注釋依據(jù)下面的格式:首行注釋用“/*”,并與其關聯(lián)的源代碼的縮進相同其余行使用開始,并與首行注釋的第一個星號對齊使用單個空格來分割在同一行中每個星號后的描述文檔,或者標簽描述文 檔和標簽之間使用空行使用“*/”做為結束,并與其他行中的對齊* Descriptive text for this entity* tag Descriptive text for this tag*/5.9使用第三人稱代詞當描述類、接口、方法時,使用第三人稱代詞(如” they”和” it”),第三人 稱動詞形

40、式(“sets”和“gets”),不使用第二人稱動詞形式(如“set”和“get” ).下面是API文檔里一些第三人稱動詞形式:adds allocates computes constructs convertsdeallocates destroys gets providesreadsremoves returns sets tests writes5.10使用“this”而不是“the”指向當前類的實例在描述方法的目的或行為時,定義方法用“this”而不是“the”指向類的實例:* Return a String representing the* value of the Flag

41、object*/public St ring toString () /* Return a String representing the* value of this Flag object*/public St ring toString () 5.11不要在方法或構造函數(shù)名后添加“()”,除非做一個特殊的標識方法或構造函數(shù)的參照不要包含括號,除非參照區(qū)分重載的方法或構造函數(shù)并 且希望指向一個重載操作的單個域。不要通過一對圓括號來指出相關方法的名 稱。如果這個名稱和一個重載的方法相關連,而且這個重載的某個方法沒有參數(shù), 就會引起混淆。public class String public

42、String toLowerCase () public String toLowerCase(Locale locale) 如果使用“ toLowerCase() ”標識符去指示一個或所有的toLowerCase方法,那么在讀取文檔時,將會造成混淆,建議使用不帶括號的方式進行處理:toLowerCase用于指示所有的方法toLowerCase ()用于指示上述方法中的方法1toLowerCase (Locale)用于指示上述方法中的方法25.12注釋內容5.12.1為每一個類、接口、屬性和方法提供一個概要描述對于每一個類、接口、屬性和方法,在文檔注釋中,至少需包含其概要信 息。5.12. 2

43、充分描述每個方法提供的操作在每一個方法注釋中,應該對每個參數(shù)、每個檢測異常、可能出現(xiàn)的異常以 及返回值做詳細的描述。5.12. 3解釋和理解你的軟件的使用,最簡單的方法是提供例子。在每個非凡的類和方法的描述中包含一段簡單的例子,并使用. . . 標簽來維護每個例子的格式。* If you are formatting multipie is* more efficient to get the format just once so* the system does not have to fetch the* information about the local language and*

44、 country conventions multiple times:* * Dat eFormat df 二();* for(int i = 0; i ; +i) (myDatetil) + “;”);* * * To format a number for a different Locale,* specify the locale in the call to* getDatelnstance/code* * DateFormat df;* df ;* */public abstract class DateFormat extends Format 5.13以文檔方式記錄已知的缺點

45、和不足該方式不僅可以標識和描述與一個類或方法相關的任何重大問題,而且還可 以表明改進代碼或這些缺點或不足所在的工作區(qū)。如果可能,還可以表示問題什 么時候可以被解決。雖然沒有一個程序員愿意在白己的代碼中注明問題所在,但是他的同事都希 望他能在注明,因為這些備注信息將有助于實現(xiàn)一個工作區(qū),或者將這些問題獨 立出來以降低對未來變化的沖擊。5.14記錄同步的語義在一個方法前面的synchronized修飾符一般表示為了保護對象的狀態(tài),使用 該方法調用多個線程時是否應該按照順序調用。用戶可以通過查看Javadoc產生 的文檔來知道某個方法是否定義為synchronized,因為javadoc生成文檔時將

46、聲 明為synchronized的每個方法的修飾符都作為定義的一部分。除了上述方法外,Java還提供了一種同步機制,這種機制可以適用于一個代 碼塊,而不是整個方法。事實上,使用第二中同步機制的方法同樣可以達到線程 訪問安全的目的,但包含這些同步機制的方法在聲明時卻無需標明同步標識。這 種情況下,你就需要用文檔記錄所有使用這種內部同步機制的方法。5.15代碼內部注釋5.15.1需要幫助他人理解代碼時才增加內部注釋假如所增加的內部注釋不能增加任何有價值的信息,最好還是不要寫注釋信 息,讓代碼自身來表示自己好了。5.15. 2描述代碼應該做的事情,而不是描述代碼正在做什么其實,對于一份書寫格式良好的

47、代碼,其他的開發(fā)人員只要看一下就能知道 它是用來做什么。例如:快速地瀏覽一下下面的代碼就可以知道這個程序實現(xiàn)的 功能是:當一張發(fā)票總額超過1000美元時可亨受5%的折扣。If =*r下面的注釋兒乎沒有提供任何額外的信息,因此無需注釋:11 July 1999Int width 二(buffer * offset) / pixelWidth) + gap;5.15. 3在switch語句的最后一個case語句塊結束的地方加上一個break語句。下面的switch in句假設不再會有其他的case語句,因此在Y case結束的時 候就不需要。break語句:switch()case X: break;case Y: 但是,如果需要增加一個新的case語句,而這個增加的人又簡單地在最后一 個case語句的后面加上新的case語句,而沒去注意這個case后面是否有break 語句,這樣會產生很難察覺的“fal

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論