JDK 命令之 javadoc -- 生成API文档

文章目录

  • 命令简介
  • 命令选项
  • 中文乱码
  • javadoc 命令实例
    • 进入源代码文件所在目录,解析指定的源代码文件,生成 API 文档
    • 解析指定包下的所有源码文件,生成 API 文档
    • 指定源文件根目录,再指定具体的包路径,解析其中的源码文件,生成 API 文档
    • 指定多个源文件根目录,再指定多个包路径,解析其中的源码文件,生成 API 文档
    • 解析具体路径所指定的源代码文件,生成 API 文档
    • 指定源文件的根目录,再指定包路径,递归遍历所有的子包,解析其中的源文件,生成 API 文档
  • 文档注释格式规范
    • 简要概述
      • 关于类/接口的概要描述
      • 关于方法的概要描述
    • 详细描述
      • 关于类的详细描述
      • 关于方法的详细描述
  • 注释中的 HTML 标签
  • 注释示例代码
  • 文档注解顺序
  • 可多次使用的注解
  • 文档注解
    • @version
    • @since
    • @author
    • @see
    • @linkplain
    • @link
    • @deprecated
    • @param
    • @return
    • @throws
    • @exception
    • @value
    • @code
    • @docRoot
    • @inheritDoc
    • @literal
    • @serial
    • @serialData

命令简介

javadoc 是 Sun 公司提供的一个技术,JDK 的 bin 目录下你可以看到命令执行文件 javadoc,它从程序源代码中抽取注释内容,形成一个和源代码配套的 API 帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过 Javadoc 就可以同时形成程序的开发文档了。

javadoc 命令只能提取源代码文件中的文档注释标记 /**...*/ 内的内容。文档注释内可以包含普通文本,HTML 标记和 JavaDoc 标记,这些内容构成 JavaDoc 文档。

在实现时,javadoc 依赖于 java 编译器完成其工作。javadoc 会调用 javac 编译类、方法、变量的声明部分,而忽略它们的实现部分。javadoc 会建立类的内容丰富的内部表示,包括类层次和“使用”关系,并读取源文件中文档注释的内容,解析注释中的注解,最后生成 HTML 格式的说明文档。

实际上,javadoc 将在不带方法体的纯 stub 文件的 .java 源文件上运行。这意味着可以创建 API 的最早期版本,在编写任何代码之前,就可编写文档注释并运行 javadoc

依赖编译器可以确保 HTML 输出完全对应于实际实现,这些实现可能有赖于隐式的(而非显式的)源代码。例如,javadoc 将建立在 .class 文件中存在但在源代码中不存在的缺省构造方法(Java 语言规范的第 8.6.7 节)的文档。

当 javadoc 建立其内部文档结构时,它将加载所有引用的类。由于这一点,javadoc 必须能查找到所有引用的类,包括引导类、扩展类和用户类。有关详细信息,参见如何查找类。一般而言,所创建的类必须加载为扩展或位于 javadoc 的类路径中。

官方文档:
JDK1.7 Linux 系统环境下 https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javadoc.html
JDK1.7 Windows 系统环境下 https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html
JDK1.8 Unix 系统环境下 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javadoc.html
JDK1.8 Windows 系统环境下 https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html

命令选项

查看命令使用说明:

C:\Users\fxb>javadoc -help
用法: javadoc [options] [packagenames] [sourcefiles] [@files]-overview <file>                 从 HTML 文件读取概览文档-public                          仅显示 public 类和成员-protected                       显示 protected/public 类和成员 (默认值)-package                         显示 package/protected/public 类和成员-private                         显示所有类和成员-help                            显示命令行选项并退出-doclet <class>                  通过替代 doclet 生成输出-docletpath <path>               指定查找 doclet 类文件的位置-sourcepath <pathlist>           指定查找源文件的位置-classpath <pathlist>            指定查找用户类文件的位置-cp <pathlist>                   指定查找用户类文件的位置-exclude <pkglist>               指定要排除的程序包列表-subpackages <subpkglist>        指定要递归加载的子程序包-breakiterator                   计算带有 BreakIterator 的第一个语句-bootclasspath <pathlist>        覆盖由引导类加载器所加载的类文件的位置-source <release>                提供与指定发行版的源兼容性-extdirs <dirlist>               覆盖所安装扩展的位置-verbose                         输出有关 Javadoc 正在执行的操作的信息-locale <name>                   要使用的区域设置, 例如 en_US 或 en_US_WIN-encoding <name>                 源文件编码名称-quiet                           不显示状态消息-J<flag>                         直接将 <flag> 传递到运行时系统-X                               输出非标准选项的提要
通过标准 doclet 提供:-d <directory>                   输出文件的目标目录-use                             创建类和程序包用法页面-version                         包含 @version-author                          包含 @author-docfilessubdirs                 递归复制文档文件子目录-splitindex                      将索引分为每个字母对应一个文件-windowtitle <text>              文档的浏览器窗口标题-doctitle <html-code>            包含概览页面的标题-header <html-code>              包含每个页面的页眉文本-footer <html-code>              包含每个页面的页脚文本-top    <html-code>              包含每个页面的顶部文本-bottom <html-code>              包含每个页面的底部文本-link <url>                      创建指向位于 <url> 的 javadoc 输出的链接-linkoffline <url> <url2>        利用位于 <url2> 的程序包列表链接至位于 <ur
的文档-excludedocfilessubdir <name1>:.. 排除具有给定名称的所有文档文件子目录。-group <name> <p1>:<p2>..        在概览页面中, 将指定的程序包分组-nocomment                       不生成说明和标记, 只生成声明。-nodeprecated                    不包含 @deprecated 信息-noqualifier <name1>:<name2>:... 输出中不包括指定限定符的列表。-nosince                         不包含 @since 信息-notimestamp                     不包含隐藏时间戳-nodeprecatedlist                不生成已过时的列表-notree                          不生成类分层结构-noindex                         不生成索引-nohelp                          不生成帮助链接-nonavbar                        不生成导航栏-serialwarn                      生成有关 @serial 标记的警告-tag <name>:<locations>:<header> 指定单个参数定制标记-taglet                          要注册的 Taglet 的全限定名称-tagletpath                      Taglet 的路径-charset <charset>               用于跨平台查看生成的文档的字符集。-helpfile <file>                 包含帮助链接所链接到的文件-linksource                      以 HTML 格式生成源文件-sourcetab <tab length>          指定源中每个制表符占据的空格数-keywords                        使程序包, 类和成员信息附带 HTML 元标记-stylesheetfile <path>           用于更改生成文档的样式的文件-docencoding <name>              指定输出的字符编码

命令的语法格式:
javadoc [option] [packagenames] [sourcefiles][@fileName]

option:命令选项
packagenames:一系列包的名字,包与包之间用空格隔开,例如:java.lang java.lang.reflect java.awt。必须分别指定想要为之建立文档的每个包,javadoc 不会递归处理子包,另外也不支持使用通配符。
sourcefiles:一系列源文件名,使用空格分隔。可以混合包名和源文件名,例如:java.awt /home/src/java/awt/Graphics*.java java.lang.String。
@fileName:当需要指定的文件太多时,可以使用 @fileName 来简化,fileName 是一个文件名,该文件需要在当前工作目录下,文件中输入源文件的路径,路径之间可以使用空格分隔或者换行分隔。当然你也可以在文件中指定多个包路径,同样路径之间可以使用空格分隔或者换行分隔

选项说明
-public仅为public访问级别的类及类的成员生成javaDoc文档
-proteceted这是默认选项,仅为public和protected访问级别的类及类的成员生成javadoc文档,不包含私有和默认访问级别的类和相关的成员
-package仅为public,protected和默认访问级别的类及类的成员生成javaDoc文档,不包含私有访问级别的类和相关的成员
-private为public,protected,默认和private访问级别的类及类的成员生成javadoc文档,即显示所有的类和成员
-version解析@version标记
-author解析@author标记
-header
-footer
-bottom
-splitindex将索引分为每个字母对应一个索引文件,似乎这样的索引文件,查询体验会更好
-sourcepath 指定源文件的路径,只有指定包路径(例如,priv.lwx.javaprac.javadoc)时才需要使用该选项,如果省略该选项,javadoc 默认会在 classpath 指定的路径下查找源文件
-classpath 指定classpath,一般是指你写的类引用了其它类,而这些外部类所在路径没有在环境变量classpath中,可以通过此选项来设置,Unix下多个路径之间使用冒号分隔,Windows下使用分号分隔
-d 指定javaDoc文档的输出目录

中文乱码

生成的文档中如果中文无法正常显示可以尝试在命令中使用以下选项:

设置源码编码方式:-encoding UTF-8
指定输出的字符编码:-charset UTF-8
要使用的语言环境:-locale zh_CN

javadoc 命令实例

进入源代码文件所在目录,解析指定的源代码文件,生成 API 文档

例如,你先进入 Bus.java 的所在目录后,再执行下面的命令语句:

javadoc -d /Users/liaowenxiong/desktop/api -author -version Bus.java

这条命令编译一个名为 Bus.java 的 Java 源文件,并将生成的文档存放在目录 /Users/liaowenxiong/desktop/api,指定了选项 author 表示会提取类注释中的作者姓名,但是不会提取方法注释中的作者姓名;选项 version 表示会提取版本的信息 。

在这里插入图片描述

解析指定包下的所有源码文件,生成 API 文档

你要先进入 Source Root 目录下,一般是指 src 目录下,然后再执行下方的命令语句:

javadoc -d /Users/liaowenxiong/desktop/test/api -version -author priv.liaowenxiong.javaprac.javadoc

注:子包的源码文件不会被解析

指定源文件根目录,再指定具体的包路径,解析其中的源码文件,生成 API 文档

以下这种方式,你无需进入 Source Root 目录下:

javadoc -d /Users/liaowenxiong/desktop/test/api -sourcepath /Users/liaowenxiong/documents/IdeaProjects/java-practise/javadoc/src priv.lwx.javaprac.javadoc

上述的命令语句,你可以运行在任意目录下。因为通过 -sourcepath 指明了顶层包的位置,以及要生成的文档的包。
注:子包的源码文件不会被解析

指定多个源文件根目录,再指定多个包路径,解析其中的源码文件,生成 API 文档

你还可以指定多个源文件的根目录:

javadoc -d /Users/liaowenxiong/desktop/test/api -sourcepath /Users/liaowenxiong/documents/IdeaProjects/java-practise/javadoc/src:/Users/liaowenxiong/documents/IdeaProjects/java-practise/interface/src priv.lwx.javaprac.javadoc priv.lwx.javaprac.inter

注:
1.多个目录之间使用冒号分隔,Windows 系统下则使用分号分隔;包路径之间使用空格分隔。
2.子包的源码文件不会被解析

解析具体路径所指定的源代码文件,生成 API 文档

例如,进入到项目根目录下后,以相对路径指定两个源码文件,解析生成 API 文档,命令语句如下:

liaowenongdeair:java-practise liaowenxiong$ javadoc -d /Users/liaowenxiong/desktop/test/api -version -author javadoc/src/priv/liaowenxiong/javaprac/javadoc/Bus.java javadoc/src/priv/liaowenxiong/javaprac/javadoc/Person.java

注意,无法直接指定目录路径,提示:

liaowenongdeair:java-practise liaowenxiong$ javadoc -d /Users/liaowenxiong/desktop/test/api -version -author javadoc/src/priv/liaowenxiong/javaprac/javadoc
javadoc: 错误 - 非法的程序包名称: "javadoc/src/priv/liaowenxiong/javaprac/javadoc"

指定源文件的根目录,再指定包路径,递归遍历所有的子包,解析其中的源文件,生成 API 文档

使用 -subpackages 指定包,javadoc 会递归遍历其中所有的子包:

javadoc -d /Users/liaowenxiong/desktop/test/api -sourcepath /Users/liaowenxiong/documents/IdeaProjects/java-practise/javadoc/src -subpackages priv -exclude priv.liaowenxiong.javaprac.javadoc.test:priv.liaowenxiong.javaprac.javadoc.demo
javadoc -d /Users/liaowenxiong/desktop/test/api -sourcepath /Users/liaowenxiong/documents/IdeaProjects/java-practise/javadoc/src -subpackages priv

注:
1./Users/liaowenxiong/documents/IdeaProjects/java-practise/javadoc/src 这一串就是 Source Root 。
2.priv 这是 Source Root 下的顶级包
3.-exclude ,指定要排除的程序包列表,多个包直接使用冒号 : 分割
4.如果想要对其它包树也进行遍历,则只需要在 -subpackages 的参数上附加上即可,例如:priv:javax:org.xml.sax

文档注释格式规范

一般分为三段:

第一段:概要描述,通常用一句或者一段话简要描述该类的作用,以英文句号作为结束
第二段:详细描述,通常用一段或者多段话来详细描述该类的作用,一般每段话都以英文句号作为结束
第三段:文档注解,如果是类注释,则标注作者、版本、创建时间、参阅类等信息;如果是方法,则标注作者、参数、返回值、异常、参阅等信息

注:注释文本中的第一个英文句点 . 之前的描述文本默认是简述部分的内容,一个英文句点之后的文本内容则会出现在详细描述部分。

示例如下:

/***  Person类的简述*  <p>Person类的详细说明第一行<br>*  Person类的详细说明第二行* @author liaowenxiong* @see Bus*/

注:
1.凡涉及到类名和方法名都用 @code 标记,凡涉及到组织的,一般用 <a> 标签指明官方网址。
2.如果注释中含有指向项目中的某个文件(例如:图片)的链接地址,需要将文件存放在名为 doc-files 的目录中。

简要概述

关于类/接口的概要描述

单行示例:

package org.springframework.util;
/*** Miscellaneous {@link String} utility methods.* */
public abstract class StringUtils {

多行示例:

package java.lang;/*** Class {@code Object} is the root of the class hierarchy.* Every class has {@code Object} as a superclass. All objects,* including arrays, implement the methods of this class.*/
public class Object {}

关于方法的概要描述

详细描述

关于类的详细描述

详细描述一般用一段或者几个段落来详细描述类的作用,详细描述中可以使用 html 标签,如 <p><pre><a><ul><i> 等标签, 通常详细描述都以段落 <p> 标签开始。

详细描述和概要描述中间通常有一个空行来分割。

package org.springframework.util;/*** Miscellaneous {@link String} utility methods.** <p>Mainly for internal use within the framework; consider* <a href="http://commons.apache.org/proper/commons-lang/">Apache's Commons Lang</a>* for a more comprehensive suite of {@code String} utilities.** <p>This class delivers some simple functionality that should really be* provided by the core Java {@link String} and {@link StringBuilder}* classes. It also provides easy-to-use methods to convert between* delimited strings, such as CSV strings, and collections and arrays.**/
public abstract class StringUtils {

关于方法的详细描述

注释中的 HTML 标签

方法详细描述上经常使用 html 标签来,通常都以 p 标签开始,而且 p 标签通常都是单标签,不使用结束标签,其中使用最多的就是 p 标签和 pre 标签,ul 标签,i 标签。

pre 标签可定义预格式化的文本。被包围在 pre 标签中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体,pre 标签的一个常见应用就是用来表示计算机的源代码。

一般 p 经常结合 pre 使用,或者 pre 结合 @code 共同使用。

注意:pre 标签中如果有小于号、大于号,例如泛型,在生成 javadoc 时会报错。

/*** Check whether the given {@code CharSequence} contains actual <em>text</em>.* <p>More specifically, this method returns {@code true} if the* {@code CharSequence} is not {@code null}, its length is greater than* 0, and it contains at least one non-whitespace character.* <p><pre class="code">* StringUtils.hasText(null) = false* StringUtils.hasText("") = false* StringUtils.hasText(" ") = false* StringUtils.hasText("12345") = true* StringUtils.hasText(" 12345 ") = true* </pre>* @param str the {@code CharSequence} to check (may be {@code null})* @return {@code true} if the {@code CharSequence} is not {@code null},* its length is greater than 0, and it does not contain whitespace only* @see Character#isWhitespace*/
public static boolean hasText(@Nullable CharSequence str) {return (str != null && str.length() > 0 && containsText(str));
}

经常会使用 pre 标签来举例说明如何使用方法:

<pre>{@codePerson[] men = people.stream().filter(p -> p.getGender() == MALE).toArray(Person[]::new);
}</pre>

注释示例代码

package priv.liaowenxiong.javaprac.javadoc;/*** 这是一个汽车类* <p>汽车类说明第一行<br>* 汽车类说明第二行<p>* See also {@link #measureAverageSpeed(double, int)} <br>* See also {@link #maxSpeed} <br>* See also {@link Person} <br>* See also {@link Person#eat()} <br>* See also {@link Person#sing(String)} <br>* @author liaowenxiong<br>张学友* @version 1.0* @see #averageSpeed* @see Person* @see Person#eat()*/
public class Bus {/*** 用来表示汽车行驶过程中的最大车速** @author liaowenxiong* @see #averageSpeed*/public double maxSpeed;/*** 用来表示汽车行驶过程中的平均车速*/public double averageSpeed;/*** 用来表示汽车行驶过程中的水温*/public float waterTemperature;/*** 用来表示天气的温度*/public float temperature;public Bus() {}/*** @param distance 行驶路程,单位公里(km)* @param time     行驶时间,单位小时(h)* @return double类型 速度(km/h)* @author liaowenxiong123*/public double measureAverageSpeed(double distance, int time) {double averageSpeed = distance / time;return averageSpeed;}/*** @return double类型 速度(km/h)* @author liaowenxiong123*/public double measureMaxSpeed() {return 0;}
}

示例二:

package org.springframework.util;/*** Miscellaneous {@link String} utility methods.** <p>Mainly for internal use within the framework; consider* <a href="http://commons.apache.org/proper/commons-lang/">Apache's Commons Lang</a>* for a more comprehensive suite of {@code String} utilities.** <p>This class delivers some simple functionality that should really be* provided by the core Java {@link String} and {@link StringBuilder}* classes. It also provides easy-to-use methods to convert between* delimited strings, such as CSV strings, and collections and arrays.** @author Rod Johnson* @author Juergen Hoeller* @author Keith Donald* @author Rob Harrop* @author Rick Evans* @author Arjen Poutsma* @author Sam Brannen* @author Brian Clozel* @since 16 April 2001*/
public abstract class StringUtils {/*** Decode the given encoded URI component value. Based on the following rules:* <ul>* <li>Alphanumeric characters {@code "a"} through {@code "z"}, {@code "A"} through {@code "Z"},* and {@code "0"} through {@code "9"} stay the same.</li>* <li>Special characters {@code "-"}, {@code "_"}, {@code "."}, and {@code "*"} stay the same.</li>* <li>A sequence "{@code %<i>xy</i>}" is interpreted as a hexadecimal representation of the character.</li>* </ul>* * @param source the encoded String* @param charset the character set* @return the decoded value* @throws IllegalArgumentException when the given source contains invalid encoded sequences* @since 5.0* @see java.net.URLDecoder#decode(String, String)*/public static String uriDecode(String source, Charset charset) {}

示例三:

package com.example.demo;/*** 类 {@code OrderService} 订单服务层.** <p> 主要包括 创建订单、取消订单、查询订单等功能更** @see Order* @author <a href="mailto:mengday.zhang@gmail.com">Mengday Zhang</a>* @since 2018/5/12*/
public class OrderService {/** 默认数量 {@value} */private static final Integer QUANTITY = 1;/*** 创建订单.** <p> 创建订单需要传用户id和商品列表(商品id和商品数量).** <p><pre>{@code*  演示如何使用该方法*  List<Goods> items = new ArrayList<>();*  Goods goods = new Goods(1L, BigDecimal.ONE);*  Goods goods2 = new Goods(2L, BigDecimal.TEN);*  items.add(goods);*  items.add(goods2);**  Order order1 = new Order();*  order.setUserId("1");*  order.setItems(items);*  OrderService#createOrder(order);* }* </pre>** @param order 订单信息* @throws NullPointerException 参数信息为空* @exception IllegalArgumentException  数量不合法* @return 是否创建成功* @version 1.0* @see Order*/public boolean createOrder(Order order) throws IllegalArgumentException{Objects.requireNonNull(order);List<Goods> items = order.getItems();items.forEach(goods -> {BigDecimal quantity = goods.getQuantity();if (quantity == null || BigDecimal.ZERO.compareTo(quantity) == 0) {throw new IllegalArgumentException();}});System.out.println("create order...");return true;}
}

文档注解顺序

标记的顺序(Order of Tags)

@author (classes and interfaces only, required)
@version (classes and interfaces only, required. See footnote 1)
@param (methods and constructors only)
@return (methods only)
@exception (@throws is a synonym added in Javadoc 1.2)
@see
@since
@serial (or @serialField or @serialData)
@deprecated (see  How and When To Deprecate APIs)

可多次使用的注解

可以多次使用标记(Ordering Multiple Tags)

@author 标记应按时间顺序排列,并用逗号分隔。
@param 标记应该在参数声明的顺序列出,这使它更容易在视觉上与声明相匹配的列表。
@throws 标记 (类同 @exception)应按字母顺序列出的例外的名字。
@see 标记遵循由近到远,参数由少到多,由上到下的顺序。
// @see 标记
@see #field
@see #Constructor(Type, Type...)
@see #Constructor(Type id, Type id...)
@see #method(Type, Type,...)
@see #method(Type id, Type, id...)
@see Class
@see Class#field
@see Class#Constructor(Type, Type...)
@see Class#Constructor(Type id, Type id)
@see Class#method(Type, Type,...)
@see Class#method(Type id, Type id,...)
@see package.Class
@see package.Class#field
@see package.Class#Constructor(Type, Type...)
@see package.Class#Constructor(Type id, Type id)
@see package.Class#method(Type, Type,...)
@see package.Class#method(Type id, Type, id)
@see package

文档注解

@xxx,这玩意叫法真多,有人说是标签,有人说是标记,有人说是标注,有人说是注解…

@version

指定版本信息,只能写一个,多写的也只会提取第一个 version。

@since

指定最早出现在哪个 JDK 版本:

package java.util.stream;/**
* @since 1.8
*/
public interface Stream<T> extends BaseStream<T, Stream<T>> {}

也可以跟是一个时间,表示文件当前创建的时间:

package org.springframework.util;/**
* @since 16 April 2001
*/
public abstract class StringUtils {}

@author

指定作者,可以指定多个作者

@author liaowenxiong
@author zhangxueyou

上述这样写,生成的文档中作者名称之间是以逗号隔开的,想分行显示作者,可以写成:

@author liaowenxiong<br>zhangxueyou

更多范例:

// 作者名称
@author Rod Johnson// 作者、邮箱
@author Igor Hersht, igorh@ca.ibm.com// 作者名称,带超链接邮箱地址
@author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>// 邮件
@author shane_curcuru@us.ibm.com// 组织名称
@author Apache Software Foundation// 组织名称,带组织网址超链接
@author <a href="https://jakarta.apache.org/turbine"> Apache Jakarta Turbine</a>

@see

生成参考其它 javaDoc 文档的链接,跳至其它 javaDoc 文档或文档中的某个部位。

语法有以下几种:

1.@see 类名 [链接名称]
会生成一个链接,点击链接会跳至指定类的首页。
例如:

/**
* @see priv.liaowenxiong.javaprac.javadoc.Bus 汽车类
* @see Person
* /

1.1类名
如果这个类在当前类有导入,即 import 语句包含这个类,或者在当前类同一个包下,那么可以只写类名,如果没有则要写全路径类名,

1.2链接名称
可以指定链接名称,上面例子中,“汽车类”就是链接名称,生成对应链接时名称就显示“汽车类”,不写链接名称,默认显示 priv.liaowenxiong.javaprac.javadoc.Bus

2.@see #变量名 [链接名称]
生成一个链接,点击此链接跳至指定变量处。
没有指定类名,默认是当前类,会跳至本类指定的变量处。
变量只要写变量名即可,例如:

/**
* @see name
* /

2.1链接名称
同样可以指定链接名称,例如:@see name 姓名,链接名称就会显示“姓名”,不写链接名称就直接显示 name

3.@see #方法 [链接名称]
生成一个链接,点击此链接会跳至指定的方法处。
没有指定类名,默认是当前类,会跳至本类指定的方法处。
例如:

/**
* @see add(int, int)
* /

3.1方法签名
方法需要写方法名和参数类型列表,没有参数也要写小括号,例如:@see show()

4.@see 类名#方法名 [链接名称]
生成一个链接,点击此链接会跳至指定的其它类的指定方法处。

示例一:

/**
* @see Person#add(int, int)
* /

示例二:

/**
* @see java.net.URLDecoder#decode(String, String)
*/
public static String uriDecode(String source, Charset charset){}

4.1类名
如果这个类在当前类有导入,则直接写类名即可,如果没有则要写全路径类名。

5.@see 类名#变量名 [链接名称]
生成一个链接,点击此链接会跳至指定的其它类的指定变量处。
例如:

/**
* 
* @see Person#skinColor
* /

5.1类名
如果这个类在当前类有导入,则直接写类名即可,如果没有则要写全路径类名。

6.可以指定包名

/**
* @see <a href="package-summary.html">java.util.stream</a>
*/

7.可以指定纯文本,不含链接

/**
* @see "Person"
*/

如上加上双引号,只会在 See also【另请参阅】下显示文字 Person,无法点击跳转。

@linkplain

语法:{@linkplain package.class#member label}
作用:与{@link}相同,除了链接的标签以纯文本显示,而不是以代码字体显示,当标签是纯文本时很有用。

@link

生成内联链接,它和 @see 标记的区别在于 @link 标记能够嵌入到注释语句中,其在使用的地方产生超链接,而不是在"See Also"列表中生成。

/**
* Use the {@link #getComponentAt(int, int) getComponentAt} method.
* /
* 

Javadoc 会将其转换为如下代码:

Use the <a href="Component.html#getComponentAt(int, int)">getComponentAt</a> method.

另外 @link{@linkplain} 类似,只是 @link 是代码字体格式,而 {@linkplain} 是纯文本字体格式。

在这里插入图片描述

1.跳至当前类中的指定方法
语法格式:
{@link #方法名(参数类型) [链接名称]}

例如:

/*** See also {@link #measureAverageSpeed(double, int) measureAverageSpeed} */

1.1链接名称
链接名称可以省略,那么链接名称就显示方法名和参数

2.跳至当前类中的指定变量处
语法格式:
{@link #变量名 [链接名称]}

例如:

/**
* See also {@link #maxSpeed}
* /

2.1链接名称
可以指定链接名称,不指定则显示变量名

3.跳至指定的其它类首页
语法格式:
{@link 类名 [链接名称]}

例如:

/*** See also {@link priv.liaowenxiong.javaprac.javadoc.Person}*/

3.1类名
如果在当前类的同一个包下或者当前类有导入此类,则直接写类名即可,否则需要写全路径类名

3.2链接名称
可以指定自定义的链接名称,不指定则显示类名

4.跳至指定的其它类的指定变量处
语法格式:
{@link 类名#变量名 [链接名称]}

例如:

/*** See also {@link Person#skinColor 肤色}*/

4.1类名
如果在当前类的同一个包下或者当前类有导入此类,则直接写类名即可,否则需要写全路径类名

4.2链接名称
可以指定自定义的链接名称,不指定则显示“类名.变量名”

5.跳至指定的其它类的指定方法处

语法格式:
{@link 类名#方法名(参数类型) [链接名称]}

例如:

/*** See also {@link Person#eat() eat()}* See also {@link Person#sing(String)}*/

5.1类名
如果在当前类的同一个包下或者当前类有导入此类,则直接写类名即可,否则需要写全路径类名

5.2链接名称
可以指定自定义的链接名称,如果不指定则会显示“类名.方法签名”,例如:Person.sing(String)

@deprecated

用来标明被标记的类,变量或方法已过时,不提倡使用(类名/方法名上会有一个划去的横杠)。

语法:
@deprecated deprecated-text

针对1.2及之后版本:

/*** @deprecated  As of JDK 1.1, replaced by*              {@link #setBounds(int,int,int,int)}*/

针对1.1版本:

/*** @deprecated As of JDK 1.1, replaced by setBounds* @see #setBounds(int,int,int,int)*/

@param

语法:@param parameter-name description
作用:对方法中的参数进行说明,我们应该针对方法的每一个参数都使用一个该标记。

描述方法的参数,必须要有文字描述,否则生成文档时会提示“警告: @param 没有说明”

示例:

/**
* @param str the {@code CharSequence} to check (may be {@code null})
*/
public static boolean containsWhitespace(@Nullable CharSequence str) {}

一般类中支持泛型时会通过 @param 来解释泛型的类型:

/**
* @param <E> the type of elements in this list
*/
public interface List<E> extends Collection<E> {}

@return

语法:@return description

描述方法的返回值,如果没有返回值,不要加上这个注解,生成文档时会提示“错误: @return 的用法无效”

示例:

/**
* @return {@code true} if the {@code String} is not {@code null}, its
*/
public static boolean hasText(@Nullable String str){}

@throws

语法:
@throws class-name description

指明方法可能抛出的异常,必须文字描述抛出异常的原因,否则生成文档时会提示“ 警告: @throws 没有说明”。
如果会抛出多个异常,需要写多个此注解。

示例一:

/**
* @throws ArrayIndexOutOfBoundsException 可能抛出数组索引越界异常
* @author liaowenxiong123
*/

示例二:

/**
* @throws IllegalArgumentException when the given source contains invalid encoded sequences
*/
public static String uriDecode(String source, Charset charset){}

@exception

这个注解已经被 @throws 取代了,同样表示可能抛出的异常,不论是编译时异常还是运行时异常

/**
* @exception IllegalArgumentException if <code>key</code> is null.
*/
public static Object get(String key) throws IllegalArgumentException {}

@value

用于标注在常量上,{@value} 用于表示常量的值

语法格式:
{@value package.class#field}

当在常量字段的注释中使用 {@value} 时(没有任何参数),它将显示该常量的值:

/*** The value of this constant is {@value}.*/
public static final String SCRIPT_START = "script";
/** 默认数量 {@value} */
private static final Integer QUANTITY = 1;

当在任何 doc 注释中与参数 package.class#field 字段一起使用时,它将显示指定常量的值:

/*** Evaluates the script starting with {@value #SCRIPT_START}.*/
public String evalScript(String script) {
}

@code

声明其中的内容是代码注释。
将文本标记为代码样式的文本,在 code 标签内部可以使用 <> 等不会被解释成 html 标签,code 标签有自己的样式,但是样式效果不明显。所以使用的时候,必须借助 html 标签 <pre>,否则样式是无法保留的。

语法格式:
{@code text}

生成文档时,{@code text} 会被解析成 <code> text </code>

使用方式:
<pre>{@code代码}</pre>

@docRoot

代表生成文档的根目录。

语法格式:
{@docRoot}

例如,在注释中的用法如下:

/**
* See the <a href="{@docRoot}/copyright.html">Copyright</a>.
*/

另请参阅:
{@docRoot}

@inheritDoc

语法格式:
{@inheritDoc}

@inheritDoc 用于注解在重写方法或者子类上,用于继承父类中的Javadoc。
基类的文档注释被继承到了子类,子类可以再加入自己的注释(特殊化扩展)。
@return @param @throws 也会被继承。

@literal

显示文本,而不将文本解析为HTML标记或嵌套的Javadoc标记。

语法:
{@literal text}

例如:

/**
*
* {@literal A<p>C}
* /

上面的文本 A<B>C 会原样显示出来,而不会把 <p> 解释为段落标记。

@serial

用于默认可序列化字段的doc注释中。

语法格式:
@serial field-description | include | exclude

field-description 应该解释字段的含义并列出可接受的值。

include和exclude参数标识是否应将 类 或 包 包括在序列化窗体页中或将其排除在序列化窗体页之外。如下:

public 或 protected 类继承了Serializable 则是 included ,除非类(或者包) 标记为 @serial exclude.

private 或 package-private 类继承了Serializable 则是excluded,除非类(或者包) 标记为@serial include.

注意:类级别的@serial标记覆盖包级别的@serial标记。

@serialData

语法:@serialField field-name field-type field-description

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache.camel_带有Spring Boot 2支持的Apache Camel 2.22发布

apache.camel今天&#xff0c;我们发布了最新的Apache Camel 2.22.0版本 &#xff0c;这是第一个正式完全支持Spring Boot 2的版本。这是一项重大的工作&#xff0c;因为针对像Apache Camel这样的大型框架将Spring Boot v1升级到v2付出了很多努力–感谢骆驼队和他们的贡献。 对…

纯注解的开发

使用纯注解开发 目录结构 JdbcConfiguration package com.itheima.Config;import com.mchange.v2.c3p0.ComboPooledDataSource; import org.apache.commons.dbutils.QueryRunner; import org.springframework.beans.factory.annotation.Value; import org.springframework.co…

IntelliJ IDEA forMac 如何生成项目的javadoc(API文档)

1.在菜单栏&#xff0c;点击 Tools -> Generate JavaDoc… 2.根据你自己的需要&#xff0c;设置解析源文件的范围、设置文档输出目录、设置资源的访问权限范围、字符编码、堆内存大小等。

vaadin_Vaadin Flow –奇妙的鹿

vaadin您可能知道&#xff0c;Vaadin是Java上最受欢迎的Web框架之一&#xff1a; https://zeroturnaround.com/rebellabs/java-web-frameworks-index-by-rebellabs/ https://javapipe.com/hosting/blog/best-java-web-frameworks/ 最近发布了此Web UI开发框架的新版本– Vaa…

Spring和Junit整合

一、引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency>二、在测试类中修改 &#xff08;1&#xff09;不带有配置文件的修改…

什么是stub文件_stub code

存根, 占位代码&#xff0c;占坑代码&#xff0c;桩代码&#xff0c;粘合代码&#xff0c;残存代码, 指满足形式要求但没有实现具体功能的占坑/代理代码。 stub code 给出的实现是临时性的/待编辑的。它使得程序在结构上能够符合标准&#xff0c;又能够使程序员可以暂时不编辑…

子类重写父类变量_为什么在子类中不重写超类的实例变量

子类重写父类变量当我们在父类和子类中创建一个具有相同名称的变量&#xff0c;并尝试使用持有子类对象的父类引用访问它时&#xff0c;我们会得到什么&#xff1f; 为了理解这一点&#xff0c;让我们考虑下面的示例&#xff0c;在该示例中&#xff0c;我们在Parent和Child类中…

Spring基于 XML 的声明式事务控制(配置方式)

一、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

javadoc - Java API 文档生成器(Windows版本)

文章目录简介命令语法结构Javadoc Doclets术语带文档的类引用类外部引用类源文件源代码文件包注释文件概述注释文件其他未处理文件生成的文件基本内容页交叉参考页支持文件HTML 框架生成的文件结构文档注释注释源代码JAVADOC 标记author name-textdeprecated deprecated-textex…

光缆故障测试_简单的测试可以防止最严重的故障

光缆故障测试错误处理是软件开发中最困难且被忽略的部分之一&#xff0c;而且如果系统是分布式的&#xff0c;那么这将变得更加困难。 不错的论文写在“ 简单测试可以预防最关键的故障” 主题上。 每个开发人员都应该阅读本文。 我将尝试总结本文的主要内容&#xff0c;但建议…

使用aop解决事务问题(xml版)

一、引入依赖 pom.xml代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…

印象大使_基本服务-使用大使网关

印象大使这是我对Knative服务进行实验的延续&#xff0c;这次是围绕在Knative服务应用程序之上构建网关。 这建立在我之前的两篇文章的基础上- 使用Knative部署Spring Boot App以及在Knative中进行服务到服务的调用 。 为什么要在Knative应用程序之上使用网关 为了解释这一点&…

Eclipse 如何生成项目的javadoc(API 文档)

文章目录生成 javadoc 的三种方法乱码问题生成 javadoc 的三种方法 1.在项目列表中按右键&#xff0c;选择 Export&#xff0c;然后在 Export 对话框中选择 Java 下的 Javadoc&#xff0c;然后点击 Next 最后按 Finish 提交即可开始生成文档。 2.用菜单选择&#xff1a;File…

使用注解版AOP解决事务问题

一、注解版和xml版的区别 1、 通知的四种常用类型 &#xff08;1&#xff09;aop:before 作用&#xff1a; 用于配置前置通知。指定增强的方法在切入点方法之前执行 属性&#xff1a; method:用于指定通知类中的增强方法名称 ponitcut-ref&#xff1a;用于指定切入点的表达式…

Windows系统下彻底卸载MySQL数据库

1.正常卸载MySQL数据库 2.将 C:/ProgramData 目录下的子目录 MySQL 删除 注意&#xff1a;目录 ProgramData 是隐藏目录&#xff0c;你正常情况下看不到&#xff0c;你可以在文件地址栏输入 C:/ProgramData 进入该目录下。

ibm收购red hat_IBM将收购Red Hat:面向Java的初衷

ibm收购red hatOracle公司近九年前完成了收购Sun Microsystems的过程。 那是当时的大新闻&#xff0c;今天也宣布了类似的大新闻&#xff1a; IBM和Red Hat已经同意IBM收购Red Hat 。 IBM主页面宣布“ IBM收购Red Hat”。 然后&#xff0c;它说&#xff1a;“这将改变一切。” …

Windows系统的MySQL目录结构

安装目录 安装 MySQL 时&#xff0c;如果我选择安装在 D:\develop\MySQL&#xff0c;那么你安装好之后点击文件夹 MySQL 可以看到如下内容&#xff1a; 目录 bin&#xff1a;存放二进制可执行文件 目录 data&#xff1a;存放数据库日志文件等 目录 include&#xff1a;C语言…

java监控数据库性能_Java:GraalVM数据库流性能

java监控数据库性能GraalVM是JVM块的新成员。 它是一个开源虚拟机&#xff0c;能够同时运行多种编程语言&#xff0c;例如Java&#xff0c;Rust和JavaScript。 GraalVM还具有一个新的内部代码优化器管道&#xff0c;与某些条件下的其他JVM相比&#xff0c;它可以显着提高性能。…

@Param注解注意事项(小的细节)

一、关于dao和UserDao.xml的参数问题 dao接口里是否有Param进行映射&#xff0c;和UserDao.xml的参数的书写格式有关系 多参数类型的时候&#xff0c;使用param 如果dao接口里写了Param&#xff08;“uid”&#xff09;&#xff0c;UserDao.xml的参数必须要写#{uid} 或者#{p…