java代碼注釋規范

java代碼注釋規范

一、規范存在的意義

????應用編碼規范對于軟件本身和軟件開發人員而言尤為重要,有以下幾個原因:

????1、好的編碼規范可以盡可能的減少一個軟件的維護成本 , 并且幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發人員來維護;

????2、好的編碼規范可以改善軟件的可讀性,可以讓開發人員盡快而徹底地理解新的代碼;

????3、好的編碼規范可以最大限度的提高團隊開發的合作效率;

????4、長期的規范性編碼還可以讓開發人員養成好的編碼習慣,甚至鍛煉出更加嚴謹的思維;

二、命名規范

????1、一般概念

????????1、盡量使用完整的英文描述符

????????2、采用適用于相關領域的術語

????????3、采用大小寫混合使名字可讀

????????4、盡量少用縮寫,但如果用了,必須符合整個工程中的統一定義
???????
????????5、避免使用長的名字(小于 15 個字母為正常選擇)

????????6、避免使用類似的名字,或者僅僅是大小寫不同的名字

????????7、避免使用下劃線(除靜態常量等)

?????2、標識符類型說明

????????1、包( Package )的命名
????????????Package 的名字應該采用完整的英文描述符,都是由一個小寫單詞組成。并且包名的前綴總是一個頂級域名,
????????????通常是 com、edu、gov、mil、net、org 等;
????????????如: com.yjhmily.test

????????2、類( Class )的命名
????????????類名應該是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量保證類名簡潔而富于描述。
????????????使用完整單詞,避免縮寫詞 ( 除非工程內有統一縮寫規范或該縮寫詞被更廣泛使用,像 URL , HTML)
????????如: FileDescription

????????3、接口( Interface )的命名
????????????基本與 Class 的命名規范類似。在滿足 Classd 命名規則的基礎之上,保證開頭第一個字母為 ”I”,
????????????便于與普通的 Class區別開。其實現類名稱取接口名的第二個字母到最后,且滿足類名的命名規范;
????????如: IMenuEngine

????????4、枚舉( Enum )的命名
????????????基本與 Class 的命名規范類似。在滿足 Classd 命名規則的基礎之上,保證開頭第一個字母為 ”E” ,
????????????便于與普通的 Class區別開。
????????如: EUserRole

????????5、異常( Exception )的命名
????????????異常( Exception ) 通常采用字母 e 表示異常,對于自定義的異常類,其后綴必須為 Exception
????????如: BusinessException

????????6、方法( Method )的命名
????????????方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。
????????????方法名盡可能的描述出該方法的動作行為。返回類型為 Boolean 值的方法一般由“ is ”或“ has ”來開頭
????????如: getCurrentUser() 、 addUser() 、 hasAuthority()

????????7、參數( Param )的命名
????????????第一個單詞的首字母小寫,其后單詞的首字母大寫。參數量名不允許以下劃線或美元符號開頭,
????????????雖然這在語法上是允許的。參數名應簡短且富于描述。
????????如: public UserContext getLoginUser(String loginName);
???????
????????8、常量字段 ( Constants )的命名
????????????靜態常量字段( static final ) 全部采用大寫字母,單詞之間用下劃線分隔;
????????如: public static final Long FEEDBACK;
????????public static Long USER_STATUS;

?三、注釋規范

????????一個很好的可遵循的有關注釋的經驗法則是:

????????????問問你自己,你如果從未見過這段代碼,要在合理的時間內有效地明白這段代碼,你需要一些什么信息???

????????1、一般概念

????????????1、注釋應該增加代碼的清晰度

????????????2、保持注釋的簡潔

????????????3、在寫代碼之前或同時寫注釋

????????????4、注釋出為什么做了一些事,而不僅僅是做了什么

????????2、注釋哪些部分

????????????1、Java 文件:必須寫明版權信息以及該文件的創建時間和作者;

????????????2、類:類的目的、即類所完成的功能,以及該類創建的時間和作者名稱;多人一次編輯或修改同一個類時,
????????????????應在作者名稱處出現多人的名稱;

????????????3、接口: 在滿足類注釋的基礎之上,接口注釋應該包含設置接口的目的、它應如何被使用以及如何不被使用。
????????????????在接口注釋清楚的前提下對應的實現類可以不加注釋;

????????????4、方法注釋: 對于設置 (Set 方法 ) 與獲取 (Get 方法 ) 成員的方法,在成員變量已有說明的情況下,
????????????????可以不加注釋;普通成員方法要求說明完成什么功能,參數含義是什么且返回值什么;另外方法的創建
????????????????時間必須注釋清楚,為將來的維護和閱讀提供寶貴線索;

????????????5、方法內部注釋: 控制結構,代碼做了些什么以及為什么這樣做,處理順序等,特別是復雜的邏輯處理部分,
????????????????要盡可能的給出詳細的注釋;

????????????6、參數: 參數含義、及其它任何約束或前提條件;

????????????7、屬性: 字段描述;

????????????8、局部 ( 中間 ) 變量: 無特別意義的情況下不加注釋;

????????3、注釋格式

????????????遵循工程規定的統一注釋格式,一般情況下會以 codetemplates.xml 格式的文件導入 IDE(Eclipse)
????????????或者用Eclipse默認的;

四、代碼格式規范

????????遵循工程規定的統一代碼格式,一般情況下直接使用 IDE(Eclipse) 自帶的默認代碼格式對代碼進行格式化;
1、單行(single-line)--短注釋://……???
單獨行注釋:在代碼中單起一行注釋, 注釋前最好有一行空行,并與其后的代碼具有一樣的縮進層級。如果單行無法完成,則應采用塊注釋。
注釋格式:
行頭注釋:在代碼行的開頭進行注釋。主要為了使該行代碼失去意義。
注釋格式:// 注釋內容
行尾注釋:尾端(trailing)--極短的注釋,在代碼行的行尾進行注釋。一般與代碼行后空8(至少4)個格,所有注釋必須對齊。
注釋格式:代碼 + 8(至少4)個空格 + // 注釋內容
2、塊(block)--塊注釋:
注釋若干行,通常用于提供文件、方法、數據結構等的意義與用途的說明,或者算法的描述。一般位于一個文件或者一個方法的前面,起到引導的作用,也可以根據需要放在合適的位置。這種域注釋不會出現在HTML報告中。注釋格式通常寫成:

3、文檔注釋:
注釋若干行,并寫入javadoc文檔。每個文檔注釋都會被置于注釋定界符
之中,注釋文檔將用來生成HTML格式的代碼報告,所以注釋文
檔必須書寫在類、域、構造函數、方法,以及字段(field)定義之前。注釋文檔由兩部分組成——描述、塊標記。注釋文檔的格式如下:

public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
????doPost(request, response);
}
前兩行為描述,描述完畢后,由@符號起頭為塊標記注釋。更多有關文檔注
釋和javadoc的詳細資料,參見javadoc的主頁:?http://java.sun.com/javadoc/index.html
4、javadoc注釋標簽語法
@author????對類的說明 標明開發該類模塊的作者
@version???對類的說明 標明該類模塊的版本
@see??????對類、屬性、方法的說明 參考轉向,也就是相關主題
@param????對方法的說明 對方法中某參數的說明
@return????對方法的說明 對方法返回值的說明
@exception??對方法的說明 對方法可能拋出的異常進行說明
六、JAVA注釋具體實現
1、源文件注釋
源文件注釋采用 ,在每個源文件的頭部要有必要的注釋信息,包括:文件名;文件編號;版本號;作者;創建時間;文件描述包括本文件歷史修改記錄等。中文注釋模版:

2、類(模塊)注釋:
類(模塊)注釋采用 ,在每個類(模塊)的頭部要有必要的注釋信息,包括:工程名;類(模塊)編號;命名空間;類可以運行的JDK版本;版本號;作者;創建時間;類(模塊)功能描述(如功能、主要算法、內部各部分之間的關系、該類與其類的關系等,必要時還要有一些如特別的軟硬件要求等說明);主要函數或過程清單及本類(模塊)歷史修改記錄等。
英文注釋模版:

如果模塊只進行部分少量代碼的修改時,則每次修改須添加以下注釋:
//Rewriter
//Rewrite Date:<修改日期:格式YYYY-MM-DD> Start1:

//End1:
將原代碼內容注釋掉,然后添加新代碼使用以下注釋:
//Added by
//Add date:<添加日期,格式:YYYY-MM-DD> Start2:
//End2:
如果模塊輸入輸出參數或功能結構有較大修改,則每次修改必須添加以下
注釋:
//Log ID:
//Depiction:<對此修改的描述>
//Writer:修改者中文名
//Rewrite Date:<模塊修改日期,格式:YYYY-MM-DD>
2、接口注釋:
接口注釋采用 ,在滿足類注釋的基礎之上,接口注釋應該包含描述接口的目的、它應如何被使用以及如何不被使用,塊標記部分必須注明作者和版本。在接口注釋清楚的前提下對應的實現類可以不加注釋。
3、構造函數注釋:
構造函數注釋采用 ,描述部分注明構造函數的作用,不一定有塊標記部分。
注釋模版一:

注釋模版二:

4、函數注釋:
函數注釋采用 ,在每個函數或者過程的前面要有必要的注釋信息,包括:函數或過程名稱;功能描述;輸入、輸出及返回值說明;調用關系及被調用關系說明等。函數注釋里面可以不出現版本號(@version)。
注釋模版一:

注釋模版二:

5、方法注釋:
方法注釋采用 ,對于設置 (Set 方法 ) 與獲取 (Get 方法 ) 成員的方法,在成員變量已有說明的情況下,可以不加注釋;普通成員方法要求說明完成什么功能,參數含義是什么且返回值什么;另外方法的創建時間必須注釋清楚,為將來的維護和閱讀提供寶貴線索。
6、方法內部注釋:
控制結構,代碼做了些什么以及為什么這樣做,處理順序等,特別是復雜的邏輯處理部分,要盡可能的給出詳細的注釋。
7、 全局變量注釋:
要有較詳細的注釋,包括對其功能、取值范圍、哪些函數或者過程存取以及存取時注意事項等的說明。
8、局部(中間)變量注釋:
主要變量必須有注釋,無特別意義的情況下可以不加注釋。
9、實參/參數注釋:
參數含義、及其它任何約束或前提條件。
10、字段/屬性注釋: 字段描述,屬性說明。
11、常量:常量通常具有一定的實際意義,要定義相應說明。
-------------華麗的分割線--------------------------------------------
myeclipse的注釋相關
1.對java文件的自動注釋
Window->Preference->Java -> Code Style -> Code Templates
files:新建文件時的注釋
Types:類的注視
Field:變量的注釋
Constructors:構造函數的注釋
methods:一般方法的注釋
可以在里edit一些固定的格式或變量 其中user默認取操作系統的名稱,可以寫死。 日期格式俺想知道怎么改成yyyy-mm-dd
2.對JSP文件的注釋
Window->Preference-myeclipse-editors-JSP-JSP TEMPLATES
3.在java中用的一些快捷 例:sysout
Window->Preference-java-editor-templates
可以自己寫一些參數~例如 user ---zhongjb
五、其他規范

???????JSP 文件命名
????????????采用完整的英文描述說明 JSP 所完成的功能,盡可能包括一個生動的動詞,第一個字母小寫,
????????如: viewMessage.jsp 、editUser.jsp 等。

六、工程特有命名規范

????????1、持久層

????????????1、 Hibernate 映射文件及實體
????????????????與數據庫表名稱完全對應;
????????????????如: Advertisement.hbm.xml 、 Advertisement.java

????????????2、數據訪問 DAO
????????????????DAO 接口和實現類名稱必須完全符合正常接口和實現類的命名規則,且最后以 ”DAO” 結尾
????????????????DAO 內的數據訪問方法必須足夠抽象的描述出對數據庫的基本 CRUD 操作;
????????????????如: ICrossAdDAO( 接口 ) 、 CrossAdDAO( 實現類 )
???????????
????????????3、各種操作數據庫的 HQL 配置文件
????????????????HQL 文件的個數原則上與系統的 Services 層的服務個數相等,且以服務名稱命名 HQL 文件;
????????????????如: resource.hbm.xml

???????2、服務層

????????????1、服務接口和實現
????????????????服務接口和實現類必須完全符合正常接口和實現類的命名規則;以工程定義的服務名為主體,
????????????????并統一以 ”Serv” 結尾
????????????????如: IResourceServ( 服務接口 ) 、 ResourceServ( 接口實現類 )

????????????2、服務接口方法
????????????????方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。
???????????方法名盡可能的描述出該方法的動作行為。
????????????????返回類型為 Boolean 值:用“ is ”或“ has ”來開頭
????????????????得到某數據: get+ 數據描述名詞復數 + 數據類型;
????????????????得到所有數據: get+All+ 數據描述名詞復數 + 數據類型;
????????????????通過 XXX 得到 / 查詢某數據: get/query+ 數據描述名詞復數 + 數據類型 +By+ 條件;
????????????????添加某數據: save/add+ 數據描述名詞 ()
????????????????更新某數據: save/update+ 數據描述名詞;
????????????????刪除某數據: delete/remove+ 數據描述名詞;

????????????3、業務對象
????????????????業務名稱 +BO

????????????4、查詢參數對象
????????????????凡是繼承 Abst***QuerySpec 的查詢參數類全部滿足以下規則:
????????????????Query+ 所要查詢的數據描述名詞 +Spec
????????????????作為參數傳入時,參數名必須為:所要查詢的數據描述名詞 +Spec
????????????????如: QueryProgramSpec

???????3、MVC 層???????????

????????????1、Action 控制層
????????????????Action 類名:功能模塊名稱 +Action ;
????????????????Actoin 方法名稱盡可能的描述出頁面遷移的去向
????????????????如: LoginAction( 登錄用 action) , toWelcome( 轉向歡迎頁的 action 方法 )

????????????2、資源文件
????????????????系統全局資源文件: globalMessages_+ 字符編碼類型 +.properties
????????????????功能模塊內部的資源文件: package.properties

????????4、Spring 配置文件

????????????1、Action 相關配置文件
????????????????文件目錄: WebRoot/WEB-INF/spring/action/ 功能模塊名稱 +_ApplicationContext.xml

????????????2、Services 相關配置文件
????????????????文件目錄: WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml

????????????3、全局性配置文件
????????????????文件目錄: WebRoot/WEB-INF/spring/工程名+_ApplicationContext.xml

???????5、JSP 文件
????????????采用完整的英文描述說明 JSP 所

轉載于:https://www.cnblogs.com/haochuang/p/6387312.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371541.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10 hyper-v 虛擬機ping不通宿主機問題

在Windows10 Hyper-V 中安裝 Linux (Centos6.9)虛擬機無法 ping 通宿主機 這種情況下關閉 Windows 防火墻就能ping通了&#xff0c;當然關閉防火墻不安全。所以需要 做以下步驟: 控制面板-》系統和安全-》Windows防火墻-》高級設置-》入站規則 啟用下圖被紅框選中的兩個選…

linux方法參數,Linux的sysctl?命令?參數

Linux內核通過/proc虛擬文件系統向用戶導出內核信息&#xff0c;用戶也可以通過/proc文件系統或通過sysctl命令動態配置內核。比如&#xff0c;如果我們想啟動NAT&#xff0c;除了加載模塊、配置防火墻外&#xff0c;還需要啟動內核轉發功能。我們有三種方法&#xff1a;1. 直接…

Java枚舉:您擁有優雅,優雅和力量,這就是我所愛!

當Java 8即將面世時&#xff0c;您確定您對Java 5中引入的枚舉很了解嗎&#xff1f; Java枚舉仍然被低估了&#xff0c;很可惜&#xff0c;因為它們比您想象的要有用&#xff0c;它們不僅僅用于通常的枚舉常量&#xff01; Java枚舉是多態的 Java枚舉是可以包含行為甚至數據的…

C#刪除和清空文件夾的程序

/// <summary>/// 清空指定的文件夾&#xff0c;但不刪除文件夾/// </summary>/// <param name"dir"></param>private void DeleteFolder(string dir){foreach (string d in Directory.GetFileSystemEntries(dir)){if (File.Exists(d)){try{…

2)網頁請求順序

&#xff08;1&#xff09;分析瀏覽器訪問一個網頁的完整流程邏輯過程&#xff1a;http&#xff1a;//www.abc.com/def/ 轉載于:https://www.cnblogs.com/xiaoyoucai/p/7306246.html

JavaOne 2012:非阻塞數據結構如何工作?

當我查看今天的日程安排時&#xff0c;我感到有些驚訝&#xff0c;并指出我目前計劃今天參加的所有會議都在希爾頓舉行。 當我意識到JavaOne演示文稿中大約有一半是在希爾頓酒店中并且似乎按路線大致定位時&#xff0c;這變得有些不足為奇了。 Tobias Lindaaker &#xff08; 新…

c語言箭頭指針的作用,C語言中,結構體成員變量的點和箭頭

C語言中&#xff0c;調用成員變量用點還是用箭頭&#xff0c;取決于當前的ID是指針還是結構體本身。如&#xff1a;typedef struct {float height;float weight;} Person;int main(int argc, char *argv[]) {Person jiushen;Person *lengleng (Person *)malloc(sizeof(Person)…

JavaOne 2012:調查JVM水晶球

我回到了希爾頓的A / B廣場參加星期一的第四屆會議&#xff0c;但首先去了希爾頓的頂層收拾午餐。 我每年都在JavaOne的第一天被提醒&#xff0c;涉及到每個人的第一天的午餐獲取過程令人驚訝地令人沮喪。 我知道我在JavaOne的第一年的經歷使我有些困惑&#xff0c;因為我不確定…

測試遇到的問題

多人合作測試 多人員合作測試&#xff0c;應盡量保證測試平臺統一&#xff0c;處理流程統一&#xff0c;相互之間保持實時溝通。問題的處理進度應保證所負責的所有測試人員第一時間實時更新。 多人測試應做到2人或以上進行交叉測試。 轉載于:https://www.cnblogs.com/liuliu-wo…

Jquery Memo

jQuery選擇器 $( "#id" ) $( ".class" )$( "element" )全選擇器&#xff08;*選擇器&#xff09; * {padding: 0; margin: 0;}//子選擇器 //$(div > p) 選擇所有div元素里面的子元素P//后代選擇器 //$(div p) 選擇所有div元素…

c#語言輸出字符串長度,C#統計字符長度(漢字占2個字符)

在C#編程過程中&#xff0c;通過String類的Length屬性可以獲取對應字符串的長度&#xff0c;但是細心的讀者可能注意到了&#xff0c;String類的Length屬性返回的是字符串中Char對象的個數&#xff0c;也就是說&#xff0c;一個漢字的長度為1&#xff0c;對此&#xff0c;MSDN的…

使用JMSTester對JMS層進行基準測試

對于我去過的大多數客戶端&#xff0c;使用ActiveMQ擴展JMS消息傳遞層是一個優先事項。 有多種方法可以實現這一目標&#xff0c;但毫無疑問&#xff0c;創建基準測試并在實際硬件上分析架構&#xff08;或者正如我的同事Gary Tully所說的“詢問機器”&#xff09;是第一步。 但…

Js引擎解析執行 閱讀筆記

Js引擎解析執行 閱讀筆記 一篇閱讀筆記http://km.oa.com/group/2178/articles/show/145691?kmrefsearch&from_page1&no1 早期:遍歷語法樹 Js引擎最早使用的是遍歷語法樹方式 &#xff08;syntax tree walker&#xff09; 分為兩步 詞法分析語法分析詞法分析 i a b *…

紅外線遙控c語言程序,紅外遙控的C程序

紅外遙控在生產和生活中應用越來越廣泛,不同的紅外遙控芯片有不同的發碼協議,但一般都是由引導碼,系統碼,鍵碼三部分組成.引導碼是告訴接收機準備接收紅外遙控碼.系統碼是識別碼,不同的遙控芯片有不同的誤別碼,以免搞錯.遙控器上不同的按鍵有不同的鍵碼,系統碼和鍵碼都是16位碼…

Retrofit2 完全解析 探索與okhttp之間的關系

轉載請標明出處&#xff1a; http://blog.csdn.net/lmj623565791/article/details/51304204&#xff1b; 本文出自:【張鴻洋的博客】 之前寫了個okhttputils的工具類&#xff0c;然后有很多同學詢問這個工具類和retrofit什么區別&#xff0c;于是上了下官網&#xff0c;發現其底…

不變性真的意味著線程安全嗎?

我經常閱讀有關“如果對象是不可變的&#xff0c;則它是線程安全的”的文章。 實際上&#xff0c;我從未找到過一篇讓我相信不變的意味著線程安全的文章。 即使是Brian Goetz的Java Concurrency in Practice一書中關于不變性的一本書也沒有完全令我滿意。 在這本書中&#xff0…

c語言設計 數組的知識點,C語言程序設計知識點及示例.pdf

C語言程序設計知識點及示例四川大學錦江學院C語言程序設計知識點及示例知識點1&#xff1a;除了復合語句而外&#xff0c;C語言的語句都以分號結束。示例1&#xff1a;C語言的簡單語句 (非復合語句語句)必須以 結束。參考答案&#xff1a;分號知識點2&#xff1a;目標程序和可執…

移動端知識匯總

參見地址: https://github.com/jtyjty99999/mobileTech 轉載于:https://www.cnblogs.com/duanyue/p/7337789.html

在移動端設置overflow:hidden禁止滾動的解決方法

如果你是將overflow:hidden用在了body上那么不管用&#xff0c;因為移動端是基于touch事件。 兩種解決方法&#xff1a; 1、為html和body同時設置height:100%;overflow:hidden; html, body{height:100%;overflow:hidden; }2、使用touchmove $(document).on(touchmove,function …

單元測試線程代碼的5個技巧

這是一些技巧&#xff0c;說明如何進行代碼的邏輯正確性測試&#xff08;與多線程正確性相對&#xff09;。 我發現本質上有兩種帶有線程代碼的刻板印象模式&#xff1a; 面向任務–許多短期運行的同類任務&#xff0c;通常在Java 5執行程序框架內運行&#xff0c; 面向流程–…