[Java 基础]注释

注释在编程中扮演着非常重要的角色,它们是写给人类阅读的,而不是给计算机执行的。良好的注释可以极大地提高代码的可读性和可维护性。

为什么需要注释?

  1. 提高可读性: 注释可以解释代码的功能、实现思路、特殊处理等,帮助其他开发者(或者未来的你)更容易理解代码的意图
  2. 方便维护: 当代码需要修改或维护时,清晰的注释能够帮助开发者快速定位需要修改的部分,并理解修改可能带来的影响
  3. 生成文档: 特定格式的注释(Javadoc)可以被工具自动提取,生成专业的 API 文档
  4. 调试代码: 在调试过程中,可以使用注释临时禁用某些代码块,方便定位问题
  5. 作为备忘: 开发者可以在代码中添加一些临时的想法或注意事项

Java 支持三种类型的注释:

1. 单行注释 (Single-line Comments)

以双斜线 // 开头,直到行尾的内容都被视为注释。单行注释通常用于解释代码中的某一行或一小段代码的功能。

// 这是一个单行注释
int age = 30; // 声明一个整型变量 age 并赋值为 30

2. 多行注释 (Multi-line Comments)

以 /* 开头,以 / 结尾。/ 和 */ 之间的所有内容都被视为注释,可以跨越多行。多行注释通常用于解释一段较长的代码块、一个方法或一个类的整体功能。

/** 这是一个多行注释。* 它可以跨越多行,* 用于解释一段代码的功能或者提供更详细的说明。*/
public class MyClass {// ... 类的内容 ...
}

:::color3
多行注释不能嵌套使用。也就是说,在一个多行注释内部不能再包含另一个 /* ... */ 注释。

:::

3. 文档注释 (Documentation Comments) - Javadoc

文档注释是一种特殊的多行注释,以 /** 开头,以 */ 结尾。文档注释主要用于为类、接口、方法、构造器、字段和枚举常量生成 API 文档。Javadoc 工具可以解析这些注释,并生成 HTML 格式的文档。

文档注释的内容可以包含特殊的标签(以 @ 开头),用于描述不同的方面,例如参数、返回值、异常、作者、版本等。

/*** 这是一个表示一个简单计算器的类。* 它提供了加法和减法运算。** @author John Doe* @version 1.0* @since 1.0*/
public class Calculator {/*** 将两个整数相加。** @param a 第一个整数* @param b 第二个整数* @return 两个整数的和* @throws ArithmeticException 如果发生算术错误(虽然在这个例子中不会发生)*/public int add(int a, int b) {return a + b;}/*** 从第一个整数中减去第二个整数。** @param a 被减数* @param b 减数* @return 两个整数的差*/public int subtract(int a, int b) {return a - b;}
}

常用的 Javadoc 标签包括:

  • @author:标识作者。
  • @version:标识版本号。
  • @param:描述方法的参数,后面跟着参数名和描述。
  • @return:描述方法的返回值。
  • @throws@exception:描述方法可能抛出的异常,后面跟着异常类名和描述。
  • @since:标识从哪个版本开始引入。
  • @deprecated:标识该元素已过时,并说明替代方案。

因为 IDEA 创建的 Java 类是没有类注释的,所以,我一般习惯在 IDEA 中创建一个类文档注释模板,让后配置对应的触发字符,输入触发字符就能快速的生成类的文档注释:

/***** @author jxd* {@code @date} $DATETIME$*/

date("yyyy/MM/dd HH:mm")

在已创建的类上使用 *head ,然后按下 Enter 键,就会自动生成文档注释模板。

编写良好注释的建议

  1. 保持注释的简洁和清晰: 注释应该易于理解,避免使用过于晦涩的术语或过长的段落。
  2. 注释应该准确地反映代码的功能: 当代码修改时,务必更新相关的注释,确保它们与代码保持一致。
  3. 解释代码的意图,而不是仅仅描述代码做了什么: 好的注释应该解释 为什么 这段代码是这样写的,而不是简单地重复代码本身。
  4. 为重要的代码块、方法和类添加注释: 特别是那些逻辑复杂、容易产生误解或者对外提供的 API。
  5. 使用文档注释 (Javadoc) 为公共 API 生成文档: 这有助于其他开发者了解如何使用你的代码。
  6. 避免过度注释: 对于显而易见的代码,不一定需要添加注释。过多的注释反而会使代码显得冗余。
  7. 使用统一的注释风格: 保持整个项目注释风格的一致性,提高代码的整体可读性。
  8. 及时删除不再需要的注释: 例如,一些临时的调试代码注释在问题解决后应该被删除。

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

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

相关文章

TortoiseSVN账号切换

SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 ​​下载地址​​:TortoiseSVN官网 ​​安装步骤​​: 双击安装包,按向导完成安装后&#x…

5分钟了解JVM运行时数据区域

点击蓝字,关注我们 在 Java 程序运行期间,JVM 会划分出几块重要的内存区域,用来支撑类加载、方法调用、对象分配、线程执行等一切运行时行为。 这些区域构成了 JVM 的“运行时数据区”。 一、运行时数据区域概览图 二、Java 堆(H…

深入理解CSS浮动:从基础原理到实际应用

深入理解CSS浮动:从基础原理到实际应用 引言 在网页设计中,CSS浮动(float)是一个历史悠久却又至关重要的概念。虽然现代布局技术如Flexbox和Grid逐渐流行,但浮动仍然在许多场景中发挥着重要作用。本文将带你深入理解…

Spring Bean 为何“难产”?攻克构造器注入的依赖与歧义

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续! 🚀 魔都架构师 | 全网30W技术追随者🔧 大厂分布式系统/数据中台实战专家🏆 主导交易系统百万级流量调优 & 车联网平台架构&a…

华为云Flexus+DeepSeek征文|实战体验云服务器单机部署和CCE高可用的架构AI赋能

前引:“在数字化浪潮汹涌澎湃的今天,企业对云计算服务的需求已从基础架构支撑,逐步转向更深层次的AI赋能与业务创新驱动。面对复杂多变的市场环境,选择一个强大、可靠且具备前瞻性的云服务伙伴,无疑是企业实现高速增长…

雷卯针对易百纳G610Q-IPC-38E 模组防雷防静电方案

一、应用场景 1、智能监控 2、智能家居 3、工业自动化 4、机器人 5、智能交通 6、医疗影像 7、教育科研 二、 功能概述 1 HI3516CV610(ARM Cortex-A7 MP2) 2 AI算力 1Tops 3 模组集成 4M30FPS Sensor,支持最高 6M30fps 的 ISP 图像…

生成对抗网络(GAN)基础原理深度解析:从直观理解到形式化表达

摘要 本文详细解析 生成对抗网络(GAN) 的 核心原理,从通俗类比入手,结合印假钞与警察博弈的案例阐述生成器 与 判别器 的对抗机制;通过模型结构示意图,解析 噪声采样、样本生成 及判别流程;基于…

OptiStruct结构分析与工程应用:无限元法介绍

13.3 无限元方法 本节将详细阐述如何利用无限元方法求解外声场分析,具体包括无限元方法基本理论,无限单元介绍、无限元分析建模指南及检查,最后以一个实例讲解整个分析设置过程。 13.3.1 无限元分析基础理论 无限元求解外声场的基本原理如…

判断:有那种使用了局部变量的递归过程在转换成非递归过程时才必须使用栈

这道题的关键在于理解递归转非递归与 “是否用栈” 的本质逻辑,和 “局部变量” 无关,核心看递归的调用上下文是否需要保存。 一、递归的本质:依赖 “调用栈” 递归函数执行时,系统会用调用栈保存: 每层递归的参数、…

leetcode1443. 收集树上所有苹果的最少时间-medium

1 题目:收集树上所有苹果的最少时间 官方标定难度:中 给你一棵有 n 个节点的无向树,节点编号为 0 到 n-1 ,它们中有一些节点有苹果。通过树上的一条边,需要花费 1 秒钟。你从 节点 0 出发,请你返回最少需…

MySQL 索引底层原理剖析:B+ 树结构、索引创建维护与性能优化策略全解读

引言 在 MySQL 数据库的世界里,索引是提升查询性能的关键利器。然而,很多开发者虽然知道索引的重要性,但对于索引背后的底层原理却知之甚少。本文将深入 MySQL 索引的底层实现,剖析 B 树的结构特点,以及如何利用这些知…

【Delphi】实现在多显示器时指定程序运行在某个显示器上

在多显示器时代,经常会出现期望将程序运行在某个指定的显示器上,特别是在调试程序的时候,期望切换分辨率,单步调试时,此时容易导致互相卡住,非常不方便,但是通过指定程序运行在不同的显示器上就…

不动产登记区块链系统(Vue3 + Go + Gin + Hyperledger Fabric)

好久没有介绍过新项目的制作了,之前做的一直都是Fisco Bcos的项目,没有介绍过Hyperledger Fabric的项目,这次来给大家分享下。 系统概述 不动产登记与交易平台是一个基于Hyperledger Fabric的综合性管理系统,旨在实现不动产登记…

论文阅读笔记——Large Language Models Are Zero-Shot Fuzzers

TitanFuzz 论文 深度学习库(TensorFlow 和 Pytorch)中的 bug 对下游任务系统是重要的,保障安全性和有效性。在深度学习(DL)库的模糊测试领域,直接生成满足输入语言(例如 Python )语法/语义和张量计算的DL A…

cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能

在使用oops框架的过程中,它的导出数据并生成数据结构的插件oops-plugin-excel-to-json有些小的坑点,为满足我个人习惯,对此部分进行了一个小的修改,有需要的拿去用,记录下供大家参考; 一、配置:…

解决IDE编译JAVA项目时出现的OOM异常问题

出现的异常如图: java.lang.0utOfMemoryError:Java heap space 解决方案: 文件 --> 设置 搜索 编译器(就点击编译器这行),找到构建进程,共享堆大小,设置大一些,例如 2048 MB。 …

【Linux内核】设备模型之udev技术详解

目录 1. udev技术概述 2. 技术层次分析 2.1 内核层交互 2.2 规则引擎层 2.3 用户空间实现 3. 关键技术要点 3.1 动态设备节点管理 3.2 热插拔处理 3.3 模块化规则系统 3.3.1. 变量替换功能 3.3.2. 条件判断能力 3.3.3. 实现机制 3.3.4 应用场景 3.3.5 扩展能力 4…

群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现

1. 引言:数字时代的信息安全挑战 随着互联网和数字技术的快速发展,信息安全问题变得日益严峻。无论是个人隐私保护,还是企业数据安全,乃至国家安全,都依赖于有效的加密技术保障信息的机密性和完整性。网络攻击、数据泄…

前端开发处理‘流式数据’与‘非流式数据’,在接收完整与非完整性数据时应该如何渲染和使用

在前端开发中,处理 非流式数据 和 流式数据 的方式不同。根据是否完整接收数据、是否实时渲染的需求,可以分为以下四种典型场景: 一、四类常见场景总结 类型数据完整性是否实时渲染适用技术/方法A完整数据(一次性返回&#xff09…

thymeleaf直接调用Spring Bean中定义的方法

thymeleaf中可以使用表达式工具对象&#xff0c;通过符号直接调Spring Bean中定义的方法 Spring Bean Component public class InvokeMethodBean {public String fun() { return "fun";} }thymeleaf中调用 <div th:text"${invokeMethodBean.fun()}"&…