javadoc

对于程序的文档化,最大的问题莫过于对文档的维护。若文档与代码分离,那么每次改变代码后都要改变文档,这无疑会变成相当麻烦的一件事情。解决的方法看起来似乎很简单:将代码同文档“链接”起来。为达到这个目的,最简单的方法是将所有内容都置于同一个文件。然而,为使一切都整齐划一,还必须使用一种特殊的注释语法,以便标记出特殊的文档;另外还需要一个工具,用于提取这些注释,并按有价值的形式将其展现出来。这些都是Java 必须做到的。用于提取注释的工具叫作javadoc。

javadoc 采用了部分来自 Java 编译器的技术,查找我们置入程序的特殊注释标记。它不仅提取由这些标记指示的信息,也将毗邻注释的类名或方法名提取出来。这样一来,我们就可用最轻的工作量,生成十分专业的程序文档。javadoc 输出的是一个 HTML 文件,可用自己的Web 浏览器查看。

具体语法

所有javadoc命令都只能出现于 /** 注释中。但和平常一样,注释结束于一个 */。主要通过两种方式来使用javadoc:嵌入的HTML,或使用“文档标记”。其中,“文档标记”(Doc tags)是一些以 @ 开头的命令,置于注释行的起始处(但前导的“*”会被忽略)。

有三种类型的注释文档,它们对应于位于注释后面的元素:类、变量或者方法。也就是说,一个类注释正好位于一个类定义之前;变量注释正好位于变量定义之前;而一个方法定义正好位于一个方法定义的前面。如下面这个简单的例子所示:

/** 一个类注释 */
public class docTest {
/** 一个变量注释 */
public int i;
/** 一个方法注释 */
public void f() {}
}

javadoc 只能为 public(公共)和protected(受保护)成员处理注释文档。“private”(私有)和
“友好”成员的注释会被忽略。

嵌入 HTML

javadoc将 HTML 命令传递给最终生成的 HTML 文档。这便使我们能够充分利用HTML 的巨大威力。当然,我们的最终动机是格式化代码,不是为了哗众取宠。

/**
* <pre>
* System.out.println(new Date());
* </pre>
*/
/**
57
* 您<em>甚至</em>可以插入一个列表:
* <ol>
* <li> 项目一
* <li> 项目二
* <li> 项目三
* </ol>
*/

注意在文档注释中,位于一行最开头的星号会被javadoc 丢弃。同时丢弃的还有前导空格。javadoc 会对所有内容进行格式化,使其与标准的文档外观相符。不要将


这样的标题当作嵌入 HTML 使用,因为
javadoc会插入自己的标题,我们给出的标题会与之冲撞。所有类型的注释文档——类、变量和方法——都支持嵌入 HTML。

@see :引用其他类

所有三种类型的注释文档都可包含@see 标记,它允许我们引用其他类里的文档。对于这个标记,javadoc会生成相应的 HTML,将其直接链接到其他文档。格式如下:

@see 类名

@see 完整类名

@see 完整类名#方法名

每一格式都会在生成的文档里自动加入一个超链接的“See Also”(参见)条目。注意 javadoc不会检查我们指定的超链接,不会验证它们是否有效。

类文档标记

随同嵌入HTML 和@see 引用,类文档还可以包括用于版本信息以及作者姓名的标记。类文档亦可用于“接口”目的(本书后面会详细解释)。

  1. @version

@version 版本信息。其中,“版本信息”代表任何适合作为版本说明的资料。若在 javadoc命令行使用了“-version”标记,就会从生成的 HTML 文档里提取出版本信息。

  1. @author

@author 作者信息。其中,“作者信息”包括您的姓名、电子函件地址或者其他任何适宜的资料。若在javadoc命令行使用了“-author”标记,就会专门从生成的HTML 文档里提取出作者信息。可为一系列作者使用多个这样的标记,但它们必须连续放置。全部作者信息会一起存入最终HTML 代码的单独一个段落里。

变量文档标记

变量文档只能包括嵌入的HTML 以及@see 引用。

方法文档标记

除嵌入HTML 和@see 引用之外,方法还允许使用针对参数、返回值以及违例的文档标记。

  1. @param

@param 参数名 说明。其中,“参数名”是指参数列表内的标识符,而“说明”代表一些可延续到后续行内的说明文字。一旦遇到一个新文档标记,就认为前一个说明结束。可使用任意数量的说明,每个参数一个。

  1. @return

@return 说明。其中,“说明”是指返回值的含义。它可延续到后面的行内。

  1. @exception

简言之,exception 是一些特殊的对象,若某个方法失败,就可将它们“扔出”对象。调用一个方法时,尽管只有一个违例对象出现,但一些特殊的方法也许能产生任意数量的、不同类型的违例。所有这些违例都需要说明。所以,违例标记的格式如下:

@exception 完整类名 说明。其中,“完整类名”明确指定了一个违例类的名字,它是在其他某个地方定义好的。而“说明”(同样可以
延续到下面的行)告诉我们为什么这种特殊类型的违例会在方法调用中出现。

  1. @deprecated

这是Java 1.1 的新特性。该标记用于指出一些旧功能已由改进过的新功能取代。该标记的作用是建议用户不必再使用一种特定的功能,因为未来改版时可能摒弃这一功能。若将一个方法标记为@deprecated,则使用该方法时会收到编译器的警告。