【Java】Java注释 - 单行、块、文档注释
简单记录,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注释 - 单行、块、文档注释的更多相关文章
- Java学习个人备忘录之文档注释
		文档注释 单行注释用 // 多行注释有两种,第一种是 /* 内容 */,第二种是/** 内容 */. 这两种多行注释的区别是/** 内容 */这种注释可以生成一个该文件的注释文档,下面是演示代码. A ... 
- Java知识回顾 (15)  文档注释
		说明注释允许你在程序中嵌入关于程序的信息. 你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中,使你更加方便的记录你的程序信息. javadoc 标签 标签 描述 示例 @auth ... 
- Java入门 - 高级教程 - 09.文档注释
		原文地址:http://www.work100.net/training/java-documentation.html 更多教程:光束云 - 免费课程 文档注释 序号 文内章节 视频 1 概述 2 ... 
- C#中的XML文档注释-推荐的文档注释标记
		文档注释是为了方便自己和他人更好地理解代码所实现的功能.下面记录了一些常用的文档注释标记: <C> 用法: <c>text</c> 将说明中的文本标记为代码.例如: ... 
- Java:API文档;文档注释中的javadoc标记;官方API;自己动手给项目建一个API文档
		1.什么是API文档 在Java语言中有3种注释 //单行注释 /* 多行注释 */ /** * 文档注释 */ API(应用程序接口)文档就是用javadoc命令提取文档注释生成的,html格式,用 ... 
- C# XML 文档注释文件格式
		在编写 C# 代码时,只要在注释按照格式加入 XML 文档注释,例如: /// <summary> /// 这里是类的注释. /// </summary> public cla ... 
- java基础课程笔记 static  主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
		Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ... 
- java代码注释:单行//,多行/* */,文档注释/** */
		1.单行注释 //: //后到本行结束的所有字符会被编译器忽略; 2.多行注释 /* */: /* */之间的所有字符会被编译器忽略 3.文档注释 /** */: 在/** ... 
- Effective Java 第三版——56. 为所有已公开的API元素编写文档注释
		Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ... 
随机推荐
- STL——容器(Set & multiset)编译器提供的16种构造(挖个坑)
			Set & multiset 在vs2019编译器中提供了16种构造方法 1.默认的无参构造 2.比较容器内容,key_comp()函数返回一个比较key的函数. 3.使用迭代器的区间拷贝,拷 ... 
- zstd c++ string 压缩&解压
			zstd 简介 维基百科定义: Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.该名称也指其C语言的参考实现.第1版的实现于2016年8月31日 ... 
- Docker(二):Docker镜像仓库Harbor搭建
			安装docker-compose 因为docker-compose下载容易失败, 所以选择从github下载方式安装. [root@harbor ~]# mv docker-compose-Linux ... 
- create-react-app 基于ts项目,使用react-router-dom搭建项目
			准备工作 来个react项目 create-react-app 基于TS的项目 ts项目安装后 删除node_modules,重新 yarn install, 不然jsx会报错 安装React-rou ... 
- 刚入坑之C#《方法》解说
			说好的用一周时间学方法,我都快耽误成两周了.原因就是跟着传智播客的课程做了个飞行棋项目,想要梳理其中的方法却把自己绕晕了.那接下来我先说一下我学到方法的内容,在最后献上飞行器项目的代码,当然是传智播客 ... 
- CTF练习②
			参考的文章链接 :https://www.cnblogs.com/chrysanthemum/p/11657008.html 这个题是强网杯的一道SQL注入的题,网上有不少的在线靶场和writeup, ... 
- Spring Boot GraphQL 实战 01_快速入门
			hello,大家好,我是小黑,又和大家见面啦~ 新开一个专题是关于 GraphQL 的相关内容,主要是通过 Spring Boot 来快速开发 GraphQL 应用,希望对刚接触 GraphQL 的同 ... 
- 说说 Python 中的高阶函数
			高阶函数(higher-order function)指的是:接受一个函数为参数,或者把函数作为结果值返回的函数. 1 sorted() 比较常见的高阶函数是 sorted(),其内部的关键字参数 k ... 
- 转载:从输入 URL 到页面加载完的过程中都发生了什么事情?
			原帖地址:http://www.guokr.com/question/554991/ 1)把URL分割成几个部分:协议.网络地址.资源路径.其中网络地址指示该连接网络上哪一台计算机,可以是域名或者IP ... 
- Linux中的System V信号量
			在进程同步,并发运行时,保证按序地访问共享资源是十分重要的.因此引入了临界区的概念,一次只能有一个线程进入临界区完成他的指令.而信号量(semaphore)的作用,类似于一个交通信号灯,它负责进程协作 ... 
