一 申明
以下内容 sort by mang

二 javadoc 简介


我们知道Java中有三种注释语句:

 1.//用于单行注释。

成Html格式的类说明文档。javadoc不但能对一个 java源文件生成注释文档,而且能对目录和包生成交叉链接的 html格式的类说明文档,十分方便。

注释中可以出现的关键字,以@开头:

 @author 作者名

三 例子:

以下是一个关于汽车类的例子,来具体说明运用javadoc 命令时对注释的规范

汽车类有4个属性:

maxSpeed
averageSpeed 
waterTemperature
Temperature

分别用来表示最大速度,平均速度,水温 室温

有2个方法:

measureMaxSpeed() 

用来测量汽车的平均速度和最大速度


以下例子基本包括了javadoc 中常用到的注释,下面的篇幅中会一一详细说明的,读者可以试着用javadoc命令生成以下例子的说明文档

/**
 *汽车类的简介
 *<p>汽车类具体阐述第一行<br>
 *汽车类具体阐述第二行
 *@author man
 *@author man2
 *@version 1.0
 *@see ship
 *@see aircraft
 */
 public class Bus{
 /**
 *用来标识汽车行驶当中最大速度
 *@see #averageSpeed
 */
 public int maxSpeed;
 /**用来标识汽车行驶当中平均速度*/
 public int averageSpeed;
 /**用来标识汽车行驶当中的水温*/
 public int waterTemperature;
 /**用来标识天气温度*/
 public int Temperature;
 Bus(){
 }
 /**
 *该方法用来测量一段时间内的平均速度
 *@param start 起始时间
 *@param end 截止时间
 *@return 返回int型变量
 *@exception java.lang.exceptionthrowwhenswitchis1
 */
 public int measureAverageSpeed(int start,int end ){
 int aspeed=12;
 return aspeed;
 }
 /**
 *该方法用来测量最大速度
 */
 public int measureMaxSpeed(){
 }
 }

四 javadoc 命令对注释规范的详细介绍 只有/**……*/这样的诠释才能被写入javadoc文档。

4.1 java文档和javadoc

在jdk的bin目录下你可以找到javadoc,如果是windows下的jdk,它的文件名为javadoc.exe。运用javdoc编

译 .java源文件时,它会读出java源文件中的文档诠释,并遵照一定的限定和java源程序一起进行编译,生成文

。 引见javadoc的编译命令之前,还是先懂得一下文档诠释的款式吧。不过为了能够编译下面提到若干例子,这

里先引见一条javadoc命令:

 javadoc -d 文档寄存目录 -author -version 源文件名.java 

这条命令编译1个名为“源文件名.java”的java源文件,并将生成的文档存放在“文档寄存目录”指定的目录下,生成

的文档中index.html不外乎是文档的首页。-author和-version二上选项可以省略。

4.2 文档诠释的款式

文档诠释可以用于对类、属性、方式等进行阐明。写文档诠释时除了需要运用/**....*/规定之外,还需要注意

诠释内部的有些细节毛病。


4.2.1文档和文档诠释的格式化

生成的文档系html款式,而这些html款式的标识符并非javadoc加的,而是咱们在写诠释的时候写上去的。

打个比方,需要换行时,不是敲入1个回车符,而是写入<br>,要是要分段,就该当在段前写入<p>。 因

而,格式化文档,不外乎在文档诠释中添加相应的html标签。 

文档诠释的正文并非直接复制到输出文档(文档的html文档),而是读出每一行后,删掉前导的*号及*号从前

的空格,再输入到文档的。如

 /** *thisisfirstline.<br>

编译输出后的html源码则是 

thisisfirstline.

<br>

<br> 

thisisthirdline. 

前导的*号准许持续运用不止一个,其成果和运用1个*号一致,但不止一个*号前不可有其它字符分隔,不然

分隔符及背后的*号都将作为文档的内容。*号在这里系作为左边界运用,如上例的第一行和第二行;要是没有前

导的*号,则边界从第一个有效字符开端,而不包括前面的空格,如上例第四行。 

还有一点需要阐明,文档诠释只阐明紧接其后的类、属性或者方式。如下例:

/**comment for a attribute*/
public void mymethod(){......} ...... }

上例中的三处诠释不外乎区别对类、属性和方法的文档诠释。它们生成的文档分别是阐明紧接其后的类

、属性、方法的。“紧接”二字特别首要,要是忽视了这一点,就很可能造成生成的文档故障。如 

import java.lang.*;
public class Test{......} //此例为准确的例子

这个文档诠释将生成准确的文档。但只需要转变其中两行的位置,化成下例,就会出错: 

/**comment for class*/
public class Test{......} //此例为故障的例子

不到上述诠释的内容了。缘故何在? “/**comment for class*/”系对 Test类的阐明,把它放在“public class

换了位置后,其后紧接的不再是类Test了,而是一个import语句。因为文档诠释只能阐明类、属性和方式,

import语句不在此列,因此这个文档诠释便被当成故障阐明省略掉了。

4.2.2 文档诠释的三局部

依据在文档中的成果,文档诠释分为三局部。先举例如下,以便阐明。

*汽车类的简述.
*<p>汽车类具体阐述第一行<br>
*汽车类具体阐述第二行
*@author man
*@author man2
*@version 1.0
*@see ship
*@see aircraft
*/
public class Bus{
//类中的语句…………
}

第一部分系简述,也就是注释中的的第二行。文档中,关于属性和方式全是先有一个列表,然后才在背后 一个一个的仔细的阐明。列表中属性名或者方

法名背后那段阐明不外乎简述。 简述局部写在一段文档诠释的最前面,第一个点号(.)之前(包含点号)。换句话

说,不外乎用第一个点号分隔文档诠释,之前系简述,后来系第二局部和第三局部。如上例中的“*汽车类的简

述.”。 有时,即使正确地以1个点号作为分隔,javadoc依然会出错,把点号背后的局部也做为了第一部分。为

了解决这个毛病,咱们可以运用一个<p>标记将第二部分离开为下一段,如上例的“*<p>show方式的仔细阐

明第一行....”。除此之外,咱们也可以运用<br>来分隔。 第二局部系仔细阐明局部。该局部对属性或者方式进

行仔细的阐明,在格式上没有什么特异的哀求。第三局部系特异阐明局部。这局部包含版本阐明、参数阐明、返

回值阐明等。

4.2.3运用javadoc记号

javadoc记号系插入文档诠释中的特异记号,它们用于标识编码中的特异引佣。javadoc记号由“@”及其后所

跟的记号类型和专用诠释引佣组成。记住了,三个局部——@、记号类型、专用诠释引佣。不过我甘愿把它分成

两部分:@和记号类型、专用诠释引佣。 注意 @和记号类型最好紧挨着一块写

javadoc记号有如下这些:

@author             对类的阐明                               说明开发该类模块的笔者 

@version           对类的阐明                              说明该类模块的版本 

                @see                 对类、属性、方式的阐明          参照转向,也就是相关主题 

@param             对方式的阐明

@return              对方式的阐明                            对方式返回值的阐明 

@exception        对方式的阐明                            对方式也许抛出的非常进展阐明 

下面仔细阐明各记号。

4.2.3.1

 @see的句法有三种:

  @see 类名 

@see  #方法名或属性名 

@see 类名#方法名或属性名

注意see后面有空格 类名,可以依据需要只写出类名(如string)或者写出类全名(如java.lang.string)。那么什么时

候只需要写出类名,什么时候需要写出类全名呢? 要是java源文件中的import语句包括了的类,可以只写出类

名,要是没有包括,则需要写出类全名。java.lang也曾经默认被包括了。这和javac编译java源文件时的规矩一

致,因此可以单纯的用javac编译来判断,源程序中javac能找到的类,javadoc也一定能找到;javac找不到的

类,javadoc也招不到,这就需要运用类全名了。 方法名或者属性名,如果是属性名,则只需要写出属性名即

可;如果是方法名,则需要写出方法名以及参数类型,没有参数的方式,需要写出一对括号。如 成员类型 成员

名称 及参数 @see句法 属性number:@see number 属性count:@see count 方式count():@see count() 方式

show(boolean b):@see show(boolean) 方式main(string[]args):@see main(string[]) 有时也可以躲懒:假使上

例中,没有count这1属性,那么参照方式count()就可以简写成@see count。不过,为了安全起见,还是写全

@see count()比较好。 @see的第二个句法和第三个句法全是转向方式或者属性的参照,它们有什么分辨呢? 第

二个句法中没有指出类名,则默以为目前类。因此它定义的参照,全转向本类中的属性或者方式。而第三个句法

中指出了类名,则不错转向其它类的属性或者方式。 对于@see记号,咱们举个例阐明。因为@see在对类阐

明、对属性阐明、对方式说明时用法全一致,因此这里只以对类阐明为例。

/**
 
*@see string
*@see java.lang.stringbuffer
*@see #str
*@see #str()
*@see #main(String[])
*@see object#tostring()
*/
public class TestJavadoc{
public int str;
public void str(){
//…………
}
public static void main(String args[]){
//…………
}
}

string和stringbuffer全是在java.lang包中,因为这个包系默认导入了的,因此这两个类可以直接写类名,也可以

写类全名。str、str()为同名属性和方式,所以方法名需要用()划分。main系带参数的方式,因此在()中指明了参

数类型,注意main函数中的参数String是大写,若写错或写成小写则不能生成链接。tostring()固然在本类中也有

(从object继承的),但咱们系想参照object类的tostring()方式,因此运用了object#tostring()。 古怪的是,为什么

其中只有str、str()和main(string[])化成了链接呢?那是因为编译时没有把java.lang包或者stirng、stringbuffer、

object三个类的源文件一起参加编译,因此,生成的文档没有对于那三个类的信息,也就不可以建立链接了。背

后讲授javadoc编译命令的时候还会仔细阐明。 上例中要是把类中的str属性去掉,那么生成的文档又会有什么变

迁呢?你会发觉,原先系str,str(),而如今化成了str(),str(),由于str属性已经没有了,因此str也表现方法str()。


4.2.3.2 运用@author、@version阐明类

这两个记号区别用于指明类的笔者和版本。缺省情况下javadoc将其忽视,但命令行开关-author和-version

可以修正这个功效,使其包括的信息被输出,即在使用javadoc 命令时加上相关参数,如:

javadoc –d [存放路径] –author –version 类名.java

这两个记号的句法如下: @author笔者名 @version版本号 其中,@author可以不止一次运用,以指明不止一个笔者,生成的文档中每个笔者证明运用逗号(,)隔开。@version也可以运用不止一次,但只有首次有效,生成的文档中只会显示首次运用@version指明的版本号。如下例 

/** *@author fancy 
*@author bird 
*@version version1.00 
*@version version2.00 */ 
public class TestJavadoc{ }

从生成文档的图示中可以看出,两个@author语句全被编译,在文档中生成了笔者列表。而两个@version语句中

只要第一句被编译了,只生成了1个版本号。 从图上看,笔者列表是以逗号分隔的,要是偶想分行卖弄怎么办?

此外,要是偶想卖弄两个以上的版本号又该怎么办? ——咱们可以将上述两条@author语句合为一句,把两个

@version语句也合为一句:

@authorfancy<br>bird 

@versionversion1.00<br>version2.00 

咱们这么做即达到了目标,又没有弄坏限定。

@author后来的笔者名和@version后来的版本号都可以系用户俺定义的所有html款式,因此咱们可以运用<br>

记号将其分行卖弄。同时,在1个@version中指明两个用<br>分隔的版本号,也没有弄坏只卖弄第一个

@version内容的限定。


4.2.3.3 运用@param、@return和@exception阐明方式

这三个记号全是只用于方法的。

@param描写方式的参数,

@return描写方式的返回值,

@exception描写方式也许抛出的异常。

它们的句法如下: 

@param参数名参数阐明 

@return返回值阐明

@exception异常类名阐明 

每一个@param只能描写方式的1个参数,因此,要是方式需要不止一个参数,就需要不止一次运用

@param来描写。 1个方式中只能用1个@return,要是文档阐明中列了不止一个@return,则javadoc编译时

会发出正告,且只要第一个@return在生成的文档中有效。 方法也许抛出的异常应该用@exception描写。

因为一个方式也许抛出不止一个非常,因此可以有不止一个@exception。每个@exception背后应有简述的

异常类名,阐明中应指出抛出异常的缘故。需要注意的系,异常类名该当依据源文件的import语句肯定系写

出类名还是类全名。 示例如下: 

public class TestJavadoc{ 
/** *@param n a  switch 
*@param b excrescent  parameter 
*@return true o rfalse 
*@return excrescent return 
*@exception java.lang.exceptionthrowwhenswitchis1
*@exception nullpointerexception  throw   when   parametern is  null */ 
public Boolean fun(integer  n)throws exception{ 
switch(n.intvalue()){ 
case0: break; 
case1: throw newexception("testonly"); 
default: return  false; 
} 
return  true; 
}

可以看到,上例中@param bexcrescentparameter一句系过剩的,由于参数只是1个n,并没有一个b可是

javadoc编译时只是没有检讨。因而,写文档诠释时一定要准确匹配参数表和方式中正式参数表的项目。要是方

式参数表中的参数系a,文档中却给出对参数x的说明,或者再多出1个参数i,就会让人摸不着头脑了。

@exceptin也是一致。 上例顺序中只是没有抛出1个nullpointerexception,可是文档诠释中为什么要写上这样一

句呢,莫非又是为了演示?这不是为了演示描写过剩的非常也能经过编译,而是为了阐明写异常说明时应考运行

时(runtime)非常的可能性。上例顺序中,要是参数n系给的1个空值(null),那么顺序会在运行的时候抛出1个

nullpointerexception,因而,在文档诠释中添加了对nullpointerexception的阐明。 上例中的@return语句有两

个,可是依据限定,同一个方法中,只要第一个@return有效,其他的会被javadoc忽视。因此生成的文档中没有

浮现第二个@return的描写。 讲到这里,该怎样写文档诠释你该当曾经清晰了,下面就开端讲授javadoc的常用

命令。

以下几点还须再次注意

1)

在对属性,方法进行说明时要加上属性或方法的权限,否则在生成的文档中根本找不到该属性或方法

2)

#是针对方法或属性,换句话说要see方法名或属性名 时才用到#

对#的要求: