Java 注释

学习Java注释的所有知识,包括Java注释的类型、Javadoc工具、注释对性能的影响以及需要遵循的最佳实践。

为什么要写注释?

代码注释,顾名思义,是我们在代码之间写下的注释,编写注释通常有下面几个原因:

  1. 帮助理解代码:注释可以说明代码的作用、逻辑、实现方法等,帮助其他人更好地理解代码。
  2. 方便维护:对于复杂的代码,注释可以帮助其他人更易于维护和修改代码,以及增加代码的可读性。
  3. 提高代码质量:写注释可以迫使程序员思考代码的逻辑,从而提高代码的质量和可靠性。
  4. 便于团队协作:团队中的成员可以通过注释更好地协作,避免因为代码不清晰而产生的沟通失败。

可见写代码时写注释是一个非常好的习惯,可以提高代码质量,减少代码维护的成本,同时也可以增加团队协作的效率。

但是请注意不要编写无明显意义的注释。

Java 中的代码注释示例:

/**
 * 输出一个名称和地域的问候信息。
 * 如:Hello 朋友,welcome to 杭州
 *
 * @author Lokesh Gupta
 */
public class WelcomeMain {

	/**
	 * 启动应用程序
	 *
	 * @param args - 应用启动参数
	 */
	public static void main(String[] args) {
		getMessage("朋友", "杭州");
	}

	/**
	 * 返回一个欢迎信息。
	 *
	 * @param name - 访问者名称
	 * @param region - 地域信息
	 * @return - 欢迎信息
	 */
	public static String getMessage (String name, String region)
	{
		StringBuilder builder = new StringBuilder();
		builder.append("Hello ");
		builder.append(name);
		builder.append(", Welcome to ");
		builder.append(region);
		builder.append(" !!");
		return builder.toString();
	}
}

Java 单行注释

在局部代码块中,要为某行代码添加注释时,可以使用单行注释。单行注释写在代码所在行之上,简单明了。

// Default initial capacity. 默认初始容量为 10
int DEFAULT_CAPACITY = 10;

单行注释可以出现在任何地方,但是通常情况下建议写在代码块中,单行注释不会出现在 Java Doc 文档中。

Java 多行注释

当因为逻辑复杂,要添加的注释一行不能完全描述时,可以使用多行注释,Java 中多行注释使用 /* 开头,*/ 结尾。

/*
 *  计算两数之和
 */
int s = x + y;

多行注释也可以出现在任意地方,但是多行注释同样不会出现在 Java Doc 文档中。

Java 文档注释

当你需要通过创建一个 HTML 页面公开源代码中类或方法的注释信息时,可以使用 Java 文档注释。如常见的 JDK API 在线文档,就是通过 Java 文档注释自动生成的。

JavaDoc 需要注释要符合以下规则:

  1. 注释以 /** 开头以 */ 结尾,其中的每一行注释都以 * 开头(这一条不是必须的)。
  2. 文档注释中,以 @ 开头的内容有特殊含义,如常见的 @author@return@param 等。

下表是常用的具有特殊含义的 JavaDoc 标记。

标签 描述 适用于
@see 关联类/方法/网址 Class, method, or variable
@code 源代码内容 Class, method, or variable
@link 关联类 / 方法 Class, method, or variable
@author 作者 Class
@version 版本号 Class
@param 参数说明 Method
@return 返回说明 Method
@exception 异常信息 Method
@deprecated 声明已过时 Class, method, or variable
@since 开始版本 Variable

一个具有 JavaDoc 文档注释的例子:

package com.wdbyte.comment;

/**
 * 输出一个名称和地域的问候信息。
 * 如:Hello 朋友,welcome to 杭州
 * 主要实现方法是 {@link JavaDocDemo#getMessage(String, String)}
 *
 * @author wdbyte
 * @version 1.0
 * @see com.wdbyte.comment.JavaDocDemo#getMessage(String, String) 
 * @since 1.0
 */
public class JavaDocDemo {

    /**
     * 启动应用程序
     *
     * @param args - 应用启动参数
     */
    public static void main(String[] args) {
        System.out.println(getMessage("朋友", "杭州"));
    }

    /**
     * 返回一个欢迎信息。
     * @see <a href="https://docs.oracle.com/en/java/">Java Dcoumentation</a>
     * @param name   - 访问者名称
     * @param region - 地域信息
     * @return - 欢迎信息语句
     */
    public static String getMessage(String name, String region) {
        StringBuilder builder = new StringBuilder();
        builder.append("Hello ");
        builder.append(name);
        builder.append(", Welcome to ");
        builder.append(region);
        builder.append(" !!");
        return builder.toString();
    }
}

Javadoc 命令构建文档

JDK 提供了 javadoc 命令工具用于生产 Java doc 文档,使用 -d doc 指定生产的文档目录为 doc 文件夹。

以上面的 Java 文档注释代码为例:

$ javadoc -d doc JavaDocDemo.java
正在加载源文件JavaDocDemo.java...
正在构造 Javadoc 信息...
正在创建目标目录: "doc/"
标准 Doclet 版本 1.8.0_151
正在构建所有程序包和类的树...
正在生成doc/com/wdbyte/comment/JavaDocDemo.html...
正在生成doc/com/wdbyte/comment/package-frame.html...
正在生成doc/com/wdbyte/comment/package-summary.html...
正在生成doc/com/wdbyte/comment/package-tree.html...
正在生成doc/constant-values.html...
正在构建所有程序包和类的索引...
正在生成doc/overview-tree.html...
正在生成doc/index-all.html...
正在生成doc/deprecated-list.html...
正在构建所有类的索引...
正在生成doc/allclasses-frame.html...
正在生成doc/allclasses-noframe.html...
正在生成doc/index.html...
正在生成doc/help-doc.html...

浏览器中浏览生产的 HTML 文档:

IntelliJ IDEA 生成 Java 文档

通过目录 Tools -> Generate JavaDoc 来导出 Java 文档。

Java 注释建议

  • 保持注释的缩进统一,以获得最佳可读性。
  • 注释是给人看的,因此请使用简单的语言来解释(有些同学喜欢使用英文,如果不是面向国际化的开发项目,请考虑下其他英文不好同学的感受)。
  • 注释不应该过于复杂,如果需要特别复杂的注释内容来解释代码,那么可能需要重新思考下当前代码实现是否过于复杂。
  • 保持在代码中添加注释的好习惯,但是不要为了加注释而添加注释。
  • Java 注释对性能没有任何影响,因为编译后的 class 文件不包含注释信息。

参考:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javadoc.html

一如既往,文章中代码存放在 Github.com/niumoo/javaNotes.