【JAVA】javadoc,如何生成标准的JAVA API文档

 

4cdbd0f2fe404d5fb6849eb73a7ce9a0.png

目录

1.什么是JAVA DOC

2.标签

3.命令


 

1.什么是JAVA DOC

当我们写完JAVA代码,别人要调用我们的代码的时候要是没有API文档是很痛苦的,只能跟进源码去一个个的看,一个个方法的猜,并且JAVA本来就不是一个重复造轮子的游戏,一般一些常用的轮子早就已经早好了,直接拿来用就是。但是拿来用的时候往往由于API文档的缺失或者不规范,造成使用上的很多痛苦,大家在很多实际工作中经常也会遇到类似的场景:

公司多年累积下来的工具类或者提供底层能力的公共模块里面积累了很多能力,公司为了代码规范也要求我们尽量去调用这些工具类或者公共模块。但是:

  • 没有API文档或者文档写的很烂

  • 参数列表动不动就很长,数十个甚至几十个参数

  • 参数列表没有注释,出现一些莫名其妙的参数,都不知道怎么传

  • 方法名也不能见名知意

  • 造成往往要用这些公共能力的时候甚至还要去读源码

有读源码这个时间,可能自己都重新写了一个了,而且自己写的,可能比祖传下来的那些工具类还更“清爽”一些。于是系统内越来越多工具类堆积,重复造的轮子越来越多,“屎山”越堆越高。

即使有时候我们有API文档,但是各类API文档,格式,内容都不相同,没有统一的规范,读起来其实也很慢。所以有没有一个统一的规范喃?JAVA官方其实早就想到了这个问题,在JDK1.1发布的时候就附带了JAVA DOC,支持用标签注释的方式给各个方法做好规范的说明,然后用JAVA命令一键生成可视化的HTML页面作为API。

2.标签

标签是JAVA DOC的核心,用什么标签,JAVA DOC最后就会对应生成哪些API文档内容:

@author:

   /*** @author John Doe*/public class MyClass {}

@version:

   /*** @version 1.0.1*/public class MyClass {}

@param:

   /*** Concatenates two strings.* @param string1 The first string to concatenate.* @param string2 The second string to concatenate.* @return The concatenated string.*/public String concatenateStrings(String string1, String string2) {return string1 + string2;}

@return:

   /*** Returns the sum of two integers.* @param num1 The first integer.* @param num2 The second integer.* @return The sum of num1 and num2.*/public int add(int num1, int num2) {return num1 + num2;}

@throws 或 @exception: 描述方法可能抛出的异常。

   /*** Divides two numbers and throws an exception if the divisor is zero.* @param dividend The number to be divided.* @param divisor The divisor.* @return The result of the division.* @throws ArithmeticException If the divisor is zero.*/public double safeDivide(double dividend, double divisor) {if (divisor == 0) {throw new ArithmeticException("Divisor cannot be zero.");}return dividend / divisor;}

@see:

   /*** See {@link java.util.ArrayList} for more information on dynamic arrays.*/public class MyDynamicArray {}

@link: 创建一个链接到其他类、方法或字段的链接。

   /*** This method uses the {@link java.util.Collections#shuffle(List)} method to randomize the list.*/public void shuffleList(List<?> list) {Collections.shuffle(list);}

@since: 指定该元素是从哪个版本开始引入的。

   /*** A utility class for working with dates.* @since 1.5*/public class DateUtils {}

@deprecated: 标记不再推荐使用的元素。

   /*** Old method that should not be used anymore.* @deprecated Use the {@link #newMethod()} instead.*/@Deprecatedpublic void oldMethod() {}

@inheritDoc: 继承父类或接口的 JavaDoc。

    /*** {@inheritDoc}*/@Overridepublic void someMethod() {// Implementation}

@parametricType: 用于描述泛型类型参数。

    /*** Represents a generic collection.* @param <E> The type of elements in this collection.*/public class MyCollection<E> {}

@serialField 和 @serialData: 用于序列化类的字段和数据。

/*** A serializable class.* @serialField name The name of the object.* @serialData The length of the name.*/
@Serial
private static final long serialVersionUID = 1L;
​
private String name;
// serialization logic

3.命令

javadoc命令用于生成API文档,其支持多种参数:

javadoc [options] [source files]

常用参数:

  • -d <directory>: 指定输出目录,存放生成的 HTML 文件。
  • -sourcepath <pathlist>: 指定源文件路径,可以是多个路径,用分隔符(如冒号或分号)分隔。
  • -subpackages <packagename>: 递归处理指定包及其子包下的所有类。
  • -classpath <classpath>: 设置类路径,用于解析类型引用。
  • -encoding <encoding>: 指定源文件的字符编码。
  • -charset <charset>: 指定生成文档时使用的字符集。
  • -windowtitle <text>: 设置文档窗口标题。
  • -doctitle <text>: 设置文档页面的标题。
  • -overview <filename>: 指定概述文件,用于文档的首页内容。
  • -exclude <patternlist>: 指定要排除的包或类的模式列表。
  • -private: 包含私有成员的文档。
  • -protected: 默认行为,包含受保护和公开成员的文档。
  • -public: 只包含公共成员的文档。

示例:

假设你有一个名为 com.example 的包,位于 /src/main/java 目录下,你想生成包含所有公共和受保护成员的 API 文档,并将输出文件保存在 /docs/api 目录下,同时指定字符编码为 UTF-8,可以使用以下命令:

javadoc -encoding UTF-8 -charset UTF-8 -d /docs/api -sourcepath /src/main/java -subpackages com.example

搞一个类来把注解都用上,然后生成API文档看看:

package com.eryi.config;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;/*** @author John Doe* @version 1.0.0* @since 2022-04-01* @deprecated Since version 1.1.0, use the {@link BetterFileManager} instead.* This class provides basic file management operations.*/
@Deprecated
public class FileManager {/*** @param filePath The path of the file to check.* @return True if the file exists, false otherwise.* @see File#exists()* @throws NullPointerException If the filePath is null.*/public boolean fileExists(String filePath) {if (filePath == null) {throw new NullPointerException("FilePath cannot be null.");}File file = new File(filePath);return file.exists();}/*** @param fileName The name of the file to create.* @param content The content to write into the file.* @return The newly created file.* @throws IOException If there's any issue creating or writing to the file.* @see File#createNewFile()* @see FileWriter*/public File createFileWithContent(String fileName, String content) throws IOException {File file = new File(fileName);if (!file.createNewFile()) {throw new IOException("Failed to create file: " + fileName);}try (FileWriter writer = new FileWriter(file)) {writer.write(content);}return file;}/*** A sample file path constant.* @since 1.0.0*/@Deprecatedpublic static final String SAMPLE_FILE_PATH = "resources/sample.txt";/*** @param args Command-line arguments (not used in this example).*/public static void main(String[] args) {FileManager fileManager = new FileManager();System.out.println("Does sample file exist? " + fileManager.fileExists(SAMPLE_FILE_PATH));}
}

直接JAVADOC:

82f2e61264ab41cc86c3ba0659c1b986.png

会在路径下生成一堆东西,需要用的只有index.html,其它的都是为了支持这个index.html的资源文件而已:

650a6514057f443aa5ac4b82f70712e2.png

看看效果:

可以看到关于这个类的什么都有:

9243bbcd81ba43059d3c39bc5d0b9da7.png

732db52ce1dd4011b79a275f141938a0.png

 

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

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

相关文章

基于JSP/Servlet校园二手交易平台

摘 要 本系统采用JSP/servlet技术&#xff0c;是使用Java编程语言编写的一套校园网二手交易平台软件。系统采用的是最近几年流行的B/S开发模式&#xff0c;以互联网方式运行&#xff0c;服务器端只需要安装本系统&#xff0c;而客户端用户只要可以上网&#xff0c;就可以非常方…

软考之零碎片段记录(二十九)+复习巩固(十七、十八)

学习 1. 后缀式&#xff08;逆波兰式&#xff09; 2. c/c语言编译 类型检查是语义分析 词法分析。分析单词。如单词的字符拼写等语法分析。分析句子。如标点符号、括号位置等语言上的错误语义分析。分析运算符、运算对象类型是否合法 3. java语言特质 即时编译堆空间分配j…

idea生成双击可执行jar包

我这里是一个生成xmind,解析sql的一个main方法,可以通过配置文件来修改有哪些类会执行 我们经常会写一个处理文件的main方法,使用时再去寻找,入入会比较麻烦,这里就可以把我们写过的main方法打成jar包,放到指定的目录来处理文件并生成想要的结果 1.写出我们自己的main方法,本地…

记一次使用Notepad++正则表达式批量替换SQL语句

目录 一、需求二、解决方案三、正则解析 一、需求 存在如下SQL建表脚本&#xff1a; CREATE TABLE "BUSINESS_GOODS" ( "ID" VARCHAR(32) NOT NULL, "GOODS_CODE" VARCHAR(50), "GOODS_NAME" VARCHAR(100), ... NOT CLUSTER PRIMARY…

申请DigiCert代码签名证书的费用大概是多少?

在数字化转型的当下&#xff0c;代码签名证书成为维护软件及应用程序安全性和信誉度不可或缺的一环。DigiCert&#xff0c;作为全球首屈一指的数字证书供应商&#xff0c;其产品线涵盖了多种证书解决方案&#xff0c;其中便包括至关重要的代码签名证书&#xff0c;旨在通过数字…

tableau基础学习——添加标靶图、甘特图、瀑布图

标靶图 添加参考线 添加参考分布 甘特图 创建新的字段 如设置延迟天数****计划交货日期-实际交货日期 为正代表提前交货&#xff0c;负则代表延迟交货 步骤&#xff1a;创建——计算新字段 把延迟天数放在颜色、大小里面就可以 瀑布图 两个表按照地区连接 先做个条形图&…

TCP协议关于速率的优化机制-滑动窗口详解

在上一章中&#xff0c;我们讲述了TCP协议在传输过程中的可靠性http://t.csdnimg.cn/BsImO&#xff0c;这里衔接上一篇文章继续讲&#xff0c;TCP协议的特性&#xff0c;TCP协议写完之后就写&#xff0c;Http和Https等内容吧 1. 滑动窗口 这里的滑动窗口不是指算法里面的双指…

Vue3管理系统-路由设置+表单校验

一、配置路由规则 1.在views 下创建文件夹分类,搭好架子 2.配置路由规则 在router下Index.js import { createRouter, createWebHistory } from vue-routerconst router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [//一级路由//这里可以…

vue路由(路由基本使用,传参,多级路由)

目录 vue-router简介路由配置和使用嵌套&#xff08;多级&#xff09;路由路由传参方式1&#xff1a;路由的query参数方式2&#xff1a;路由的params参数props配置 命名路由取消路由组件在前进后退 vue-router简介 vue的一个插件库&#xff0c;专门用来实现SPA应用 路由配置…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

YOLOv8核心原理深度解析

YOLOv8源码地址: https://github.com/ultralytics/ultralytics 一、简介: 根据官方描述,Yolov8是一个SOTA模型,它建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性,使其成为实现目标检测、图像分割、姿态估计等任务的最佳选择。其具体…

Content type ‘application/json;charset=UTF-8‘ not supported异常的解决过程

1.首先说明开发场景 *就是对该json格式数据传输到后台 后台实体类 import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import org.sp…