Java文档注释(Doc[umentation] Comments )

注意不要将注解(Annotation)与注释( Comments)混淆。

Java的有三种注释:

(1)单行注释:// 注释内容

(2)多行注释:/* 注释内容 */

(3)文档注释:/** 注释内容 *./ ,Java文档注释(Java Doc Comments)是专门为了用javadoc工具自动生成文档而写的注释,它是一种带有特殊功能的注释。如果编写java源代码时添加了合适的文档注释,然后通过JDK提供的Javadoc工具可以直接将源代码里的文档注释提取成一份系统的API文档。

文档注释与一般注释的最大区别,起始符号是/**,这种注释可以用来自动地生成文档。在JDK中有个javadoc的工具,可以由源文件生成一个HTML文档。使用这种方式注释源文件的内容,显得很专业,并且可以随着源文件的保存而保存起来。也就是说,当修改源文件时,也可能对这个源代码的需求等一些注释性的文字进行修改,那么,这时候可以将源代码和文档一同保存,而不用再另外创建一个文档。

文档注释采用HTML语法规则书写,支持HTML标记(tag),同时也有一些额外的辅助标记。需要注意的是,这些标记不是给人看的(通常他们的可读性也不好),他们的作用是为了javadoc工具更好地生成最终文档。

 

文档注释位置:

文档注释只负责描述类(class)、接口(interface)、方法(method)、构造器(constructor)、成员字段(field)。并且,文档注释必须写在类、接口、方法、构造器、成员字段前面,而写在其他位置,比如函数内部,是无效的文档注释。

(1)类注释。类注释用于说明整个类的功能、特性等,它应该放在所有的“import”语句之后,在class定义之前。这个规则也适用于接口(interface)注释。

(2)方法注释。方法注释用来说明方法的定义,比如,方法的参数、返回值及说明方法的作用等。方法注释应该放在它所描述的方法定义前面。

(3)属性注释。默认情况下,javadoc只对公有(public)属性和受保护属性(protected)产生文档——通常是静态常量。

(4)包注释。类、方法、属性的注释都直接放到Java的源文件中,而对于包的注释,无法放到Java文件中去,只能通过在包对应的目录中添加一个package.html的文件来达到这个目的。当生成HTML文件时,package.html文件的和部分的内容将会被提取出来当做包的说明。关于包注释,后面还会有更进一步的解释。

(5)概要注释。除了包注释外,还有一种类型的文档无法从Java源文件中提取,就是对所有类文件提供概要说明的文件。同样的,也可以为这类注释单独新建一个HTML文件,这个文件的名字为“overview.html”,它的和标记之间的内容都会被提取。

 

文档注释的标记 (Tag)

以@开头的标签为 Javadoc 标记,由@和标记类型组成,缺一不可。@和标记类型之间有时可以用空格符分隔,但是不推荐用空格符分隔,这样容易出错。

下面是一部分常见标记

@author:作者。

@version:版本。

@docroot:表示产生文档的根路径。

@deprecated:不推荐使用的方法。

@param:方法的参数类型。

@return:方法的返回类型。

@see:用于指定参考的内容。

@exception:抛出的异常。

@throws:抛出的异常,和exception同义

 

下面是一个类注释的例子,一个类注释的创建人、创建时间和描述是不可缺少的:

/**
 * @author: zhangsan
 * @createDate: 2020/12/28
 * @description: this is the student class.
 */
public class student{
    .................
}
 
提示:没有必要在每一行的开始用*。例如,以下注释同样是合法的:
/**
   @author: zhangsan
   @createDate: 2020/12/28
   @description: this is the student class.
 */
public class student{
    .................
}
 
下面是一个方法注释的例子,add() 方法中声明了两个形参,并将它们两个的和作为返回值返回:
/**
 * @param num1: 加数1
 * @param num2: 加数2
 * @return: 两个加数的和
 */
public int add(int num1,int num2) {
    int value = num1 + num2;
    return value;
}
 
为类的构造方法添加注释时,一般声明该方法的参数信息,例如:
public class Student {
   String name;
   int age;
   /**
    * @description: 构造方法
    * @param name: 学生姓名
    * @param age: 学生年龄
    */
   public Student(String name,int age) {
     = name;
    this.age = age;
   }
}
 
下面是一个字段(成员变量)注释的例子,字段注释在定义字段的前面,用来描述字段的含义:
/**
 * 用户名
 */
public String name;
或使用如下格式:
/**用户名*/
public String name;
 
 
下面给出一个简单而完整的实例
在经过 javadoc 处理之后,SquareNum 类的注释将在 SquareNum.html 中找到。
SquareNum.java 文件代码如下:
import java.io.*;
 
/**
* 这个类演示了文档注释
* @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.
   * @exception 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.
   * @exception 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工具识别以下标记

标签

描述

中文描述

@author

Identifies the author of a class.

标识一个类的作者

@deprecated

Specifies that a class or member is deprecated.

指名一个过期的类或成员

{@docRoot}

Specifies the path to the root directory of the current documentation

指明当前文档根目录的路径

@exception

Identifies an exception thrown by a method.

标志一个类抛出的异常

{@inheritDoc}

Inherits a comment from the immediate superclass.

从直接父类继承的注释

{@link}

Inserts an in-line link to another topic.

插入一个到另一个主题的链接

{@linkplain}

Inserts an in-line link to another topic, but the link is displayed in a plain-text font.

插入一个到另一个主题的链接,但是该链接显示纯文本字体

@param

Documents a method's parameter.

说明一个方法的参数

@return

Documents a method's return value.

说明返回值类型

@see

Specifies a link to another topic.

指定一个到另一个主题的链接

@serial

Documents a default serializable field.

说明一个序列化属性

@serialData

Documents the data written by the writeObject( ) or writeExternal( ) methods

说明通过writeObject( ) 和 writeExternal( )方法写的数据

@serialField

Documents an ObjectStreamField component.

说明一个ObjectStreamField组件

@since

States the release when a specific change was introduced.

标记当引入一个特定的变化时

@throws

Same as @exception.

和 @exception标签一样.

{@value}

Displays the value of a constant, which must be a static field.

显示常量的值,该常量必须是static属性。

@version

Specifies the version of a class.

指定类的版本

 

注解(Annotation)与注释( Comments)的区别
作用不同:注解也叫元数据。是Java 5以后版本引入的一个特性。是Java 编译器可以理解的部分,是给编译器看的。通过标记包、类、字段、方法、局部变量、方法参数等元素据,告诉jvm这些元素据的信息。注释是程序员对源代码做一些记忆或提示性描述,是给人来看的。它能告诉开发者这段代码的逻辑、说明、特点等内容,对代码起到解释、说明的作用。
使用范围不同:注解 ,参与代码编译,以@开头的,与工具一起使用。对于位置、语法、内容有一定的限制。注释 ,可以随意在任务位置填写内容,对代码任何没有影响。
运行过程不同:
注解,在运行中JVM会去读取它,包含多种加载策略,可以灵活配置。并对相应数据进行的操作,会向程序员反遣被标元素的注解。
注释,会被编译器忽略。