前言:
?????現(xiàn)在java的出產(chǎn)地sun公司并沒(méi)有定義一個(gè)java注釋規(guī)范眶痰,注釋規(guī)范目前是每個(gè)公司自己有自己的一套規(guī)范诊杆,主要是為了團(tuán)隊(duì)之間的協(xié)作船侧。
1蔬螟、基本規(guī)則
? ? ?1.注釋應(yīng)該使代碼更加清晰易懂
? ? ?2.注釋要簡(jiǎn)潔明了,只要提供能夠明確理解程序必要的信息就可以了铁孵。如果注釋太復(fù)雜會(huì)影響程序整潔度和閱讀感锭硼。
? ? ?3.注釋不僅描述程序作了什么,還要描述為什么這樣做以及約束蜕劝。
? ? ?4.對(duì)于一般的getter和setter方法不用注釋账忘。
? ? ?5.類、接口熙宇、構(gòu)造函數(shù)、方法溉浙、全局變量必須添加注釋烫止。字段屬性可以選擇添加簡(jiǎn)單注釋。
? ? ?6.簡(jiǎn)單注釋一般不超過(guò)10個(gè)字戳稽。
? ? ?7.特殊地方必須要添加注釋馆蠕。比如一下幾個(gè)地方:典型算法,代碼不明晰處惊奇,在代碼修改處互躬,在循環(huán)和邏輯分支組成代碼處,為他人提供的接口颂郎。
2吼渡、三種注釋方式
?1.單行注釋(single-line)://注釋內(nèi)容
? ? ??一次只能注釋一行,一般是簡(jiǎn)單注釋乓序,用來(lái)簡(jiǎn)短描述某個(gè)變量或?qū)傩运吕遥绦驂K坎背。
? ? ?2.塊注釋(block):/*注釋內(nèi)容*/
? ? ?為了進(jìn)行多行簡(jiǎn)單注釋,一般不使用寄雀。
?????3.文檔注釋:/**注釋內(nèi)容?*/
? ? ?可以使用多行得滤,一般用來(lái)對(duì)類、接口盒犹、成員方法懂更、成員變量、靜態(tài)字段急膀、靜態(tài)方法沮协、常量進(jìn)行說(shuō)明。Javadoc可以用它來(lái)產(chǎn)生代碼的文檔脖阵。為了可讀性皂股,可以有縮進(jìn)和格式控制。
? ? ?文檔注釋常采用一些Javadoc標(biāo)簽進(jìn)行文檔的特定用途描述命黔,用于幫助Javadoc產(chǎn)生文檔呜呐,常用的有:
標(biāo)簽用途說(shuō)明
@author name類/接口描述代碼的作者,每個(gè)作者對(duì)應(yīng)一個(gè)標(biāo)簽悍募。
@Description類/接口/方法對(duì)類蘑辑,方法,接口的簡(jiǎn)單描述
@deprecated類/成員方法說(shuō)明該API已經(jīng)廢除坠宴。
@exception name description 或 @throws name description成員方法描述方法拋出的異常洋魂,每一個(gè)異常對(duì)應(yīng)一個(gè)標(biāo)簽
@param name description成員方法描述成員方法中參數(shù)用途和意義,一個(gè)參數(shù)對(duì)應(yīng)一個(gè)標(biāo)簽
@return description成員方法描述成員方法的返回值的意義
@since類/接口/成員方法描述該API最初出現(xiàn)時(shí)間喜鼓,可以填寫版本號(hào)
@see ClassName類/接口/成員方法/成員變量用于引用特定的類的成員方法的描述副砍,參考轉(zhuǎn)向,一般ClassName是包括包名的全名
@data類/接口/方法用于顯示類庄岖,方法豁翎,接口具體創(chuàng)建時(shí)間,或者修改時(shí)間
@version text類/接口版本
@inheritDoc類/接口/成員方法繼承的文檔
{@link address} 或者 @ linkplain address text}類/接口/方法用于創(chuàng)建一個(gè)指向另一份文檔的超鏈接
3隅忿、實(shí)例
? ? ?1.文件注釋
? ? ?一般作比較詳細(xì)描述心剥,而且在同個(gè)項(xiàng)目里面統(tǒng)一使用,主要包括:版權(quán)聲明背桐,license許可證描述优烧。
?????示例(來(lái)自 spring-framework):
/*
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
?????2.類/接口注釋
? ? ?類,接口描述链峭,一般作詳細(xì)描述畦娄。按照常用的說(shuō)明順序呢排列,主要包括
? ? ? ? ? 1.類的描述,以纷责『床簦或.結(jié)束。
? ? ? ? ? 2.類設(shè)計(jì)的目標(biāo)再膳,完成什么樣的功能一般和類的描述合并在一起挺勿。
? ? ? ? ? 3.<Strong>主要的類使用</Strong>如何使用該類,包括環(huán)境要求喂柒,比如線程是否安全不瓶,并發(fā)性要求以及使用約束。
? ? ? ? ? 4.<Strong>已知的BUG</Strong>
? ? ? ? ? 5.描述類的修改歷史:<Strong>修改人+日期+簡(jiǎn)單說(shuō)明</Strong>
? ? ? ? ? 6.@author作者灾杰、@version版本蚊丐,@see參照,@since開(kāi)始版本信息
?????示例(來(lái)自spring-framework):
? /**
* Delegate for resolving constructors and factory methods.
* Performs constructor resolution through argument matching.
*
* @author Juergen Hoeller
* @author Rob Harrop
* @author Mark Fisher
* @author Costin Leau
* @since 2.0
* @see #autowireConstructor
* @see #instantiateUsingFactoryMethod
* @see AbstractAutowireCapableBeanFactory
*/
? ? ?3.方法注釋
? ? ?方法描述說(shuō)明艳吠,主要對(duì)方法的描述麦备,參數(shù)、返回值昭娩、拋出異常進(jìn)行說(shuō)明凛篙。
? ? ?示例(來(lái)自spring-framework)
? ? ? /**
* Resolve the factory method in the specified bean definition, if possible.
* {@link RootBeanDefinition#getResolvedFactoryMethod()} can be checked for the result.
* @param mbd the bean definition to check
* @return a BeanWrapper for the new instance
* @throws Exception in case of any kind of processing failure
*/
? ? ?4.修改注釋
? ? ?在修改處一定要添加注釋,說(shuō)明修改人栏渺,修改原因呛梆,修改內(nèi)容,修改時(shí)間