【Java】Java注释 - 单行、块、文档注释

时间:2022-09-06 13:26:22

简单记录,Java 核心技术卷I 基础知识(原书第10 版)

注释

我们在编写程序时,经常需要添加一些注释,用来描述某段代码的作用,提高Java源程序代码的可读性,使得Java程序条理清晰。

写代码的时候应遵循注意一些java规范,函数短小精悍,用清晰的命名来解释代码, 整洁的代码, 不要保留不用的代码(注释代码),要么删掉,要么想到更好的方案替换,别留着,注释不要写废话和错误的。

那为什么要写注释呢?在代码不足以表达意思的时候,让自己和别人更容易理解自己写的代码和复用代码,就需要注释来表达。做到之前没有见过这段代码,但能根据代码和一些注释快速地知道这段代码是干什么的。

Java 核心技术卷I 基础知识(原书第10 版)书上的

3.2 注释

Java 与大多数程序设计语言一样,它的注释也不会出现在可执行程序中。因此, 可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。

在Java 中,有3 种标记注释的方式。

  • 单行注释
  • 多行注释
  • 文档注释

单行 (single-line) 注释

最常用的方式是使用//,其注释内容从// 开始到本行结尾。

System.out.println("We will not use 'Hello, World!’");// is this too cute?

块 (block) 注释(多行)

当需要长篇的注释时, 既可以在每行的注释前面标记//,

也可以使用/**/ 将一段比较长的注释括起来。

/*
This is the first sample program in Core Java Chapter 3
一个最简单的Java应用程序,它只发送一条消息"We will not use 'Hello, World! '"到控制台窗口中.
*/
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("We will not use 'Hello, World! '");
}
}

警告:在Java 中,/* */ 注释不能嵌套„ 也就是说, 不能简单地把代码用/* 和*/ 括起来,作为注释, 因为这段代码本身可能也包含一个*/ 。

文档注释

最后,第3 种注释可以用来自动地生成文档。这种注释以/**开始, 以*/结束。

/**
* This is the first sample program in Core Java Chapter 3
* @version 1.01 1997-03-22
* @author Gary Cornell
*/
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("We will not use 'Hello, World!'");
}
}

4.9 文档注释

JDK 包含一个很有用的工具, 叫做javadoc, 它可以由源文件生成一个HTML 文档。事实上,API 文档就是通过对标准Java 类库的源代码运行javadoc 生成的。

如果在源代码中添加以专用的定界符/** 开始的注释, 那么可以很容易地生成一个看上去具有专业水准的文档。这是一种很好的方式, 因为这种方式可以将代码与注释保存在一个地方。如果将文档存入一个独立的文件中, 就有可能会随着时间的推移, 出现代码和注释不一致的问题。然而,由于文档注释与源代码在同一个文件中,在修改源代码的同时, 重新运

行javadoc 就可以轻而易举地保持两者的一致性。

javadoc注释标签语法

   @author    对类的说明标明开发该类模块的作者
    @version 对类的说明标明该类模块的版本
    @see 对类、属性、方法的说明 参考转向,也就是相关主题
    @param 对方法的说明对方法中某参数的说明
    @return 对方法的说明对方法返回值的说明
    @exception 对方法的说明对方法可能抛出的异常进行说明

4.9.1 注释的插入

javadoc 实用程序(utility ) 从下面几个特性中抽取信息:

  • 公有类与接口
  • 公有的和受保护的构造器及方法
  • 公有的和受保护的域

应该为上面几部分编写注释、注释应该放置在所描述特性的前面。注释以/** 开始, 并以*/ 结束。

每个/** . . . */ 文档注释在标记之后紧跟着*格式文本( free-form text )。标记由@开始, 如@author 或@param。

*格式文本的第一句应该是一个概要性的句子。javadoc 实用程序自动地将这些句子抽取出来形成概要页。

在*格式文本中, 可以使用HTML 修饰符, 例如, 用于强调的<em>...<em> 、 用于着重强调的<strong>...</strong> 以及包含图像的<img ...>等。不过, 一定不要使用<hl><hr> 因为它们会与文档的格式产生冲突。若要键入等宽代码, 需使用{@code ... } 而不是

<code>...</code>——这样一来, 就不用操心对代码中的< 字符转义了。

注释: 如果文档中有到其他文件的链接, 例如, 图像文件(用户界面的组件的图表或图像等), 就应该将这些文件放到子目录doc-files 中。javadoc 实用程序将从源目录拷贝这些目录及其中的文件到文档目录中。在链接中需要使用doc-files 目录, 例如:<img src="doc-files/uml.png" alt="UML diagram” >

4.9.2 类注释

类注类注释必须放在import 语句之后,类定义之前。

下面是一个类注释的例子:

/**
* A {code Card} object represents a playing card , such
* as "Queen of Hearts". A card has a suit (Diamond, Heart ,
* Spade or Club) and a value (1 = Ace, 2 . . . 10, 11 *=Jack, 12 = Queen , 13 = King)
*/
public class Card
{
...
}

注释: 没有必要在每一行的开始用星号*, 例如, 以下注释同样是合法的:*

/**
A {code Card} object represents a playing card , such
as "Queen of Hearts". A card has a suit (Diamond, Heart ,
Spade or Club) and a value (1 = Ace, 2 . . . 10, 11 =Jack, 12 = Queen , 13 = King)
*/

然而, 大部分IDE 提供了自动添加星号*, 并且当注释行改变时, 自动重新排列这些星号的功能。

4.9.3 方法注释

每一个方法注释必须放在所描述的方法之前。除了通用标记之外, 还可以使用下面的标记:

  • @param 变量描述

    这个标记将对当前方法的“ param ” (参数)部分添加一个条目。这个描述可以占据多行, 并可以使用HTML 标记。一个方法的所有@param 标记必须放在一起。
  • @return 描述

    这个标记将对当前方法添加“ return” (返回)部分。这个描述可以跨越多行, 并可以使用HTML 标记。
  • @throws 类描述

    这个标记将添加一个注释, 用于表示这个方法有可能抛出异常。

    下面是一个方法注释的示例:
/**
* Raises the salary of an employee.
* @param byPercent the percentage by which to raise the *salary (e.g. 10 means 10%)
* return the amount of the raise
*/
public double raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
return raise;
}

4.9.4 域注释

只需要对公有域(通常指的是静态常量)建立文档。例如,

/**
* The "Hearts" card suit
*/
public static final int HEARTS = 1;

4.9.5 通用注释

下面的标记可以用在类文档的注释中。

  • author 姓名

    这个标记将产生一个“author” ( 作者)条目。可以使用多个@author 标记, 每个@author 标记对应一个作者。
  • @version

    这个标记将产生一个“ version”(版本)条目。这里的文本可以是对当前版本的任何描述。

    下面的标记可以用于所有的文档注释中。
  • @since 文本

    这个标记将产生一个“ since” (始于)条目。这里的text 可以是对引人特性的版本描述。例如,since version 1.7.1。
  • @deprecated

    这个标记将对类、方法或变量添加一个不再使用的注释。文本中给出了取代的建议。

    例如,@deprecated Use <code> setVisible(true) </code> instead

    通过@see 和@link 标记, 可以使用超级链接, 链接到javadoc 文档的相关部分或外部文档。
  • @see 引用

    这个标记将在“ see also” 部分增加一个超级链接。它可以用于类中,也可以用于方法中。这里的引用可以选择下列情形之一:

    package, class#feature label <a href="...“>label</a> "text"

    第一种情况是最常见的。只要提供类、方法或变量的名字,javadoc 就在文档中插入一个超链接。例如,

    @see com.horstmann.corejava.Employee#raiseSalary(double)

    建立一个链接到com.horstmann.corejava.Employee 类的raiseSalary(double)方法的超

    链接。可以省略包名, 甚至把包名和类名都省去, 此时, 链接将定位于当前包或当前类。

    需要注意,一定要使用井号(#),

    而不要使用句号(.)分隔类名与方法名, 或类

    名与变量名。Java 编译器本身可以熟练地断定句点在分隔包、子包类、内部类与方法和变量时的不同含义。但是javadoc 实用程序就没有这么聪明了, 因此必须对它提供帮助。

    如果@see 标记后面有一个< 字符,就需要指定一个超链接。可以超链接到任何URL。例如:

    @see <a href="www.horstmann.com/corejava.html">The Core java home page</a>

    在上述各种情况下, 都可以指定一个可选的标签( label ) 作为链接锚( link anchor) 。 如果省略了label , 用户看到的锚的名称就是目标代码名或URL。如果@see 标记后面有一个双引号(")字符, 文本就会显示在“ see also” 部分。

    例如,

    @see "Core Java 2 volume 2

    可以为一个特性添加多个@see 标记,但必须将它们放在一起。
  • 如果愿意的话, 还可以在注释中的任何位置放置指向其他类或方法的超级链接, 以及插人一个专用的标记, 例如,

    {@link package, class#feature label }

    这里的特性描述规则与@see 标记规则一样。

4.9.6 包与概述注释

可以直接将类、方法和变量的注释放置在Java 源文件中, 只要用/** . . . */ 文档注释界定就可以了。但是, 要想产生包注释,就需要在每一个包目录中添加一个单独的文件。可以有如下两个选择:

1 ) 提供一个以package.html 命名的HTML 文件。在标记<body>...</body>之间的所有文本都会被抽取出来。

2 ) 提供一个以package-info.java 命名的Java 文件。这个文件必须包含一个初始的以/***/ 界定的Javadoc 注释, 跟随在一个包语句之后。它不应该包含更多的代码或注释。

还可以为所有的源文件提供一个概述性的注释。这个注释将被放置在一个名为overview.html的文件中,这个文件位于包含所有源文件的父目录中。标记<body>... </body>之间的所有文本将被抽取出来。当用户从导航栏中选择“ Overview” 时,就会显示出这些注释内容。

4.9.7 注释的抽取

这里, 假设HTML 文件将被存放在目录docDirectory 下。执行以下步骤:

1 ) 切换到包含想要生成文档的源文件目录。如果有嵌套的包要生成文档, 例如com.horstmann.corejava, 就必须切换到包含子目录com 的目录(如果存在overview.html 文件的话, 这也是它的所在目录)。

2 ) 如果是一个包,应该运行命令:

javadoc -d docDirectory nameOfPackage

或对于多个包生成文档, 运行:

javadoc -d docDirectory nameOfPackage nameOfPackage . . .

如果文件在默认包中, 就应该运行:

javadoc -d docDirectory *. java

如果省略了-d docDirectory 选项, 那HTML 文件就会被提取到当前目录下。这样有可能会带来混乱,因此不提倡这种做法。

可以使用多种形式的命令行选项对javadoc 程序进行调整。例如, 可以使用-author 和 -version 选项在文档中包含@author 和@version 标记(默认情况下, 这些标记会被省略)。另一个很有用的选项是-link, 用来为标准类添加超链接。例如, 如果使用命令

javadoc -link http://docs.oracle.com/javase/8/docs/api *.java

那么,所有的标准类库类都会自动地链接到Oracle 网站的文档。

如果使用-linksource 选项, 则每个源文件被转换为HTML ( 不对代码着色, 但包含行编号),并且每个类和方法名将转变为指向源代码的超链接。

有关其他的选项, 请查阅javadoc 实用程序的联机文档,http://docs.orade.com/javase/8/docs/guides/javadoc 。

注释: 如果需要进一步的定制,例如, 生成非HTML 格式的文档, 可以提供自定义的doclet, 以便生成想要的任何输出形式。显然, 这是一种特殊的需求, 有关细节内容请查阅http://docs.oracle.com/javase/8/docs/guides/javadoc/doclet/overview.html 的联机文档。

【Java】Java注释 - 单行、块、文档注释的更多相关文章

  1. Java学习个人备忘录之文档注释

    文档注释 单行注释用 // 多行注释有两种,第一种是 /* 内容 */,第二种是/** 内容 */. 这两种多行注释的区别是/** 内容 */这种注释可以生成一个该文件的注释文档,下面是演示代码. A ...

  2. Java知识回顾 (15&rpar; 文档注释

    说明注释允许你在程序中嵌入关于程序的信息. 你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中,使你更加方便的记录你的程序信息. javadoc 标签 标签 描述 示例 @auth ...

  3. Java入门 - 高级教程 - 09&period;文档注释

    原文地址:http://www.work100.net/training/java-documentation.html 更多教程:光束云 - 免费课程 文档注释 序号 文内章节 视频 1 概述 2 ...

  4. C&num;中的XML文档注释-推荐的文档注释标记

    文档注释是为了方便自己和他人更好地理解代码所实现的功能.下面记录了一些常用的文档注释标记: <C> 用法: <c>text</c> 将说明中的文本标记为代码.例如: ...

  5. Java:API文档;文档注释中的javadoc标记;官方API;自己动手给项目建一个API文档

    1.什么是API文档 在Java语言中有3种注释 //单行注释 /* 多行注释 */ /** * 文档注释 */ API(应用程序接口)文档就是用javadoc命令提取文档注释生成的,html格式,用 ...

  6. C&num; XML 文档注释文件格式

    在编写 C# 代码时,只要在注释按照格式加入 XML 文档注释,例如: /// <summary> /// 这里是类的注释. /// </summary> public cla ...

  7. java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包

    Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...

  8. java代码注释:单行&sol;&sol;,多行&sol;&ast; &ast;&sol;,文档注释&sol;&ast;&ast; &ast;&sol;

    1.单行注释      //: //后到本行结束的所有字符会被编译器忽略; 2.多行注释     /* */: /*  */之间的所有字符会被编译器忽略 3.文档注释     /** */: 在/** ...

  9. Effective Java 第三版——56&period; 为所有已公开的API元素编写文档注释

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

随机推荐

  1. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  2. STL之set

    set都快不会用了...整理下... 应该注意的是set中的值是不能相同的...和map一样... 原文链接:http://blog.csdn.net/wangran51/article/detail ...

  3. &OpenCurlyDoubleQuote;无法更新EntitySet&OpenCurlyDoubleQuote;&ast;&ast;&ast;&ast;&ast;”,因为它有一个DefiningQuery,而元素中没有支持当前操作的元素”问题的解决方法

    百思不得其解,最后发现 1:实体中的表必须有主键(数据库中的表必须有主键),如果没有,会有这样的提示 2:主键设置好后,运行还是会出现类似问题,那就一个郁闷 1):方法一:先从EF中删除刚设置主键的模 ...

  4. C&plus;&plus;find函数

    头文件 #include <algorithm> 函数实现 template<class InputIterator, class T> InputIterator find ...

  5. 在 WinForm 中使用 Direct2D

    在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+.不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率.下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法 ...

  6. 2013 ACM区域赛长沙 I LIKE vs CANDLE&lpar;ZOJ3734&rpar; 很好的一道树形DP

    题意:一棵有根树,每个节点都有一个value值和属性(zan或是 CANDLE).你可以通过反转一些点的属性,反转一个点时候,它的整个子树都会被反转属性.有些点反转消耗代价为X,有些为Y.你的目标的是 ...

  7. Head First C&num;&lpar;赛狗日&rpar;

    实验背景: 人:Joe.Bob和AI希望参见赛狗赌博.最初,Joe有50元,Bob有75元,AI有45元.每次比赛前,他们都会各自决定是否下注以及所押的赌金.直到比赛前,他们都可以改变赌金,但是一旦比 ...

  8. 解决React通过ajax加载数据更新页面不加判断会报错的问题

    通过AJAX加载数据是一个很普遍的场景.在React组件中如何通过AJAX请求来加载数据呢?首先,AJAX请求的源URL应该通过props传入:其次,最好在componentDidMount函数中加载 ...

  9. JSON与XML之间的转换

    public class JsonTest { private final Logger cLogger = Logger.getLogger(getClass()); /** * XML转JSON ...

  10. &lbrack;C&plus;&plus;&rsqb;2-3 倒三角形

    /* 倒三角形(Triangle) 输入正整数n<=20,输出一个n层的倒等腰三角形. 0 ######### 9 = 2* n-1 1 ####### 7 = 2*(n-1)-1 2 #### ...