Java Learning之文档注释
文档注释的结构
文档注释主体的开头是一句话,概述类型或成员的作用,应自成一体。后面可跟其他句子或段落,用以详细说明类、接口、方法或字段。
除了这些描述性的段落以外,后也可跟其他段落,数量不限,并且每段以一个特殊的文档注释标签开头,如@author、@param、@returns。这些包含标签的段落提供类、接口、方法或字段的特殊信息,javadoc会以标准形式显示这些信息。
文档注释的描述性内容可以包含简单的HTML标记标签,在这里列举几个常用的:
- <i>name</i> 表示强调
- <code>name</code> 用于显示类、方法和字段的名称
- <pre>name</pre> 用于显示多行代码示例
- <p>name</p> 把说明分成多个段落
- <ul><li>name</li><ul> 用于显示无序列表等结构
- 如果想引入图片,则需要将图片放在源码目录的doc-files子目录中,且要使用类名和一个整数后缀命名这张图片。如<img src="doc-files/Circle-2.jpg">
需要注意的是,由于javadoc提取的文档是个html,因此,为了避免你的文档注释影响所生成的html文件,你的文档注释是不能包含html主结构标签的,例如<h2></h2>以及<hr></hr>。此外,还应该避免使用<a>link</a>标签引入超链接或交叉引用,如果有这方面的需求,应使用特殊的文档注释标签,后续小节将会提及。
文档注释标签
@author name
添加一个“Author:”条目,内容是指定的名字。每个类和接口的定义都应该使用这个标签,但单个方法和字段一定不能使用。如果有多个作者,可如下形式使用多个该标签:
@author Ben Evans
@author Ju Mao
要求:多位作者按顺序列出,按照作者的时间顺序,从最初作者开始列,如果作者未知,可用unascribed。
@version text
插入一个“Version:”条目,内容是,指定的文本,如:
@version 1.32, 18/11/07
表示类或方法的版本是1.32,在18年11.7号更新。每个类和接口都应该包含这个标签,单个方法和字段不能使用。这个标签经常和支持自动排序版本号的版本控制系统使用。
如果不指定命令行参数-versio, javadoc不会输出版本信息。
@param parameter-name description
把指定的参数及其说明添加到当前方法的“Parameters:”区域。
在方法和构造方法的文档注释中,每个参数都要使用一个@param标签列出,而且应该按照参数传入的顺序排列。
这个标签只能出现在方法和构造方法的文档注释中。
为便于阅读,通常采用如下格式:
@param o 要插入对象
@param index 插入对象位置
@return description
插入一个“Returns:”区域,内容是指定的说明。
每个方法都应该使用这个注释标签,除非方法返回值为void,或者是构造方法。
说明需要多长就写多长,但为了保持简洁,如下使用句子片段:
@return <code>true</code>: 成功插入
<code>false</code>: 列表中已经包含要插入的对象
@exception full-classname description
添加一个“Throws:”条目,内容是指定的异常名称和说明。方法和构造方法的文档注释应该为throws子句中的每个已检异常编写一个@exception标签,如:
@exception java.io.FileNotFoundException
如果找不到指定文件
如果方法的用户基于某种原因想捕获当前方法抛出的未检异常,@exception标签也可以为这些未检异常编写文档。
如果方法能抛出多个异常,要在相邻的几行使用多个@exception标签,而且按照异常名称的字母表顺序排列。
该标签只能出现在方法和构造方法的文档注释中。
@throws标签是@exception标签的别名。
@deprecated explanation
该标签指明随后的类型或成员弃用了,应该避免使用。
这个文本应该说明这个类或成员何时开始被弃用,如果可能的话,还应该推荐替代的类或成员,并且添加只想替代类或成员的链接,如:
@deprecated 从3.0版本开始,这个方法被{@link #setColor}替代了。
{@link #setColor}标签是java文档注释中,所用的正确的超链接引用格式,后续会说明。
@since version
指明类型或成员何时添加到API中。这个标签后面应该跟着版本号或其他形式的版本。例如:
@since JNUT 3.0
每个类型的文档注释都应该包含一个@since标签
类型版本之后添加的任何成员,都要在其文档注释中加上@since标签
@serial description
类序列化的方式是公开API的一部分。如果类能序列化,就应该在文档注释中,使用这个标签来说明序列化的格式。
在实现Serializable接口的类中,组成序列化状态的每个字段,都应该在其文档注释中使用该标签
对于使用默认序列化机制的类来说,除了声明为transient的字段,其他所有字段,包括声明为private的字段,都要在文档中使用该标签。
description应该简要说明字段及其在序列化对象中的作用。
在类和包的文档注释中,也可以使用@serial标签,指明是否为当前类或包生成“Serialized Form”界面。句法如下:
@serial include
@serial excude
@serialField name type description
实现Serializable接口的类可以声明一个名为serialPersistentFields的字段,定义序列化格式。
serialPersistentFields字段的值是一个数组,由ObjectStreamField对象组成。
对这样的类来说,在serialPersistentFields字段的文档注释里,数组中的每个元素都要使用一个@serialField标签列出,每个标签都要指明元素在类序列化状态中的名称、类型和作用。
@serialData description
实现Serializable接口的类可以定义一个writeObject()方法,用于写入数据,代替默认序列化机制提供的写入方法。
实现Externalizable接口的类可以定义一个writeExternal()方法,该方法把对象的完整状态写入序列化流。
writeObject()和writeExternal()方法的文档注释中应该使用@serialData标签,description应该说明这个方法的序列化格式。
行内文档注释标签
在文档注释中,只要能使用html文本的地方,都能使用行内标签。因为这些标签直接出现在html文本流中,所以要花括号把标签中的内容和周围的html文本隔开。
{@link reference}
{@link}标签和@see标签的作用类似,但@see标签是在专门的“See Also:”区域放一个指向引用的链接,而{@link}标签在行内插入链接。
在文档注释中,只要能使用html文本的地方,都可以使用{@link}标签。
{@link}标签可以出现在类、接口、方法或字段的第一句话,也能出现在@param、@returns、@exception、@deprecated标签的说明中。
{@link}标签中的reference使用专门的句法:
- 如果reference以引号开头,表示书名或其他出版物的名称,参数值是什么就显示什么
- 如果reference以<符号开头,表示使用<a>标签标记的任意html超链接,这个超链接会原样插入生成的文档
- 如果reference既不是引号中的字符串,也不是超链接,那么应该具备如下格式:
feature [label]
此时,javadoc会把label当成超链接的文本,指向feature指定的内容。如果没指定label(一般都不指定),javadoc会使用feature作为超链接的文本。
feature可以指向包、类型或类型的成员,使用下述格式的一种:
- pkgname:指向指定的包
@see java.lang.reflect
- pkgname.typename:指定完整的包名,指向对应的类、接口、枚举类型或注解类型
@see java.util.List
- typename:不指定包名,指向对应的类型
@see List
javadoc会搜索当前包和typename类导入的所有类,解析这个引用
- typename#methodname:指向指定类型中指定名称对应的方法或构造方法。
@see java.io.InputStream#reset
@see InputStream#close
如果类型不包含包名,会按照typename使用的方式解析。如果方法重载了,或类中定义有同名字段,这种句法会引起歧义。
- typename#methodname(paramtypes):指向指定类型中指定名称对应的方法或构造方法,而且明确指定参数的类型。
交叉引用重载的方法时可以使用这种格式,例如:
@see InputStream#read(byte[], int,int)
- #methodname
指向一个没有重载的方法或构造方法,这个方法在当前类或接口中,或者在当前类或接口的某个外层类、超类或超链接中。
这个简短格式用于指向同一个类中的其他方法。例如:
@see #setBackgroundColor
- #methodname(paramtypes)
指向当前类、接口或者某个超类、外层类中的方法或构造方法。这种格式可以指向重载的方法,因为它明确列出方法参数的类型。例如:
@see #setPosition(int,int)
- typename#fieldname:指向指定类中的指定字段
@see java.io.BufferedInputStream#buf
如果类型不包含包名,会按照typename使用的方式解析。
- #fieldname
指向一个字段,这个字段在当前类型中,或者在当前类型的某个外层类、超类或超链接中。例如:
@see #x
{@linkplain reference}
{@linkplain}标签和{@link}标签的作用类似,不过,在{@linkplain}标签生成的链接中,链接文字使用的是普通字体,而{@link}标签使用代码字体。
如果reference包含要链接的feature和指明链接替代文本的label,就要使用{@linkplain}
{@inheritDoc}
如果一个方法覆盖了超类的方法,或者实现了接口中的方法,那么这个方法的文档注释可以省略一些内容,让javadoc自动从被覆盖或被实现的方法中继承。
{@inheritDoc}标签可以继承单个标签的文本,还能在继承的基础上再添加一些说明。继承单个标签的方式如下所示:
@param index @{inheritDoc}
@return @{inheritDoc}
{@docRoot}
这个行内标签没有参数,javadoc生成文档时会把它替换成文档的根目录。
这个标签在引用外部文件的超链接中很有用,例如引用图片或者一份版权声明:
<img src="{@docroot}/images/logo.gif">
这份资料受<a href="{@docroot}/legal.html">版权保护</a>
{@literal text}
这个行内标签按照字面形式显示text,text中的所有html都会转义,而且所有javadoc标签都会被忽略。
虽然不保留空白格式,但仍适合在<pre>标签中使用。
{@code text}
这个标签和{@literal}标签的作用类似,但会使用代码字体显示text的字面量。等价于:
<code>{@literal <replaceable>text</replaceable>}</code>
{@value}
没有参数的{@value}标签在static final字段的文档注释中使用,会被替换成当前字段的常量值。
{@value reference}
这种{@value}标签的变体有一个reference参数,指向一个static final字段,会被替换成指定字段的常量值。
Java Learning之文档注释的更多相关文章
- 005、Java中使用文档注释
01. 代码如下: package TIANPAN; /** * 此处为文档注释 * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 新建Java文件的 文档注释
/** * <br> * ============================================= * * @author : Liuyc * @company : 版权 ...
- [JAVA] JAVA 文档注释
Java 程序设计环境 文档注释 javadoc JDK中包含的javadoc工具可以由源文件生成一个HTML文档. javadoc从以下几个特性中抽取信息 包 公有类与接口 公有的和受保护的构造器及 ...
- Java的文档注释之生成帮助文档
示例: /** * Title: Person类<br/> * Description:通过Person类说明Java中的文档注释<br/> * Company: *** * ...
- java文档注释规范(一)
https://blog.csdn.net/huangsiqian/article/details/82725214 Javadoc工具将从四种不同类型的“源”文件生成输出文档:Java语言类的源文件 ...
- API文档注释 Javadoc
阅读API文档 JDK包结构 JDK包是由sun开发的一组已经实现的类库,.JDK根据提供的功能不同,将类库划分为若干个包,比如用于操作输入输出的 java.io包,java程序语言设计基础类的 ...
- java文档注释--javadoc的用法
1.前言 Java中有三种注释方式.前两种分别是 // 和 /* */,主要用于代码的注释,以此来方便代码的可读性.第三种被称作说明注释或文档注释,它以 /** 开始,以 */结束,文档注释允许你在程 ...
- [java基础]文档注释
转载自:http://blog.163.com/hui_san/blog/static/5710286720104191100389/ 前言 Java 的语法与 C++ 及为相似,那么,你知道 Jav ...
- Java 文档注释
Java只是三种注释方式.前两种分别是// 和/* */,第三种被称作说明注释,它以/** 开始,以 */结束. 说明注释允许你在程序中嵌入关于程序的信息.你可以使用javadoc工具软件来生成信息, ...
随机推荐
- roadhog中如何拷贝文件
一:使用 public 目录 我们约定 public 目录下的文件会在 server 和 build 时被自动 copy 到输出目录(默认是 ./dist)下.所以可以在这里存放 favicon, i ...
- 初步认识CNN
1.机器学习 (1)监督学习:有数据和标签 (2)非监督学习:只有数据,没有标签 (3)半监督学习:监督学习+非监督学习 (4)强化学习:从经验中总结提升 (5)遗传算法:适者生存,不适者淘汰 2.神 ...
- Notes of Daily Scrum Meeting(11.11)
Notes of Daily Scrum Meeting(11.11) 今天是11月11号光棍节,不知道大家的购物热情被点燃没有,有没有买到自己心仪的东西.额,今天我们的团队任务进度和昨天差不多, 每 ...
- 第二次作业利用java语言编写计算器进行四则运算
随着第一次作业的完成,助教 牛老师又布置了第二次作业:用java语言编写一个程序然后进行四则运算用户用键盘输入一个字符来结束程序显示统计结果.一开始看到这个题目我也着实吓了一跳 因为不知道如何下手而且 ...
- c++第七次作业____最后的总结
先言: 在这过程中学到: 第二次作业Github的使用 第四次作业计算器的计算 ps:表达式处理以及计算 第五次作业文件的处理问题 第六次作业界面的设计 总结: 1.这学期的计算器,做的有点匆忙,偶尔 ...
- SQL之联合查询学习笔记
定义: 联合查询可合并多个相似的选择查询的结果集.等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNION ALL. 语法格式 UNION 可以将两个或两个以上 ...
- Unity如何判断网络状态?
根据Application.internetReachability来判断网络状态 NetworkReachability.NotReachable 网络不可用 NetworkReachability ...
- 对TCP/IP网络参数进行调整
对TCP/IP网络参数进行调整 调整TCP/IP网络参数,可以增强抗SYN Flood的能力,命令如下所示:# echo 'net.ipv4.tcp_syncookies = 1' >> ...
- Python实现熵值法确定权重
本文从以下四个方面,介绍用Python实现熵值法确定权重: 一. 熵值法介绍 二. 熵值法实现 三. Python实现熵值法示例1 四. Python实现熵值法示例2 一. 熵值法介绍 熵值法是计算指 ...
- 微信公众平台实现获取用户OpenID的方法
这篇文章主要介绍了微信公众平台实现获取用户OpenID的方法,需要开发人员经过微信授权后获取高级接口才能使用此功能,用户OpenID对于微信公众平台建设有着非常广泛的用途,需要的朋友可以参考下 本文实 ...