简单记录,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) 文档注释

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

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

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

  4. C#中的XML文档注释-推荐的文档注释标记

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

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

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

  6. C# XML 文档注释文件格式

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

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

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

  8. java代码注释:单行//,多行/* */,文档注释/** */

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

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

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

随机推荐

  1. js实现转盘抽奖

    大转盘抽奖,主要通过css3的"transform:rotate(0deg)"属性来控制元素的旋转角度来实现. 通常,抽奖的过程需要渐进的效果,所以直接通过旋转属性写比较繁琐. 这 ...

  2. 微信小程序下拉加载下一页

    小程序做得多了,有些常用功能就有必要记录一下 请看详解: 微信小程序之下拉触底时加载下一页 wxml参考: <scroll-view class='dataContainer' scroll-y ...

  3. Mysql锁机制--悲观锁和乐观锁

    1. 悲观锁简介 悲观锁(Pessimistic Concurrency Control,缩写PCC),它指的是对数据被外界修改持保守态度,因此,在整个数据处理过程中, 将数据处于锁定状态.悲观锁的实 ...

  4. Spark Connector Reader 原理与实践

    本文主要讲述如何利用 Spark Connector 进行 Nebula Graph 数据的读取. Spark Connector 简介 Spark Connector 是一个 Spark 的数据连接 ...

  5. SysCtlDelay 实现延时

    SysCtlDelay 实际上由 3 条汇编指令实现,一次可以延时 3 个 clock. 例如,初始化系统时钟: SysCtlClockFreqSet((SYSCTL_XTAL_16MHZ | SYS ...

  6. CentOS7部署GeoServer

    CentOS7部署GeoServer 一.安装JDK81.下载jdk1.8 wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a ...

  7. webform中配置服务器控件的样式

    前台 Style <asp:Label ID="Label1" runat="server" Text="Label" Style=& ...

  8. Log4Net日志的简单使用示例

    前言 源码参考示例地址 http://www.51aspx.com/Code/log4netusedemo/2707 本例博客园源码 https://files.cnblogs.com/files/m ...

  9. android studio 找不到真机设备

    连接USB之后没有显示连接,如下图 设备管理器: 解决:重启电脑

  10. JAR-使用JAVA命令编译打包一个可执行jar包

    一.开发一个演示项目 项目源代码开发 项目名称叫jar-package-example(其实只是一个文件夹, 用以将演示的所有文件夹和文件存放在其中, 没啥其它作用), 为了方便, 后文统一叫jar- ...