Javadoc简单使用教程

2023-10-31

前言

Java简介和安装

Java简介

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java环境安装

Java环境安装请参考我的另一篇博客——参考链接

Javadoc

什么是Javadoc???

javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。
也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。

Javadoc使用方法

最简单的例子

笔者此处的开发环境为:Java8 + Idea2019!!!

首先,我们在idea中创建一个新的java项目!!!
在这里插入图片描述
之后,我们会看到idea为我们生成的一个Main类
在这里插入图片描述
我们可以看到,这就是一个很常见的Java类,只有一个main方法,接下来我们要开始向这个类添加一些javadoc!!!

javadoc的用法非常简单,只需要在需要加注释的地方以 /** */ 的格式来编写注释, 例如:
在这里插入图片描述
这样子,我们就成功创建了一个javadoc, 接着我们要向javadoc中添加一些信息
在添加前, 我们需要先了解一下 javadoc 的常用标记和规范!!!

Javadoc常用标记

标签 说明 标签类型
@author 作者名 作者标识 包、类、接口
@version 版本号 版本号 包、类、接口
@date 日期 类创建日期 包、类、接口
@param 参数名 参数描述 方法的参数名及描述信息 构造方法、 方法
@return 描述 方法返回值的描述信息 方法
@deprecated 过期文本 标识随着程序版本的提升,当前API已经过期,仅为了保证兼容性依然存在,以此告之开发者不应再用这个API。 包、类、接口、值域、构造方法、 方法
@throws 异常类名 当前方法可能抛出的异常类型 构造方法、方法
@exception 异常类名 同@throws 构造方法、方法
@see 引用 查看相关类或者接口的内容,如类、方法、变量等。 包、类、接口、值域、构造函数、 方法
@since 描述文本 API在什么程序的什么版本后开发支持。 包、类、接口、值域、构造函数、 方法
{@link包.类#成员 标签} 链接到某个特定的成员对应的文档中。 包、类、接口、值域、构造函数、 方法
{@value} 当对常量进行注释时,如果想将其值包含在文档中,则通过该标签来引用常量的值。 静态值域

Javadoc规范

  • 类: 每个类必须包含描述文本、@author(作者名称)、 @version(版本号) 和@date(日期)注解
  • 方法:每个方法必须包含描述文本
    • 带有参数的方法:必须包含@param注解
    • 可能会抛出异常的方法: 必须包含@throws或者@exception注解
    • 带有返回值的方法: 必须包含@return 方法
    • 不再使用的方法:如果为了兼容性继续存在,则必须使用@deprecated 进行注解
  • 变量:如果为成员变量则必须使用javadoc进行注解
  • 常量:如果为成员常量则必须使用javadoc进行注解(常量最好修饰为静态并加上@value注解)

实际开发中javadoc的使用

我们接着来看我们刚才的例子

/**
 * 这是一个测试用的类
 * @author Cpp Primer
 * @date 2019-8-26
 * @version 1.0
 */
public class Main {
    public static void main(String[] args) throws Exception {
    }
}

在这里插入图片描述
可以看到,我们现在已经为刚才创建的那个类写上了javadoc注释,描述了类的用途,作者,日期和版本号!!!

看到这里,有的读者可能会有点疑惑,我们的javadoc到底有什么用呢???
我们现在就来看一下javadoc在实际开发中的用途
在这里插入图片描述
当我们的鼠标悬停在Main这个类上时,会出现一个文本框,里面描述了我们刚才在javadoc中编写的对Main类的描述。。。

想象一下,如果Main类是一个工具类,而另一个程序员在他的类中定义了Main类的对象而他不知道Main类的用途,此时我们的javadoc注释是不是起到了很大作用!!!

如果没有javadoc,我们要向其他程序员描述这个类的用途,我们需要用什么手段呢?

打电话告诉他?还是发微信qq告诉他?或者说写个文档发给他???

这样是不是很麻烦!!!

有了javadoc, 我们只需要在代码中插入一段注释就可以实现我们之前需要很麻烦的手段才能实现的功能!!!

如果说以上的例子还不具有说服力,那么我们接着尝试给方法添加一段javadoc!!!

/**
 * 这是一个测试用的类
 * @author Cpp Primer
 * @date 2019-8-26
 * @version 1.0
 */
public class Main {
    /**
     * 判断一个数是否为非负数
     * @param num 待判断的数
     * @return 如果为非负数则返回true, 否则返回false
     * @throws Exception 可能会抛出一个异常
     */
    public boolean testPrint(int num) throws Exception {
        if (num > 0) {
            return true;
        }
        return false;
    }
}

在这里插入图片描述
我们创建了一个名为testPrint的方法,用于判断一个数是否为非负数,他接受一个整型变量作为参数,将判断的结果以布尔值的方式返回。。。

假设,另一个程序员调用了我们所编写的这个方法,但是却又不知道这个方法的用途和参数的含义,这时该怎么办???
相信很多人都遇到过这种情况吧,在我们使用第三方库或者没有相关文档的库的时候。。。
大多数人的选择是去百度或者查阅文档,少部分人会选择编写测试方法去实验。

现在有了javadoc,就可以变得非常简单!!!
通过javadoc,我们可以轻松的查阅某个类或者方法的信息——方法的用途,参数的含义,返回值的含义等等…
在我们写自己的代码时,也可以通过javadoc让别人可以轻松的使用我们所编写的代码而不需要查阅相关的文档!!!

举个例子:
我们现在, 创建一个main方法并在main方法中调用我们刚才编写的testPrint方法,看看有什么效果?

public static void main(String[] args) throws Exception {
        Main a = new Main();
        System.out.println(a.testPrint(10));
}

在这里插入图片描述
是不是很方便!!!

接下来,我们再看看如何对成员变量进行javadoc注释:

/**
 * 这是一个测试用的类
 * @author Cpp Primer
 * @date 2019-8-26
 * @version 1.0
 */
public class Main {
    /**
     * 测试字段
     */
    public static final String M_TEST="test";

    /**
     * 判断一个数是否为非负数
     * @param num 待判断的数
     * @return 如果为非负数则返回true, 否则返回false
     * @throws Exception 可能会抛出一个异常
     */
    public boolean testPrint(int num) throws Exception {
        if (num > 0) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) throws Exception {
    	String test2 = "test";
        Main a = new Main();
        System.out.println(a.testPrint(10));
    }
}

在这里插入图片描述
在这里插入图片描述
我特意把成员变量修饰为共有属性,为了方便我们的测试效果!!!
实际开发中,一般情况下(有一定的特殊情况这里我们就不讨论了)应该将任何成员变量声明为private属性,使用JavaBean(get、set)方法的方式进行读写值。

Javadoc总结

在java的实际开发中,编码格式规范,编码命令规范,javadoc三种相辅相成,结合起来使用!!!

养成一个好的编码习惯,就从现在开始!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javadoc简单使用教程 的相关文章

  • 如何克服原语按值传递的事实

    我有一段很长的代码来计算两个值 doubles 对我来说 我在几个地方使用了这段代码 为了坚持 DRY 原则 我应该将这段代码重构为一个很好的单元测试方法 但是我不能让它返回两个双精度数 而双精度数是原始的 因此不能按值传递和操作 我能想到
  • 如何使用 Apache POI API 将图像添加到 pptx 中添加的图像占位符?

    我已经预定义了带有文本和图像占位符的 pptx 模板 我如何从模板访问和修改这些占位符 我可以使用 POI pptx API 直接将图像和文本添加到幻灯片中 但如何将其添加到模板的占位符中 请参阅链接以了解如何添加占位符来创建固定模板 ht
  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • Java:迭代 Collection 的最佳方法(此处为 ArrayList)

    今天 当我看到一段我已经使用了数百次的代码时 我很高兴地开始编码 迭代集合 此处为 ArrayList 出于某种原因 我实际上查看了 Eclipse 的自动完成选项 这让我想知道 在什么情况下以下循环比其他循环更好使用 经典的数组索引循环
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Eclipse 中 Spring MVC 模型对象的 (jsp /jstl) 视图中的代码辅助

    在 Spring MVC 中 当将对象放置在视图模型中时 如下所示 public String getUser Model model fetch user model addAttribute user user return viewN
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 数组名退化作一个元素的指针,降级

    写一篇博客方便自己复习 参考网址 https www cnblogs com sanghai archive 2013 11 01 3402258 html 数组名退化为指针 在使用数组时 大多数情况下数组都会自动转换为指向第一个元素的指针
  • Java自定义切面缓存注解如此简单(Redis + SpringAop)

    自定义缓存切面注解 1 展示效果 如果使用这种方式 建议使用切面缓存异常类 如果当前方法缓存失败 也应该执行具体业务逻辑而非报错终止程序 具体参考切面缓存 CacheException 1 1 成功保存到redis效果 第一次Redis没有
  • ReactJS编写的树形表格

    表格使用ReactJs编写的树形表格 表格功能 以树形表格的格式显示数据 每条数据的右击菜单根据这条数据中不同的属性标示 可控制对应的类型是否可以下钻 数据对应的地域下钻之后 点击地域前面的小三角可进行本省份下的地市下钻 reportTre
  • vue 实现课程表甘特图

    1 封装 components
  • 决策树建模实践-构建树、显示、剪枝、处理缺失值和预测

    决策树建模 构建决策树 显示决策树 决策树剪枝 处理缺失值 训练数据和预测数据中的 决策树预测 案例 利用决策树进行分类问题 采用CART决策树 假设已经有一份清洗好的数据 前四列表示属性及其值 最后一列为分类 数据示例 slashdot
  • web.xml配置报The content of element type “web-app“ must match错误解决

    1 问题 配置web xml时报如下错 The content of element type web app must match icon display name description distributable context p
  • windows10配置make命令

    本质上来说windows是没有make命令的 而真正和Linux中make命令有相同作用的是mingw32 make 我们为了使用方便可以直接把mingw32 make改为make 但是如果你在其它的编译软件中想要使用mingw32 mak
  • Redis7高级之缓存双写一致性之更新策略探讨(三)

    1 缓存双写一致性 如果redis中有数据 需要和数据库中的值相同 如果redis中无数据 数据库中的值是最新值 且准备回写redis 缓存按照操作分 只读缓存 读写缓存 同步直写策略 写数据库后也同步写 redis 缓存 缓存中的数据和数
  • 微信远程代码执行漏洞(最新版本利用)-亲测已上线

    目录 POC index html exp js 测试总结 最新版微信利用方式 最新版存在 web安全学习了解 web渗透测试 官网 宣紫科技 POC index html exp js ENABLE LOG true IN WORKER
  • Java如何将String转换成json对象或json数组

    导包
  • 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法

    近日为客户调试sql server 2008时意外的然出现两个报错 结果导致部分功能组件无法安装成功 如下 产品 Microsoft SQL Server 2008 联机丛书 简体中文 错误 1335 此安装所需的 CAB 文件 Redis
  • recvfrom vs2010 debug正常 realse错误10040

    学习socket程序 udp多播发送和接收 其中一个接收recvfrom函数 在debug能正常运行 在release无法运行 总是提示10040错误 查询百度 说是接收缓存区不够 下面是程序代码 void MultiSock RecvPa
  • iOS设备、Icon、LaunchImage、图片分辨率

    摘要 iOS的各种设备的分辨率 以及开发用的Icon LaunchImage的分辨率 文中所有数据均来自网络 及博主个人总结 如有错误 以官方数据为准 iOS设备 iOS设备的屏幕的大小 分辨率以及比例因数 Scale Factor 1 i
  • 4-1单链表逆转

    学习完链表以后 在刷PTA的时候 遇见第一题就卡壳了 真是悲哀 是一道关于单链表逆转的 其实还是很简单的 不过因为搞错了位置 再加上其他函数也是第一次用C写 输出的一直是NULL 就把这段代码敲出来方便大家以后看 4 1 单链表逆转 20分
  • 计算机网络---应用层(http协议)

    目录 一 简单理解序列化和反序列化 1 什么是序列化 反序列化 2 网络版计算器程序 二 HTTP协议 1 认识URL 2 http协议格式 3 http方法及http状态码 4 http的特征 三 简单的http协议程序 在tcp ip五
  • kong添加自定义插件(一)

    api网关kong支持自定义插件 但是如何添加一个自定义的插件 通过admin api 添加一个kong原有的plugin curl命令方式 curl i X POST url http 192 168 74 111 8001 routes
  • 技术人员的赚钱之道-10:程序员会不会成为新时代的无产者?

    曾经是革命者用革命打倒的东西 正是革命者后辈们追逐 推崇的东西 观念不转 思维不变 程序员很可能成为新时代的无产者
  • 构造函数与析构函数不能被继承

    不是所有的函数都能自动地从基类继承到派生类中的 构造函数和析构函数是用来处理对象的创建和析构的 它们只知道对在它们的特殊层次的对象做什么 所以 在整个层次中的所有的构造函数和析构函数都必须被调用 也就是说 构造函数和析构函数不能被继承 子类
  • 帮我随便用java写一个用户登陆接口

    我可以给你提供一些基本的示例代码 你可以使用Java语言来实现用户登录接口 public class Login private String username private String password public Login St
  • Javadoc简单使用教程

    Javadoc深入浅出 前言 Java简介和安装 Java简介 Java环境安装 Javadoc 什么是Javadoc Javadoc使用方法 最简单的例子 Javadoc常用标记 Javadoc规范 实际开发中javadoc的使用 Jav