JAVADOC语法
我们在开发JAVA程序中, 可以使用Javadoc来进行程序文档的整理, 当程序编写完成, 利用Java自带的JavaDoc工具就可以生成规范的API说明手册. 下面是我自己整理的一些语法:
书写格式:
/** <- 这里一定要用两个星号, 否则会被认为是普通注释的
* ........
*/
public int getCount() { .......
Javadoc只能为public,protected两种权限的类成员进行处理注释文档。当然也可以使用-private参数强制进行处理, 我们可以在注释中嵌入HTML个标记来丰富最后文档的显示, 因为Javadoc最后生成的文档就是HTML.
/**
* 一些参数列表
*
* @see 类名
* @see 完整类名
* @see 完整类名#方法
*
* @param 参数名 说明
* @return 说明
* @exception 完整类名 说明
* @deprecated
*
* @version 版本信息
* @author 作者名
*/
说明:
@see : 就是文档中的 参见xx 的条目, 其实就是超链接.
一般来说, 文档有三种类型: 类注释, 变量注释, 方法注释, 这三中类型的注释除了都可以包含 @see 参数外, 其它所包含的参数是不同的.
1. 类注释
类注释是写在类前面的, 用来说明类的一些情况, 可以包涵 @version,@author参数, 但Javadoc缺省情况下不处理, 也就是说不在最后文档中出现的, 为了使用这些信息, 我们可以加入参数 -version和 -author来强制输出到最后的文档中.
2. 变量注释
变量注释写在变量前面, 只能包含 @see 参数
3. 方法注释
方法注释可以包括
@param : 参数名是指参数列表内的标识符, 说明就是一些解释性质的文字, 可以多行.
@return : 返回值的说明, 可以多行
@exception : 完整类名应该明确指定一个违例类的名字,它是在其它某个地方定义好的。而说明则阐述为什么这种特殊类型的违例会在方法调用中出现。说明可以多行
@deprecated : 指出一些旧功能已由改进过的新功能取代。该标记的作用是建议用户不必再使用一种特定的功能,因为未来改版时可能摒弃这一功能。若将一个方法标记为@deprecated,则使用该方法时会收到编译器的警告。
javadoc的命令行语法如下:
javadoc [ options ] [ packagenames ] [ sourcefiles ] [ @files ]
参数可以按照任意顺序排列。下面分别就这些参数和相关的一些内容进行说明:
? Packagenames 包列表。这个选项可以是一系列的包名(用空格隔开),例如java.lang java.lang.reflect java.awt。不过,因为javadoc不递归作用于子包,不允许对包名使用通配符;所以你必须显示地列出希望建立文档的每一个包。
? Sourcefiles 源文件列表。这个选项可以是一系列的源文件名(用空格隔开),可以使用通配符。javadoc允许四种源文件:类源代码文件、包描述文件、总体概述文件、其他杂文件。
◇ 类源代码文件:类或者接口的源代码文件。
◇ 包描述文件:每一个包都可以有自己的包描述文件。包描述文件的名称必须是"package.html",与包的.java文件放置在一起。包描述文件的内容通常是使用HTML标记写的文档。javadoc执行时将自动寻找包描述文件。如果找到,javadoc将首先对描述文件中
使用下面命令:
javadoc -private -d doc -author -version myHelloworld.java
即可以生成漂亮的关于myHelloworld.java的API文档了。
上面例子中以@开头的标记就是javadoc标记。在Java程序中正确使用javadoc标记是一个良好的注释习惯,将非常有助于javadoc自动从源代码文件生成完整的格式化API文档。下面就对各种标记进行详细说明。
◇ @author name-text 指定生成文档中的"作者"项,从JDK/SDK 1.0开始引入。name-text可以指定多个名字(使用","隔开)。文档注释可以包含多个类。
◇ {@docroot} 代表产生文档的根路径,从JDK/SDK 1.3开始引入。用法举例如下
/**
*see the copyright
*/
假定生成文档的根目录是doc,上面注释所在的文件最后生成的文件是docutilityutl.html,那么"copyright"的链接会指向..copyright.html。
◇ @deprecated deprecated-text 添加注释,表明不推荐使用该API。
◇ @exception class-name description @throw的同义标记,从JDK/SDK 1.0开始引入。
◇ {@link package.class#member label} 插入指向package.class#member的内嵌链接,从JDK/SDK 1.2开始引入。举例说明,假定注释中有如下文档:
/** Use the {@link #getComponentAt(int, int) getComponentAt} method. */
那么javadoc最终生成的HTML页面中将有如下内容
Use the getComponentAt method.
◇ @param parameter-name description 描述参数,从JDK/SDK 1.0开始引入。
◇ @return description 描述返回值,从JDK/SDK 1.0开始引入。
◇ @see reference 添加"参见"标题,其中有指向reference的链接或者文本项,从JDK/SDK 1.0开始引入。@see标记有三种形式,下面分别说明:
(1)、@see "string" 为"string"添加文本项,不产生链接。
(2)、@see Label _fcksavedurl=""URL#Value">Label" 使用HTML标记产生链接
(3)、@see package.class#member Label 使用Java语言的名字package.class #member产生链接。
◇ @serial field-description 用于缺省可序列化域的注释,从JDK/SDK 1.2开始引入。
◇ @serialField field-name field-type field-description 建立Serializable类的serialPersistentFields成员的ObjectStreamField组件的文档,从JDK/SDK 1.2开始引入。
◇ @serialData data-description data-description建立数据序列和类型的文档,从JDK/SDK 1.2开始引入。
◇ @since since-text 利用since-text内容为文档增加"since"标题,从JDK/SDK 1.1开始引入。
◇ @throws class-name description 与@exception同义。用class-name和description为输出文档添加"抛出"标题,从JDK/SDK 1.2开始引入。
◇ @version version-text 添加"版权"标题,从JDK/SDK 1.0开始引入。
上面介绍了标准doclet提供的所有标记。不过,需要注意这些标记的使用是有位置限制的。其中可以出现在类或者接口文档注释中的标记有:@see、{@link}、@since、@deprecated、@author、@version。可以出现在方法或者构造器文档注释中的标记有:@see、{@link}、@since、@deprecated、@param、@return、@throws、@exception、@serialData。可以出现在域文档注释中的有:@see、{@link}、@since、@desprecated、@serial、@serialField。
除了javadoc自身提供的标准标记以外,我们可以定制自己的标记吗?当然可以。只需要对javadoc标准的doclet程序进行扩充即可。实际上,利用javadoc提供的doclet API,不仅可以扩充doclet标记,甚至还可以改变javadoc的整个输出。为了满足需要,你可以使javadoc输出普通文本、XML文件等。由于扩充doclet涉及到Java编程,本文不再做深入介绍。
总之,javadoc提供了完整规范的API文档功能。在软件项目管理中,合理地使用javadoc不仅可以减少开发时的文档工作量,提高效率;而且还非常有利于将来软件的修改和维护。
JavaDoc 书写规范:
1、 File Header Comments : 每个文件都应该加上文件头标记,包括文件名、修改历史、版权信息和附加信息。例如:
/**
* @(#)demo.java 1.00 2002/05/27
*
* Copyright (c) 2000-2002 中国平安保险股份有限公司 版权所有
* Ping An Insurance Company of China. All rights reserved.
* This software is the confidential and proprietary
* information of Ping An Insurance Company of China.
* ("Confidential Information"). You shall not disclose
* such Confidential Information and shall use it only
* in accordance with the terms of the contract agreement
* you entered into with Ping An.
*/
2、class description:类信息,概括的描述类的功能和实现。
/** class description
*/
3、Variable Description:描述变量的意义和取值含义。
/** var variable description
*/
4、Method Description:标明每个方法的输入、输出参数和返回值类型,说明特殊变量取值的含义。相关类文档链接。
/** method description
* @param var signification
* @exception exception class name
* @return return_value return signification
*/
5、Association Description:关联类文档描述,在注释当中需要参引其它文档描述的地方,可在相应的注释当中如下插入:
/** method description
* @param var signification
* @exception exception class name
* @return return_value return signification
* @see package.class#member label
*/
6、包描述文件:概括描述包的功能和设计概要。为每个包创建一个描述文件,命名为package.html,与包的java文件放在一起。
注:javadoc生成文档时,会将该html文件的第一句放在package summary中,而把整个内容放在Overview summary中.