Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java 文档注解最全详解,建议收藏!

Java 文档注解最全详解,建议收藏!

作者头像
Java极客技术
发布于 2023-02-23 09:39:42
发布于 2023-02-23 09:39:42
1.8K0
举报
文章被收录于专栏:Java极客技术Java极客技术

一、简介

在开发项目的时候,我们可能时不时需要查阅官方 JDK API 文档,以便于更加清晰的了解某个类方法的用途以及正确的使用姿势,比如关于 HashMap 类的介绍。

打开 JDK 源码,你会看到代码上有大量的文档注释,包括包的描述、类的描述、方法描述以及类属性的描述说明等等,同时你还会惊奇的发现,源码上的注释与 JDK API 文档中的描述如出一辙,以 HashMap 为例,类注释描述如下!

实际上,JDK API 文档是根据 Javadoc 工具生成的!

那什么是 Javadoc 呢?

官方回答: Javadoc is a tool for generating API documentation in HTML format from doc comments in source code.

翻译过来的意思是:Javadoc 是一款能根据源代码中的文档注释来产生 HTML 格式的 API 文档的工具

简单的说就是,只要你在 java 源码中按照标准的格式写注释,就可以利用 javadoc 这款工具自动生成配套的 java API 文档。

本篇文章的主要内容,就是总结 java 文档注释应该按照什么样的格式来写,只要格式对了,java API 文档就能按照工具来自动生成。

二、文档注释格式总结

Java 文档注释是专门为了用 javadoc 工具自动生成文档而编写的一套注释标准,通过 javadoc 命令可以把文档注释中的内容生成文档,并输出到 HTML 文件中,与一般的注释有所不同,相关的规则如下:

  • 所有的 Java 文档注释都以/**开头,*/结尾,而不是/*//
  • 文档注释覆盖范围包括:类、接口、方法、构造器、成员字段,如果写在其他位置,比如函数内部,被视为无效的文档注释
  • 每个 Java 文档注释都要和其后对应的类/方法/字段/包保持同样的缩进
  • Java 文档注释的内容,支持采用HTML语法规则书写,同时也支持一些额外的辅助标签

在类/方法上的文档标注一般分为三段,顺序如下:

  • 第一段:概要描述,通常用一句话或者一段话简要描述该类的作用,以英文句号结束,这句话会被提取并放到索引目录中
  • 第二段:详细描述,通常用一段话或者多段话详细描述该类的作用,每段话都以英文句号结束,详细描述中可以使用 html 标签,如<p><pre><a><li>等标签
  • 第三段:文档标记,通常用于标注作者、创建时间、参阅类等信息,描述部分和文档标记之间必须空一行

比如java.util.Arrays类和部分方法,源码 java 文档注释如下!

代码语言:javascript
AI代码解释
复制
package java.util;

/**
 * This class contains various methods for manipulating arrays (such as
 * sorting and searching). This class also contains a static factory
 * that allows arrays to be viewed as lists.
 *
 * <p>The documentation for the methods contained in this class includes
 * briefs description of the <i>implementations</i>. Such descriptions should
 * be regarded as <i>implementation notes</i>, rather than parts of the
 * <i>specification</i>. Implementors should feel free to substitute other
 * algorithms, so long as the specification itself is adhered to. (For
 * example, the algorithm used by {@code sort(Object[])} does not have to be
 * a MergeSort, but it does have to be <i>stable</i>.)
 *
 * <p>This class is a member of the
 * <a href="{@docRoot}/../technotes/guides/collections/index.html">
 * Java Collections Framework</a>.
 *
 * @author Josh Bloch
 * @author Neal Gafter
 * @author John Rose
 * @since  1.2
 */
public class Arrays {
 
    /**
     * Sorts the specified array into ascending numerical order.
     *
     * <p>Implementation note: The sorting algorithm is a Dual-Pivot Quicksort
     * by Vladimir Yaroslavskiy, Jon Bentley, and Joshua Bloch. This algorithm
     * offers O(n log(n)) performance on many data sets that cause other
     * quicksorts to degrade to quadratic performance, and is typically
     * faster than traditional (one-pivot) Quicksort implementations.
     *
     * @param a the array to be sorted
     */
    public static void sort(int[] a) {
        DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
    }
}

三、文档标签总结

Javadoc 工具可以识别文档注释中的一些特殊标签,这些标签一般以@开头,后跟一个指定的名字,有的也以{@开头,以}结束,javadoc 可以识别的标签如下!

  • @author

说明:用于指明作者或者组织,可以附加邮箱或者超链接,如果有多少个作者就用多少个该标签。适用范围:包、 类、接口 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @author xxxx
 * @author xxx@123.com
 * @author <a href="mailto:xxx@123.com">xxxxx</a>
 */
  • @since

说明:用于指明最早出现在哪个版本,可填版本号或日期,有时也可表明可运行的JDK版本。适用范围:包、类、接口、方法、成员属性、构造器 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @since 1.4
 * @since 15 April 2001
 * @since JDK1.5
 */
  • @version

说明:用于指明当前版本号。适用范围:包、 类、接口 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @version 1.8.3.4
 */
  • @code

说明:用于将一些关键字或代码解析成代码样式。适用范围:包、类、接口、方法、成员属性、构造器 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * xxxx,{@code int var = 1;}xxxx
 */
  • @return

说明:对函数返回值的注释。适用范围:方法 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @return <code>true</code> 执行成功;<code>false</code> 执行失败.
 */
  • @param

说明:用于方法的入参名及描述信息。适用范围:构造器、方法 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @param img the image to be drawn
 */
  • @value

说明:只能用于对常量进行注释,该标签常用于写在字段上的 Javadoc 注释。适用范围:方法、成员属性 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * Default start value. {@value #START_VALUE}
 */
  • @throws@exception

说明:用户描述构造函数或方法所会抛出的异常。适用范围:方法、构造器 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @throws IllegalArgumentException
 *         if {@code fromIndex > toIndex}
 */
  • @link@linkplain@see

说明:用于创建一个超链接到相关代码。适用范围:包、类、接口、方法、成员属性、构造器 注意事项:1、@link@linkplain的区别在于:@link直接将将超链接中的地址当作显示的文本,其格式为 {@link 地址};而 @linkplain可以自行设定显示的文本,其格式为{@link 地址 显示文本},三个字段用空格隔开。2、@link@see的区别在于:@link可以放在某一行中的任意位置;而 @see必须放在某一行中的最开始。

案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * xxx {@link java.lang.String#charAt(int)}
 * xxx {@link #sort(Object[])}
 * xxx {@linkplain Comparable natural ordering}
 * @see #deepHashCode(Object[])
 */
  • @inheritDoc

说明:用于继承父类的 javadoc 注释,父类的文档注释会被拷贝到子类。适用范围:方法 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * {@inheritDoc}
 * <p>
 * The speed of tiger will be returned.
 * 
 * @return the speed of tiger 
 */
  • @deprecated

说明:告诉用户该 API 已过时,并且已被哪些新的 API 取代了。用@see@link指向新的API。该旧的 API 之所以不删掉,通常是为了兼容性考虑。。适用范围:包、类、接口、方法、成员属性、构造器 案例如下:

代码语言:javascript
AI代码解释
复制
/**
* @deprecated As of JDK 1.1, replaced by 
* {@link #setBounds(int, int, int, int)}
*/
  • @serial

说明:说明一个序列化属性。适用范围:方法、成员属性 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @serial description
 */
  • @serialData

说明:用于说明通过 writeObject() 和 writeExternal() 方法写的数据。。适用范围:方法、成员属性 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @serialData description
 */
  • @serialField

说明:用于说明一个 ObjectStreamField 组件。适用范围:方法、成员属性 案例如下:

代码语言:javascript
AI代码解释
复制
/**
 * @serialField name type description
 */

最后,在使用文档注释时,通常会按照如下顺序进行使用。

  • @author
  • @version
  • @param
  • @return
  • @exception / @throws
  • @see
  • @since
  • @serial / @serialField / @serialData
  • @deprecated

三、java api 文档生成方式

Javadoc 是 Sun 公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释,然后形成一个和源代码配套的 API 帮助文档。

文档的创建命令如下:

代码语言:javascript
AI代码解释
复制
javadoc -d 文档存放目录 -author -version 源文件名.java

这条命令编译一个名为源文件名.java的 java 源文件,并将生成的文档存放在文档存放目录指定的目录下,生成的文档中index.html就是文档的首页。

-author-version两个选项可选项,使用者可以通过javadoc -help命令查看 javadoc 使用说明。

注意:Javadoc 默认只提取 public、protected 修饰的部分,如果要提取 private 修饰的部分,需要使用 -private。

下面是一个使用说明文档注释的简单实例。

代码语言:javascript
AI代码解释
复制
/**
 * 这个类演示了文档注释
 *
 * @author Ayan Amhed
 * @version 1.2
 */
public class SquareNum {
    /**
     * This method returns the square of num.
     * This is a multiline description. You can use
     * as many lines as you like.
     *
     * @param num The value to be squared.
     * @return num squared.
     */
    public double square(double num) {
        return num * num;
    }

    /**
     * This method inputs a number from the user.
     *
     * @return The value input as a double.
     * @throws IOException On input error.
     * @see IOException
     */
    public double getNumber() throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader inData = new BufferedReader(isr);
        String str;
        str = inData.readLine();
        return (new Double(str)).doubleValue();
    }

    /**
     * This method demonstrates square().
     *
     * @param args Unused.
     * @return Nothing.
     * @throws IOException On input error.
     * @see IOException
     */
    public static void main(String args[]) throws IOException {
        SquareNum ob = new SquareNum();
        double val;
        System.out.println("Enter value to be squared: ");
        val = ob.getNumber();
        val = ob.square(val);
        System.out.println("Squared value is " + val);
    }
}

使用 javadoc 工具处理 SquareNum.java 文件,生成 javadoc api 文档,在命令行输入如下命令,即可实现文档的生成!

代码语言:javascript
AI代码解释
复制
javadoc SquareNum.java

四、小结

Javadoc 是一款为程序生成 API 文档的工具,只需按照规定的格式编写代码文档注释,即可生成 API 的帮助文档。

本文主要围绕 java 文档标签的使用进行介绍,如果有错误的地方,欢迎网友留言指出!

五、参考

1、javadoc 官方文档

2、博客园 - 小白都看得懂的Javadoc使用教程

3、菜鸟教程 - Java 文档注释

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java极客技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
改善Java文档的理由、建议和技巧
我非常确定,作为开发人员我们都喜爱技术文档。我们喜欢阅读文档、写文档,更不用说维护文档了,我简直爱死它了!
哲洛不闹
2018/09/19
3840
改善Java文档的理由、建议和技巧
Java基础系列(十一):注释
曾经看到过一句话:“我最烦的就是写注释和看不写注释的代码”,也许有玩笑的成分的在,但是不可否认的是,注释对于代码来说,是必不可少的,它可以大大的增加代码的可读性,好的注释就像好看的皮囊,让人赏心悦目。
山禾说
2019/01/21
1.1K0
这些JavaDoc中的注释你都知道了吗?
行注释和段注释大多数都不陌生,而说明注释了解的可能少一点,因为它支持有很多标签,说明注释允许在程序中嵌入相关程序信息并使用HTML标签。
beifengtz
2019/06/03
1.3K0
Java概述与基础知识
编译性语言: c / c++ 区别是:解释性语言,编译后的代码,不能直接被机器执行,需要解释器来执行, 编译性语言, 编译后的代码, 可以直接被机器执行。
timerring
2023/04/17
3010
Java概述与基础知识
Kotlin 文档注释的生成-Dokka 1.6.0
我们如果是进行SDK或者API的提供者。那么当编写过多的代码之后。需要提供规范的API帮助文档。
zinyan.com
2023/07/13
9540
Kotlin 文档注释的生成-Dokka 1.6.0
Javadoc 使用详解
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javadoc.html
全栈程序员站长
2022/09/30
1.3K0
Javadoc 使用详解
Java的三种注释
包含在“/*”和“*/”之间,能注释很多行的内容。为了可读性比较好,一般首行和尾行不写注释信息(这样也比较美观好看),如图所示。
全栈程序员站长
2022/09/08
1K0
Java的三种注释
【愚公系列】2021年12月 Java教学课程 04-Java语言三种注释
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。
愚公搬代码
2021/12/28
2040
一篇文章,全面掌握Java自定义注解(Annontation)
注解(Annontation),Java5引入的新特性,位于java.lang.annotation包中。提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。是一种说明、配置、描述性的信息,与具体业务无关,也不会影响正常的业务逻辑。但我们可以用反射机制来进行校验、赋值等操作。
程序新视界
2022/05/09
4.8K0
《Java编程思想》第二章:一切都是对象 原
                                                                                     ——Luduing Wittgerstein(1889-1951)
云飞扬
2019/03/13
6700
注解总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHq0F5VV-1584750416842)(img/@Override底层注解.png)]
用户7073689
2020/03/24
5700
Effective-java-读书笔记之方法
方法的参数限制, 应该在文档中指明, 并且在方法体的开头处检查参数, 以强制施加这些限制.
特特
2022/10/17
5280
java文档注释报错,java文档注释主要使用方法「建议收藏」
3./**…*/则是为支持jdk工具javadoc.exe而特有的注释语句。这个也就是我们所知的文档注释
全栈程序员站长
2022/11/15
1.1K0
房上的猫:JavaDoc注释
//这是一个注释 /*   *这是一个演示程序   */ /**    *@这是JavaDoc注释。   */ JavaDoc注释    背景:       javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。   语法规则:      (1)JavaDoc注释以"/**"开头,以"*/"结尾      (2)每个注释包含一
房上的猫
2018/03/14
1.2K0
房上的猫:JavaDoc注释
Java基础-语法(上)
本节简单介绍一下java的基础语法,了解java的语法规范、注释、标识符及修饰符相关内容。
reload
2024/01/12
3161
Java基础-语法(上)
javadoc 原
javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。
wuweixiang
2018/08/14
5000
细读 Thinking in Java (一)一切都是对象[通俗易懂]
《Thinking in Java》做为Java最经典的学习书籍之一,不论是对于学习java的新手或是有一定经验的程序员来说都有不同的学习价值,在工作的这两年多当中由于种种杂事一直没时间拜读此书,近期决定坚持每天抽空细读一下,一方面巩固一下java基础,另一方面要找一下学习的状态,每天忙于项目不停赶进度写代码而忽略了学习也是不行的,所以感觉通过写blog来坚持读书学习也是很不错的,本系列blog参照的是《Java编程思想第4版》,第一章“对象导论”简要介绍了Java语言的一些重要特性和知识点,我们从第二章“一切都是对象”开始记录。
全栈程序员站长
2022/09/15
7600
细读 Thinking in Java (一)一切都是对象[通俗易懂]
阿里Java编程规约【三】代码格式
1. 【强制】如果大括号内为空,简洁地写成{}即可,大括号中间无需换行和空格;如果是非空代码块,则: 1)左大括号前不换行。 2)左大括号后换行。 3)右大括号前换行。 4)右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
acc8226
2022/05/17
1.2K0
【JavaSE专栏9】Java 注释知多少
文档注释是 Java 特有的,文档注释可通过 JavaDoc 工具转换为 HTML 文件。
Designer 小郑
2023/08/01
2450
【JavaSE专栏9】Java 注释知多少
Java 基础 - 注解机制详解
注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。它主要的作用有以下四方面:
俺也想起舞
2021/12/17
8060
相关推荐
改善Java文档的理由、建议和技巧
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场