




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、JAVA編碼規(guī)約1、介紹i.i為什么要有代碼慣例代碼慣例之所以重要有以下幾點原因:軟件壽命價值的80%是維護。幾乎沒有軟件在整個使用過程中都有由原作者維護。代碼慣例增加了軟件包的可讀性,使工程師們能更快、更完整地理解新軟件。如果你想把你的原始代碼變成產品,你需要確認它是否和你生產的其它產品一樣有好的包裝。1.2確認這個文件在SUN公司的JAVA語言說明書中反映了JAVA語言編碼標準。這方面規(guī)定主要來自PeterKing,PatrickNaughton,JonniKanerva,andScottHommel.關于這個文檔的改寫、修改或再分配的問題,請看版權公告。對于這個文檔的建議請發(fā)貼自alan
2、s2文件名這一節(jié)列舉了常用的文件后綴與名稱。2.1文件后綴JAVA使用以下后綴:文件種類后綴JAVAsource.javaJAVAbytecode.class2.2普通文檔名稱通常用的文檔名稱文檔名稱使用GNUmakefilemakefile最恰當?shù)拿帧N覀兪褂胓numake制造我們的軟件。Readme概括特定目錄內容的文檔的最恰當名稱。3.文件的組織結構一個文件應當由多個被分隔的段組成,并由空行和可選擇注釋來識別。超過2000行的文件由于冗長而應當避免。Java程序的正確格式可參看第19頁的范例“Java源文件范例”。3.1Java源文件每一個Java源文件包含一個單一的公共類或界面。當私
3、有類或界面與一個公共類發(fā)生聯(lián)系時,你可以將它們以一個公共類放入同一個源文件。公共類應當是文件中的第一類或界面。Java源文件有如下次序:能始注釋(參看第4頁“起始注釋”)匈件和導入語句詼和界面聲明(參看第4頁“類和界面聲明”3.1.1起始注釋所有源文件應當以C格式注釋開始,并列出類名,版本信息,時間和版權說明:/* 類名* 版本信息* 時間*版權說明*/3.1.2 組件和導入語句對于大部分Java源文件而言,第一個無注釋行是組件語句。之后,緊跟著是導入語句。舉例如下:組件java.awt;導入java.awt.peer.CanvasPeer注釋:對于唯一的組件名,第一部分總是小寫的ASCII碼
4、格式的文本文件,并且是最高級別的域名之一。目前可用com,edu,gov,mil,net或ISO3166標準(1981)中規(guī)定的用于識別國家的英文兩個字母的模式。3.1.3 類和界面聲明下表按出現(xiàn)的先后順序描述了一個類或界面說明的各部分。參見第19頁“java源文件范例”中一個包含注釋的示例。類/界面聲明的各部分注釋1類/界回文中注釋(/*/)參看第9頁“文擋注釋”中注釋的具體內容2類或界囿語句3類/界囿補充注釋(/*/),如果必要的話這一注釋應包含任一類寬或界面寬度的信息,它不適合于類/界面文檔注釋。4類(靜態(tài)的)變量首先是公共類變量,其次是保護類,然后是組件級(無訪問修改權),最后是私有類
5、。5實例變量首先是公共類,其次是保護類,然后是組建級(無訪問修改權),最后是私有類。6構成7過程這些過程應當以功能而非作用域和可訪問性來分組。舉例說明,一個私有類變量過程可在兩個公共實例過程中。其目的是使讀和理解代他更為容易。4、縮進格式四個空格作為一個縮進單位。確切的縮進格式結構置必須在每8個空格后(而非4個)。(空格符與制表符)未被規(guī)范。表格的設4. 1行的長度由于難于被大多數(shù)終端和工具進行處理,應當避免一行超過80個字符。注釋:在文檔中所列舉的范例其行的長度應稍短些,一般不超過70個字符。5. 2繞回行當表達式一行無法寫完時,使用以下一般規(guī)則進行中斷:在逗號后中斷。在一個運算符前中斷。優(yōu)
6、先選擇高級中斷指令。新行起始表達式的位置應與舊行表達式的位置對齊。破口果上述規(guī)則導致代碼混亂或編碼時頂?shù)搅擞疫吔纾?個空格代替。以下是幾個中斷程序的調用范例:someMethod(longExpression1,longExpression2,longExpression3,longExpression4,longExpression5);var=someMethod1(longExpression1,someMethod2(longExpression2,longExpression3);以下是兩個關于中斷算術表達式的例子。第一個例子由于中斷發(fā)生在插入表達式以外,因而選擇了高級中斷指令。l
7、ongName1=longName2*(longName3+longName4-longName5)+4*longname6;/PREFERlongName1=longName2*(longName3+longName4longName5)+4*longname6;/AVOID以下是兩個關于縮進程序的說明。第一個例子是常規(guī)情況。第二個例子如果采用常規(guī)縮進方式,第二和第三行在換行時必然頂至最右,取而代之應空8格。/常規(guī)的縮進方式someMethod(intanArg,ObjectanotherArg,StringyetAnotherArg,ObjectandStillAnother)縮8個空格以
8、避免更深的鎖進privatestaticsynchronizedhorkingLongMethodName(intanArg,ObjectanotherArg,StringyetAnotherArg,ObjectandStillAnother)由于常規(guī)的4空格縮進方式使得體看上去過于復雜,對于語句的繞回行我們一般采用8空格縮進方式。舉例如下:/不要使用這種縮進方式if(conditionl&&condition2)|(conditions&&condition4)|!(condition5&&condition6)/BADWRAPSdoSomet
9、hingAboutIt();/MAKETHISLINEEASYTOMISS/取而帶之使用這種縮進方式if(conditionl&&condition2)I|(conditions&&condition4)I|!(condition5&&condition6)doSomethingAboutIt();/或使用這種方式if(conditionl&&condition2)|(conditions&&condition4)II!(condition5&&condition6)doSomethingAbout
10、It();以下有三種可行的方式來格式化三元表達式:alpha=(aLongBooleanExpression)?beta:gamma;alpha=(aLongbooleanExpression)?beta:gamma;alpha=(aLongBooleanExpression)?beta:gamma;5注釋JAVA程序可以有二種類型的注釋:執(zhí)行注解和文件注釋。執(zhí)行注釋是建立在C+之上的,以/*/為分隔符的注釋;文件注釋(即通常所說的doccomment)是一種純JAVA注釋,以/*/為分隔符。Doccomment(文件注釋)能夠通過JAVADOCA工具被摘錄成HEML文件。執(zhí)行注釋是指為代碼注
11、解釋,或為特別執(zhí)行注解釋。Doc注釋旨在從一個自由執(zhí)行的程序描述代碼的規(guī)范,對于軟件開發(fā)者來說,手邊不再需要源代碼就可以閱讀。注釋通常用于對代碼做總的描述,同時提供附加的信息,這從代碼本身來看是不容易得到的。其包含的信息只與閱讀、理解該程序有關,例如:一個相應組件如何被建立的信息或駐足在何地址錄下的信息都將被包含在一個注解中。對于重要的、非顯而易見的設計決定的討論是適當?shù)模菓摫苊庵貜托畔⒃诖a中出現(xiàn)。而對于多余注釋,則很容易成為過時的。總的說來,應當避免把過時的注釋做為編碼的進展。注意:經常出現(xiàn)的注釋有時反映編碼質量的低下。當你覺得不得不添加注釋時,建議你最好重新編寫,使得編碼更清晰。注
12、釋不能以星號或是其它字符為標識被附在一個大的邏輯單元內。注釋也不能包括特殊字符例如form-feed和backspace。5.1 執(zhí)行注釋的格式程序可以有四種注釋風格:塊、單行、跟蹤和行尾。5.1.1 塊注釋塊注釋用于提供文件的描述、方法、數(shù)據(jù)結構和運算法則。塊注釋用于每個文件的開始和方法之前。也可以用在其他地方,比如用在方法中。在一個函數(shù)或方法中的塊注釋,應和他們描述的代碼排列到同一級別上。塊注釋應設置在一個空行的開始。/* Hereisablockcomment.* /塊注釋以/*開始,并且單獨領導一行,縮進一格作為塊注釋的開始,這已經是約定俗成的,不需要另外重新定義格式。例如:/*-*
13、Hereisablockcommentwithsomeveryspecial* formattingthatIwantindent(1)toignore.* one* two* three* /Note:Ifyoudon'tuseindent,youdon'thavetouse/*-inyourcodeormakeanyotherconcessionstothepossibilitythatsomeoneelsemightrunindent(1)onyourcode.5.1.2 單行注釋簡短的注釋可以出現(xiàn)在單行上,和其描述的代碼在同一級別上。單行注釋應遵循塊注釋的格式。單行注釋
14、應單起一行。例如:if(condition)/*Handlethecondition.*/5.1.3 跟蹤注釋簡短的注釋可以和其所描述的代碼放到同一行上。但應和代碼保持足夠遠的空間。如果不只一個簡短的注釋出現(xiàn)在大塊的代碼段中,它們應有同樣的tab設置。例如:if(a=2)returnTRUE;/*specialcase*/elsereturnisPrime(a);/*worksonlyforodda*/5.1.4 行尾注釋/注釋界定符能注釋一整行或行的一部分,它不應該用在連續(xù)的多行文本注釋中。然而,它可以用在連續(xù)的多行代碼段中。例如:if(foo>1)/Doadouble-flip.el
15、sereturnfalse;/Explainwhyhere./if(bar>1)/Doatriple-flip././else/returnfalse;/5.2 文件注釋文件注釋描述Java類、界面、容器、方法和域,每一個文件注釋都放在注釋界定符/*.*/之間。注釋應在聲明之前。/*TheExampleclassprovides.*/publicclassExample.注意頂級類和界面不縮進,子類和界面則要縮進。類和界面的第一行文件注釋不縮進,后面的注釋行有有一個空格的縮進。子類,包括容器,有4個空格和五個空格的縮進。如果你需要給出關于類、界面,變量,或方法的信息,這些信息以文件的方式
16、給出是不適當?shù)模屈N你可以直接的在聲明之后使用執(zhí)行塊注釋或單行注釋。例如,類執(zhí)行的細節(jié)信息應放進執(zhí)行塊注釋中,并跟在類語句之后,而不是放在類的文件注釋中。文件注釋不應該放到方法或容器的定義塊中,因為Java將文件注釋和第一個注釋之后的聲明發(fā)生聯(lián)系。6、聲明6.1 每一行的數(shù)量每一行中都應有相應的注釋,換句話說intlevel;/indentationlevelintsize;/sizeoftable這種形式是首選的,而不是intlevel,size;不要將不同類型的放入同一行中,例如:intfoo,fooarray;/WRONG!注意:上面的例子中在類型和標識之間有一個空格,另一個可接受的方法
17、是用tab,例如:intlevel;/indentationlevelintsize;/sizeoftableObjectcurrentEntry;/currentlyselectedtableentry6.2 初始化被聲明的局部變量,應設法將其初始化。6.3 布置聲明應放在塊的開始。不要一直到用到第一個變量的時候才開始聲明,那將使粗心的程序員迷惑,并且妨礙代碼的輕便性。/beginningofmethodblockvoidmyMethod()intint1=0;if(condition)intint2=0;/beginningof"if"block在Java中,for循環(huán)
18、中的指針可以在for語句中聲明,例如for(inti=0;i<maxLoops;i+).避免在更高層的聲明當中隱含局部聲明,例如,不要在一個內部塊中聲明有相同名字的變量。intcount;/AVOID!myMethod()if(condition)intcount=0;.6.4 聲明類和界面當在譯碼java的類和界面的時候,應遵循以下的格式化規(guī)則:列出參數(shù)時,在方法名和圓括號之間不應該有空格。""出現(xiàn)在聲明語句同一行的結尾。""單起一行,但要和最近的“”匹配。但如果是空語句則例外。classSampleextendsObjectintivar1;i
19、ntivar2;Sample(inti,intj)ivar1=i;ivar2=j;intemptyMethod()Methods7、語句7. 1簡單語句每行最多只能包括一個語句。比如:argv+;Correctargc-;/Correctargv+;/argc-;/AVOID7 .2復合語句復合語句是包括一系列包含在括號statement中的語句。請看以下例子:被包含的語句必須比復合語句縮進一格。開始的括號必須在開始復合語句的那一行的末尾;關閉的括號應該重起一行并相對復合語句的開頭來說縮進。當括號是控制結構的一部分時,它們在所有語句中使用,像if-elsea或for語句即便是簡要語句。這使得增
20、加語句非常容易,您也不必為了忘記加括號而付出艱辛的勞動。7.3 return語句在某種程度上,如果一個return語句的返回值并不非常明顯,那么不應該加圓括號。例如:return;returnmyDisk.size();return(size?size:defaultSize);7.4 if,if-else,ifelse-ifelse語句if-else語句可以分為以下幾類:if(condition)statements;if(condition)statements;elsestatements;if(condition)statements;elseif(condition)statemen
21、ts;elsestatements;Note:ifstatementsalwaysusebraces.Avoidthefollowingerror-proneform:if(condition)/AVOID!THISOMITSTHEBRACES!statement;7.5 for語句For語句的形式如下所示:for(initialization;condition;update)statements;一條空的for語句的形式如下所示:for(initialization;condition;update);當在初始化或更新子句的時,避免使用超過三個以上的變量,如果有必要的話,可以在for循環(huán)開
22、始之前或結束后使用個別的語句。7.6 while語句while語句的形式如下所示:while(condition)statements;一個空的while語句的形式如下:while(condition);7.7 do-while語句do-while語句的形式如下:dostatements;while(condition);7.8 switch語句switch(condition)caseABC:statements;/*fallsthrough*/caseDEF:statements;break;caseXYZ:statements;break;default:statements;break
23、;)每一個switch語句應該包括一個默認的case,在默認的case之中的break是多余的,但是這樣可以防止以后另外的case加入而引起的錯誤。7.9 try-catch語句try-catch語句的形式如下所示:try(statements;catch(ExceptionClasse)statements;8、空白處8 .1空行空行通過分開那些有邏輯關聯(lián)的編碼區(qū)來提高可讀性。兩空行的使用總是要遵循如下的操作環(huán)境:心兩個包含源文件的段之間心定義的類和界面之間一空行的使用總是要遵循如下的操作環(huán)境:在兩個程序之間在一程序和它的起始語句中的兩個局部變量之間在一程序塊或單行注釋之前在一程序中用以提高
24、可讀性的兩邏輯段之間8. 2空格空格的使用總是要遵循如下的操作環(huán)境:L個后跟圓括號的關鍵詞應當以空格來分隔。例如:while(true)應注意空格不能使用在一程序名和它的開放式圓括號之間。這有助于將關鍵詞從程序指令中識別出來。L空格應當出現(xiàn)在參數(shù)表中逗號之后。楙有二進制運算符(除了。),都應當從它們的操作數(shù)中以空格來分隔??崭癫荒軐⒁辉\算符從它們的操作數(shù)中分隔開,例如一元減、增量和減量。舉例如下:a+=c+d;a=(a+b)/(c*d);while(d+=s+)n+;printSize(sizeis'+foo+h");旌for語句中的表達式應當以空格來分隔。例如:for(e
25、xpri;expr2;expr3)檄據(jù)類型轉換之后應當跟空格。例如:myMethod(byte)aNum,(Object)x);myMethod(int)(cp+5),(int)(I+3)+1);9、命名規(guī)范命名規(guī)范使得程序更易讀易懂,同時它們又給出了標識符的功能信息,例如是否是常量、組件或類。這對理解代碼是極其有用的。標識符類型命名規(guī)則舉例組件一個唯一的組件名前綴總是以全小寫的ASCII碼表示,并且必須是最高級別的域名之一。目前可用com,edu,gov,mil,net,org或ISO3166標準(1981)中規(guī)定的用于識別國家的英文兩個字母的模式。組件名的后繼部分因其組織機構內部固有的命名
26、方式而異。這些規(guī)定說明某一目錄名部分可以是區(qū)域名、部門名、項目名、機器名或注冊名。com.sun.engcom.apple.quicktime.v2edu.cmu.cs.bovik.cheese類類名應當是名詞,在混合詞中內部詞A個字母應當大寫。盡量保持類名簡單易懂又具有說明性。使用單詞全拼,避免首字母縮略詞和縮寫詞(除非縮寫比全拼更廣為使用,例如URL或HTML)。classRaster;classImageSprite;界面界面名應當同類名一樣大寫。interfaceRasterDelegate;nterfaceStoring程序程序應當是動詞,在混合詞中起始詞小寫,每一個內部詞第一個字母
27、大寫。run();runFast();getBackground();變量除了變量,所有實例、類和類常量在混合詞中的第一個字母應小寫。內部詞個字母大寫。變量名即便是被允許也不能以下劃線-字符或美元符$作起始。變量名應當簡短而用含義。變量名的選取應當是有助于記憶性的,也就是說名字的設計應能指示程序中的臨時解析器理解它的使用意圖。單個字符變量名應當避免,除非是臨時的可以隨時“丟棄”的變量。對于臨時變量,通用名可用i,j,k,m和n作為整數(shù),c,d,和e作為字符。inti;charc;floatmyWidth;常量變量名聲明類常量和ANSI常量應當用全大寫表示,單詞之間用下劃線(“_”)分隔。(為了
28、便于調試,ANSI常量應避血。)staticfinalintMIN_WIDTH=4;staticfinalintMAX_WIDTH=999;staticfinalintGET_THE_CPU=1;10程序設計慣例10.1 使用實例和類變量沒有非常好的理由,請不要聲明任何實例或類變量,實例變量經常會在調用方法上起副作用。適當?shù)墓脤嵗兞康睦邮穷悓嵸|上是一個數(shù)據(jù)結構,而不是行為的情況下使用的。換句話說,如果你情愿用struct而不用class,那麼使用類的實例變量是恰當?shù)摹?0.2 改進類變量和方法避免用一個對象訪問類(靜態(tài))變量或方法,用一個類名來代替。例如:classMethod();/O
29、KAClass.classMethod();/OKanObject.classMethod();/AVOID!10.3 常量數(shù)字常量不應該直接被編碼,除了1、0、-1,這幾個數(shù)字常量可以出現(xiàn)在一個for循環(huán)中,作為計數(shù)值。10.4變量分配在一個單一語句中,避免給一個變量分配同一個值,那會沒有可讀性。例如:fooBar.fChar=barFoo.lchar='c'/AVOID!在容易誤解的地方,不要使用任務操作符。if(c+=d+)/AVOID!(Javadisallows).)應該寫成:if(c+=d+)!=0).)如果試圖提高運行速度,請不要使用包含式的分配,因為這是編譯器的
30、工作。例如:d=(a=b+c)+r;/AVOID!應該寫成:a=b+c;d=a+r;10.5混合慣例10.5.1圓括號為了避免操作符的優(yōu)先問題,通常情況下不加限制的使用圓括號(包括混合操作符的情況)是個好辦法,即使操作符的優(yōu)先性對你來說看起來很清晰,因為你們不能猜測,其他的程序員會和你們一樣清楚操作符的優(yōu)先性。if(a=b&&c=d)/AVOID!if(a=b)&&(c=d)/RIGHT10.3.2 返回值盡量使你的程序的結構達到相稱的目的,例如:if(booleanExpression)returntrue;elsereturnfalse;不應該寫成:retu
31、rnbooleanExpression;同樣的if(condition)returnx;returny;不要寫成:return(condition?x:y);10.3.3 條件表達式之前的?如果一個含有二進制操作符的表達式出現(xiàn)在?之前,并且為三重的?:操作符,應該加上括號,例如:(x>=0)?x:-x;10.3.4 特殊注釋用XXX作為注釋信息來試圖標記一些事情,那是不切實際的。用FIXME標記某些事情,那也是不切實際的。11代碼例子11.1 JAVA源文件例子下面的例子顯示了如何格式化一個包含單一公用類的JAVA源文件。同樣的界面也被格式化,更多的信息請參見"ClassandInterfaceDeclarations"onpage4and"DocumentationComments"onpage9/* (#)Blah.java1.8299/03/18* Copyright(c)1994-1999SunMicrosystems,Inc.* 901SanAntonioRoad,PaloAlto,California,94303,U.S.A.* Allrightsreserved.* Thissoftwareistheconfidentialandproprieta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國合成纖維聚酯切片數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國仿皮表盒數(shù)據(jù)監(jiān)測研究報告
- 河南省周口市扶溝縣2024-2025學年九年級上學期1月期末化學試題(含答案)
- 跳水闖關考試題及答案
- 2025年軍隊文職人員招聘之軍隊文職法學能力測試試卷A卷附答案
- 2025年軍隊文職人員招聘之軍隊文職政治學全真模擬考試試卷A卷含答案
- 2019-2025年消防設施操作員之消防設備中級技能題庫檢測試卷B卷附答案
- 2024河北省中考英語真題含答案
- 郵輪切艙合同(2篇)
- 采購追加合同范本(2篇)
- 2025年中考百日誓師大會校長發(fā)言稿(二)
- 1.2男生女生課件(共15張)-2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 2025年共青科技職業(yè)學院單招職業(yè)技能測試題庫學生專用
- 2025年黑龍江林業(yè)職業(yè)技術學院單招職業(yè)技能測試題庫含答案
- 2025年01月吉林白山市長白朝鮮族自治縣事業(yè)單位公開招聘工作人員(含專項)和邊境村穩(wěn)邊固邊工作專干84人(1號)筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年寧波市水務環(huán)境集團有限公司招聘筆試參考題庫含答案解析
- 2020年國際命名化妝品原料INCI英漢對照名稱
- 課題申報參考:中華君子文化融入時代新人培養(yǎng)的價值與路徑研究
- 2025年高考數(shù)學二級結論篇(核心知識背記手冊)-專項訓練
- 2025年天津市事業(yè)單位面向甘南籍畢業(yè)生招聘35人歷年高頻重點提升(共500題)附帶答案詳解
- 廣東省肇慶市2025屆高中畢業(yè)班第二次模擬考試生物學試題(含答案)
評論
0/150
提交評論