简单记录,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中的,所 ...
随机推荐
-
nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
-
STL之set
set都快不会用了...整理下... 应该注意的是set中的值是不能相同的...和map一样... 原文链接:http://blog.csdn.net/wangran51/article/detail ...
-
“无法更新EntitySet“*****”,因为它有一个DefiningQuery,而元素中没有支持当前操作的元素”问题的解决方法
百思不得其解,最后发现 1:实体中的表必须有主键(数据库中的表必须有主键),如果没有,会有这样的提示 2:主键设置好后,运行还是会出现类似问题,那就一个郁闷 1):方法一:先从EF中删除刚设置主键的模 ...
-
C++find函数
头文件 #include <algorithm> 函数实现 template<class InputIterator, class T> InputIterator find ...
-
在 WinForm 中使用 Direct2D
在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+.不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率.下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法 ...
-
2013 ACM区域赛长沙 I LIKE vs CANDLE(ZOJ3734) 很好的一道树形DP
题意:一棵有根树,每个节点都有一个value值和属性(zan或是 CANDLE).你可以通过反转一些点的属性,反转一个点时候,它的整个子树都会被反转属性.有些点反转消耗代价为X,有些为Y.你的目标的是 ...
-
Head First C#(赛狗日)
实验背景: 人:Joe.Bob和AI希望参见赛狗赌博.最初,Joe有50元,Bob有75元,AI有45元.每次比赛前,他们都会各自决定是否下注以及所押的赌金.直到比赛前,他们都可以改变赌金,但是一旦比 ...
-
解决React通过ajax加载数据更新页面不加判断会报错的问题
通过AJAX加载数据是一个很普遍的场景.在React组件中如何通过AJAX请求来加载数据呢?首先,AJAX请求的源URL应该通过props传入:其次,最好在componentDidMount函数中加载 ...
-
JSON与XML之间的转换
public class JsonTest { private final Logger cLogger = Logger.getLogger(getClass()); /** * XML转JSON ...
-
[C++]2-3 倒三角形
/* 倒三角形(Triangle) 输入正整数n<=20,输出一个n层的倒等腰三角形. 0 ######### 9 = 2* n-1 1 ####### 7 = 2*(n-1)-1 2 #### ...