如何写出格式优美的javadoc?
如果你读过Java源码,那你应该已经见到了源码中优美的javadoc。在eclipse 中鼠标指向任何的公有方法都会显示出详细的描述,例如返回值、作用、异常类型等等。
本文主要来自《Thinking in java》的内容以及我在工作中写javadoc的经验。
三种类型的注释文档
注释文档有三种类型,分别对应于注释位置后面的三种元素:类、域和方法。也就说类注释正好位于类定义之前;域注释位于域定义之前;方法注释位于方法定义之前。如图所示:
//: object/Documentation1.java
/** 类注释 */
public class Documentation1 {
/** 域注释 */
public int i;
/** 方法注释 */
public void f() {}
} ///:~
注意,javadoc只能为public 和protected 成员进行文档注释。private 和包内可访问成员的注释会被忽略掉,所以在输出结果中看不到他们。如果想在输出结果中查看可以使用 -private 进行标记。这样做是因为只有公用的和受保护的成员才能在文件之外被使用。上述代码生成的HTML文档可以在浏览器中查看。
嵌入式HTML
javadoc通过生成的html文档传送HTML命令,这使你能充分利用HTML。
/**
* <pre>
* System.out.println(new date())
* </pre>
*/
///:~
从上述注释中我们也能看出,注释是会进行输出的,所以才会有System.out.println(new date())
这个代码。
还可以用HTML代码格式化注释:
/**
* You can <em>even</em> insert a list:
* <ol>
* <li> item one
* <li> item two
* <li> item three
* </ol>
*/
///:~
注意,每一行星号以及之后的空格内容不会输出到文档中,另外也不要在javadoc中使用标题标签,例如<h1>
或者<hr>
。这是因为javadoc
会插入自己的标题,而你的标题可能同它们发生冲突。
javadoc标签
1.@see:引用其他类
@see 标签允许用户引用其他类的文档。javadoc会在其生成的HTML文件中,通过@see 标签链接到其他文档。格式如下:
@see 类名
@see 完整类名
@see 完整类名#方法名
每一格式都会在生成的文档里自动加入一个超链接的“See Also”(参见)条目。注意javadoc不会检查我们指定的超链接,不会验证它们是否有效。
2.{ @link package.class#member label }
该标签与@see极其相似,只是它用于行内,并且是用“label” 作为超链接文本而不用“See Also”。
3.{ @docRoot }
该标签产生到文档根目录的相对路径,用于文档树页面的显示超链接
4.{ @inheritDoc }
该标签从当前这个类的最直接的基类中继承相关文档到当前的文档注释中。
5. @version
格式如下:
@version version-information
其中,“version-information”代表任何适合作为版本说明的资料。若在javadoc命令行使用了“-version”标记,就会从生成的HTML文档里提取出版本信息。
6. @author
格式如下:
@author author-information
其中,“author-information”包括您的姓名、电子函件地址或者其他任何适宜的资料。若在javadoc命令行使用了“-author”标记,就会专门从生成的HTML文档里提取出作者信息。
可为一系列作者使用多个这样的标记,但它们必须连续放置。全部作者信息会一起存入最终HTML代码的单独一个段落里。
7. @since
该标签允许你指定程序代码的最早使用版本,可以在HTML java文档中看到它被用来指定所用的JDK版本的情况。
8. @param
该标签用于方法文档中,行使如下:
@param parameter-name description
其中,“parameter-name”是指参数列表内的标识符,而“description”代表一些可延续到后续行内的说明文字。一旦遇到一个新文档标记,就认为前一个说明结束。可使用任意数量的说明,每个参数一个。
9. @return
格式如下:
@return description
其中,“description”是指返回值的含义。它可延续到后面的行内。
10. @throws
格式如下:
@throws fully-qualified-class-name description
其中fully-qualified-class-name description给出一个异常类的无歧义的名字,而该异常类在别处定义。description告诉你为什么此特殊类型的异常会在方法调用中出现。
11.@Deprecated
该标签用于之处一些旧特性已由改进的新特性所取代,建议用户不要再使用这些旧特性,因为在不久的将来它们很可能会被删除。如果使用一个标记为@Deprecated的方法,则会引起编译器发布警告。
源码示例
我们看看JDK8中equals
方法的注释是怎样写的:
/**
* Compares this string to the specified object. The result is {@code
* true} if and only if the argument is not {@code null} and is a {@code
* String} object that represents the same sequence of characters as this
* object.
*
* @param anObject
* The object to compare this {@code String} against
*
* @return {@code true} if the given object represents a {@code String}
* equivalent to this string, {@code false} otherwise
*
* @see #compareTo(String)
* @see #equalsIgnoreCase(String)
*/
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
再来看下在eclipse中的显示效果。
{@code } 前面没有介绍过,实际显示效果很容易看出来,就是把空格后的内容显示成代码的样式。
写出言简意赅,便于维护的注释需要长期的练习。除了工作中有意识的使用javadoc以外,阅读源码,模仿源码注释的写法也是不错的选择。
如何写出格式优美的javadoc?的更多相关文章
- 写出高效优美的单片机C语言代码
程序能跑起来并不见得你的代码就是很好的c代码了,衡量代码的好坏应该从以下几个方面来看 1,代码稳定,没有隐患. 2,执行效率高. 3,可读性高. 4,便于移植. 下面发一些我在网上看到的技巧和自己的一 ...
- perl 里面如何写出阅读友好的代码提示
在我们使用别人写好的程序时,经常会使用-h 之类的东西查看一下简单的帮助手册或者说明信息: 对于perl 语言而言,写起来简单,经常随手一写,解决了当时的问题,但是过几天去看,你都不知道这个脚本该怎么 ...
- 将JSON对象带有格式的写出到文件中
需求:将一个JSON对象写出到文件中,要求文件中的JSON数据带有简单的格式.代码的实现参考了Java算法中的栈处理括号匹配问题.好了,不多说了,下面是代码的实现. 代码: package gemu. ...
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...
- 如何写出优美的 C 代码 面向对象的 C
基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体.结构体正是面向对象语言中的类的概念的雏形,比如: ty ...
- 应用MVP模式写出可维护的优美Android应用
在Android开发中,我们常常会动辄写出数千行的Java类,而当一个Activity有4.5千行的时候,想找一个逻辑在哪儿就会显得异常痛苦了.比如想在数据加载错误的时候,显示一个提示信息,上上下下得 ...
- PyTorch最佳实践,怎样才能写出一手风格优美的代码
[摘要] PyTorch是最优秀的深度学习框架之一,它简单优雅,非常适合入门.本文将介绍PyTorch的最佳实践和代码风格都是怎样的. 虽然这是一个非官方的 PyTorch 指南,但本文总结了一年多使 ...
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
- 如何写出优雅的CSS代码 ?(转)
对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混 ...
随机推荐
- jdb--gdb---java 远程调试(java application与web application)
命令比较 gdb jdb bt where del clear stop brea ...
- vue学习五之VueCLi
概念 通俗的说,Vue CLI是我们创建大型项目时的脚手架,所谓脚手架,就是帮助我们建设好了建造大厦的所需模板,建设者只需往模板里面填入实质内容,即可完成大厦的建设,对于程序开发来说,脚手架使程序员只 ...
- [vue]vue v-on事件绑定(原生修饰符+vue自带事件修饰符)
preventDefault阻止默认行为和stopPropagation终止传递 event.preventDefault() 链接本来点了可以跳转, 如果注册preventDefault事件,则点了 ...
- mysql 简单主从
主服务器master [root@localhost ~]# vim /etc/my.cnf [mysqld] log-bin=mysql-bin #必须开启log-bin server-id=129 ...
- OS-96
print('os.access(path,mode):检验权限模式----------------------------------------------------------------') ...
- [LeetCode] 161. One Edit Distance_Medium
Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...
- Qt5
最简单的分割窗体 #include <QApplication> #include <QLabel> #include <QSplitter> int main(i ...
- HashMap(JDK1.9)详解
一.HashMap的概念. 1.HashMap类的继承实现关系如下:因此HashMap的功能有:可序列化.可克隆等功能. 2.HashMap的数据结构:数组+链表+红黑树. 3.键值对的存储方案:第一 ...
- Python: itertools.compress()
定义: itertools.compress() 输入: iterable对象 相应的Boolean选择器序列 输出: iterable对象中对应选择器为True的元素 用途: 当需要用另外一个相关联 ...
- Kettle 学习导航帖整理
最近在学习Kettle,期间收集了很多帖子,在此整理汇总以备后续查询或分享,如果有更好的学习资源也欢迎在评论区留言,谢谢. Kettle入门: Kettle简介:百度百科https://baike.b ...