- 浏览: 145746 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
Davidream:
楼主: HessianKit库,我从你提供的地址下 ...
ios Hessian Kit 包使用 -
linchanglai:
gaozengguang 写道我想请教一下:
in ...
java 运算符 -
fishinsky:
editplus 那需要这么麻烦,工具-首选项-常规-选中添加 ...
editplus 添加到右键菜单 -
yangguanghua:
我现在就感觉自己的技术停滞不前了
Java 学习路径 -
gaozengguang:
我想请教一下:
int i = 4;
i ...
java 运算符
Doclet 概述 |
目录
基础
Doclet 是用 JavaTM编程语言编写的程序,它用 doclet API 指定 Javadoc 工具的输出内容和格式。缺省情况下,Javadoc 工具用 SunTM 提供的“标准”doclet 来生成 HTML 形式的 API 文档。然而,用户也可用自己的 doclet 根据个人喜好自定义 Javadoc 输出。用户可以利用 doclet API从头开始编写 doclet,也可以对标准 doclet 进行修改,以适合自己的需要。
下面是创建和使用自己的 doclet 的基本步骤:
- 编写用来构成 doclet 的 Java 程序。为使用 doclet API,该程序应导入 com.sun.javadoc.*。程序的入口点是一个带有 public static boolean start 方法的类,它将 RootDoc 作为参数。
- 编译 doclet。可以使用 Java Development Kit 的编译器 javac 来编译它。
- 用 -doclet <YourDoclet> 选项运行 javadoc 工具,生成 doclet 指定的输出。
doclet API 类文件在 JDK 软件的 lib/tools.jar 文件中。当编译 doclet 和使用自定义 doclet 时,tools.jar 必须在类路径上。为此,可以对 javac 和 javadoc 使用 -classpath 选项。
如果运行 javadoc 时未使用 -doclet 命令行选项,则按缺省状态的标准 doclet 生成 HTML 格式的 API 文档。
包 com.sun.javadoc 由定义 doclet API 的接口组成。JDKTM 软件的 lib/tools.jar 文件包含这些接口及实现这些接口的类的私有包。tools.jar 文件还包括实现标准 doclet 的类。
简单示例
参看下面由一个短类组成的简单示例 doclets,您可以对 doclets 的运行方式有所了解:
import com.sun.javadoc.*; public class ListClass { public static boolean start(RootDoc root) { ClassDoc[] classes = root.classes(); for (int i = 0; i < classes.length; ++i) { System.out.println(classes[i]); } return true; } }
通过查看代码,不难猜到:该 doclet 将取出 Javadoc 所操作的一些类,然后将它们的名称输到标准输出上。
就该 doclet 而言,首先应注意到:为使用 doclet API,程序导入了 com.sun.javadoc.*。对于所有 doclets,入口点均为 public static boolean start 方法。start 方法将 RootDoc 作为参数使用。该参数携带运行 javadoc 时命令行指定的所有选项信息,以及 Javadoc 所操作的类和包的信息。
RootDoc 定义返回 ClassDoc 数组的 classes 方法,其中数组的元素代表 Javadoc 解析的类。随后,for 循环输出数组中每个类的名称(将 ClassDoc 传给 println 将输出 ClassDoc 代表的类名)。
运行该 doclet 前,必须先进行编译。可以用 JDK javac 编译器来编译它。API 类文件在 JDK 软件的文件 lib/tools.jar 中,因此编译器的 classpath 中需包括 tools.jar,对本例如下所示:
javac -classpath C:\jdk1.2\lib\tools.jar ListClass.java
为运行 ListClass doclet,您必须用 Javadoc 的 -doclet 标记指向编译后的 doclet。例如,要在文件 MyClass.java 上运行 doclet,需使用命令:
% javadoc -doclet ListClass -classpath C:\jdk1.2\lib\tools.jar MyClass.java
输出结果将是字符串 "MyClass"。注意:该命令也要求类路径中包含 tools.jar。
关于命令行选项的说明:如果运行 javadoc -help,就会看到 Javadoc 工具有两个命令行选项集。一个选项集是普通选项集,它适用于任何 doclet。另一个则专门用于标准 doclet。使用自定义 doclets 时,将不能使用第二个选项集。自定义 doclets 可以定义自己的命令行选项。参阅下面的示例。
要生成 API 文档,doclet 将会比该示例要复杂得多。如果想自定义 Javadoc 生成的 API 文档格式,可能应该从缺省标准 doclet 起步,必要时对其进行修改,而不是完全从头开始编写 doclet。
自定义 Javadoc 输出
为了自定义 Javadoc 工具的输出,需要编写自己的 doclet,用于指定所需的输出格式和内容。如果希望 HTML 输出与缺省的输出大体相同,则可以用标准 doclet 作为创建 doclet 的起点。您可以在标准 doclet 中扩展相应的类,必要时添加或覆盖方法,以生成符合要求的输出。也可以复制整个标准 doclet 并进行修改。假如以标准 doclet 的副本为起点,就要删除每个源文件开始位置的 package 语句,并将这些语句改为自己的新包的名称。
<!-- As a trivial example, suppose you want to customize the HTML output generated by Javadoc so that the horizontal rules were bolder and thicker than the default horizonal rules in the standard output. How would you go about modifying the APIs in the standard doclet to produce these to changes? Because the customization in question involves a change in the HTML formatting, the above <a href="#api">API summary</a> suggests that you might need to modify the APIs in class <tt>HtmlWriter</tt>. If you look at the <a href="source/HtmlWriter.java">source</a> for the HtmlWriter class, you will find methods for writing the HTML tags used in generating the default HTML documentation. Among these, there is a method for writing the HTML tag for horizonal rules: <blockquote> <pre> public void hr() { println("<hr>"); } </pre> </blockquote> You'll also notice that the HtmlWriter class doesn't provide a way to produce the custom horizontal rules that you want. You can therefore add a method to HtmlWriter, or an HtmlWriter subclass, that prints the custom tag that you want. For example, you might add this method: <blockquote> <pre> public void hrCustom() { println("<hr size=3 noshade>"); } </pre> </blockquote> and call it instead of the <tt>hr</tt> method when you want to your output to use the thicker horizontal rules. <p> -->
示例 - 创建和处理自定义标记
假定在文档注释中除标准标记(例如 @param 和 @return)之外,您还想使用自定义标记 @mytag。为了利用自定义标记的信息,需要在自己的 doclet 中使用代表自定义标记的 Tag 的实例。为此,最简单的办法是使用 Doc 或 Doc 子类的 tags(String) 方法。该方法返回 Tag 数组,代表其名称与字符串参数匹配的所有标记。例如,如果 method 是 MethodDoc 的实例,那么
method.tags("mytag")
将返回 Tag 对象的数组,它代表该方法文档注释中的所有 @mytag 标记。然后即可用 Tag 的 text 方法访问 @mytag 标记的信息。此方法将返回一个字符串,代表必要时可以解析或使用的标记的内容。例如,如果文档注释包含的自定义标签为:
@mytag Some dummy text.
则 text 方法将返回字符串 "Some dummy text."。
下面的 doclet 即使用上述思想输出它查找到的特定标记的所有实例中所包含的内容:
import com.sun.javadoc.*; public class ListTags { public static boolean start(RootDoc root){ String tagName = "mytag"; writeContents(root.classes(), tagName); return true; } private static void writeContents(ClassDoc[] classes, String tagName) { for (int i=0; i < classes.length; i++) { boolean classNamePrinted = false; MethodDoc[] methods = classes[i].methods(); for (int j=0; j < methods.length; j++) { Tag[] tags = methods[j].tags(tagName); if (tags.length > 0) { if (!classNamePrinted) { System.out.println("\n" + classes[i].name() + "\n"); classNamePrinted = true; } System.out.println(methods[j].name()); for (int k=0; k < tags.length; k++) { System.out.println(" " + tags[k].name() + ": " + tags[k].text()); } } } } } }
doclet 所查找的标记由变量 tagName 指定。字符串 tagName 的值可以是自定义或标准的任意标记名。 该 doclet 将写到标准输出,但它的输出格式是可以修改的。例如,可以将 HTML 输出写到文件中。
示例 - 使用自定义命令行选项
用户可以编写接受自定义命令行选项的 doclets。为了解其工作原理,不妨让我们扩充一下上面的 doclet 示例,使它可以允许用户用命令行选项指定要查找的标记名。
任何使用自定义选项的 doclet 必须有一个名为 optionLength(String option) 的方法,该方法返回 int。对于想要 doclet 识别的每个自定义选项,optionLength 必须返回选项的组成部分数或符号数。示例中,我们想使用 -tag mytag 形式的自定义选项。该选项有两个部分:-tag 选项自身及其值。因此 doclet 中的 optionLength 方法必须为 -tag 选项返回 2。对于无法识别的选项,optionsLength 方法应返回 0。
下面是整个扩充后的 doclet:
import com.sun.javadoc.*; public class ListTags { public static boolean start(RootDoc root){ String tagName = readOptions(root.options()); writeContents(root.classes(), tagName); return true; } private static void writeContents(ClassDoc[] classes, String tagName) { for (int i=0; i < classes.length; i++) { boolean classNamePrinted = false; MethodDoc[] methods = classes[i].methods(); for (int j=0; j < methods.length; j++) { Tag[] tags = methods[j].tags(tagName); if (tags.length > 0) { if (!classNamePrinted) { System.out.println("\n" + classes[i].name() + "\n"); classNamePrinted = true; } System.out.println(methods[j].name()); for (int k=0; k < tags.length; k++) { System.out.println(" " + tags[k].name() + ": " + tags[k].text()); } } } } } private static String readOptions(String[][] options) { String tagName = null; for (int i = 0; i < options.length; i++) { String[] opt = options[i]; if (opt[0].equals("-tag")) { tagName = opt[1]; } } return tagName; } public static int optionLength(String option) { if(option.equals("-tag")) { return 2; } return 0; } public static boolean validOptions(String options[][], DocErrorReporter reporter) { boolean foundTagOption = false; for (int i = 0; i < options.length; i++) { String[] opt = options[i]; if (opt[0].equals("-tag")) { if (foundTagOption) { reporter.printError("Only one -tag option allowed."); return false; } else { foundTagOption = true; } } } if (!foundTagOption) { reporter.printError("Usage: javadoc -tag mytag -doclet ListTags ..."); } return foundTagOption; } }
在修改后的 doclet 中,变量 tagName 是用命令行选项 -tag 设置的。对于自定义选项,它的 optionLength 方法返回 2。注意:这里并不需要 optionLength 的显式调用。
该 doclet 还增加了 readOptions 方法,用于解析命令行选项以查找 -tag 选项。它所利用的是这样一个事实:Rootdoc.options 方法返回包含选项信息的二维 String 数组。例如,假定命令为:
javadoc -foo this that -bar other ...
RootDoc.options 方法将返回
options()[0][0] = "-foo" options()[0][1] = "this" options()[0][2] = "that" options()[1][0] = "-bar" options()[1][1] = "other"
数组第二个下标中的元素个数由 optionLength 方法决定。本例中,对于选项 -foo,optionLength 返回 3;
对于选项 -bar,则返回 2。
validOptions 方法为可选方法,可以用来测试命令行标记用法的有效性。如果 validOptions 方法存在,就会被自动调用,而无需显式调用。如果选项用法有效,则该方法应返回 true,否则返回 false。当发现命令行选项的使用不正确时,还可从 validOptions 输出相应的错误信息。该示例 doclet 的 validOptions 方法检查是否使用了 -tag 选项以及是否仅使用了一次。
<!-- Body text ends here --><!-- ============================================================== -->
版权所有 © 1995-98 Sun Microsystems, Inc. 保留所有权利。
如有意见,请发送至:javadoc-tool@sun.com |
发表评论
-
java 书籍推荐
2012-04-28 00:21 891http://liugang-ok.iteye.com/blo ... -
eclipse debug jdk
2012-03-20 10:59 817Debug JDK,让变量现行 http://lovesps ... -
java 国际化
2012-02-19 22:53 0这里比较基础 http://www.cnblogs.com/ ... -
java Annotation 使用
2012-02-07 10:09 707java Annotation 使用文章, 发现非常详细, 基 ... -
jdic使用
2011-11-21 17:42 1233在java应用程序中嵌入浏览器 http://duduhe ... -
swing hide cursor
2011-09-01 06:58 945It appears that the Cursor clas ... -
java byte array to hex String
2011-08-23 19:33 3027String str = new String(byte[] ... -
Java Serial Communication
2011-08-21 23:22 812串口通信详解 http://david20080309.it ... -
swing 新应用
2011-08-16 00:34 911关于自定义table, jTabbedPane等 jt ... -
在可执行jar 包中动态载入第三方jar class的有关问题
2011-08-10 14:11 861转自 : http://www.cnblogs.com/bao ... -
java 播放音频
2011-08-08 23:54 1383http://www.jsresources.org/exam ... -
jfreechart 心电图
2011-08-01 22:01 1334这个是个demo , 可以拿去改改 -
java 打印
2011-07-29 18:11 754http://java.sun.com/products/ja ... -
jmock cookbook 资源整合
2011-05-08 23:32 965jmock cookbook 资源整合 包含 1. jmo ... -
判断端口是否被占用和常用正则表达式
2011-02-23 22:05 1325判断端口是否被占用和常用正则表达式 全是goole得到 ... -
java Thread 片段整理
2010-07-18 21:09 990一, 线程的生命周期 1. Wating state一旦线程 ... -
Java 学习路径
2009-12-19 09:30 1235最近一直由于一些原因, ... -
URL 的具体分析
2009-12-13 10:57 13781. 创建 URL URL(String spec) ... -
java.text.MessageFormat的使用
2009-12-08 22:59 2454MessageFormat 类用来格式化消息。非常的好用 ... -
java.text.*包的使用
2009-12-08 22:41 1349System.out.println("abc&qu ...
相关推荐
白色大气风格的旅游酒店企业网站模板.zip
python实现用户注册
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
内容概要:文档名为《平方表,派表集合.docx》,主要内容是1至1000的平方值以及1至1000与π的乘积结果。每个数字从1开始,逐步增加至1000,对应地计算了平方值和乘以π后的值。所有计算均通过Python脚本完成,并在文档中列出了详细的计算结果。 适合人群:需要进行数学计算或程序验证的学生、教师和研究人员。 使用场景及目标:用于快速查找特定数字的平方值或其与π的乘积,适用于教学、科研及程序测试等场景。 阅读建议:可以直接查阅所需的具体数值,无需从头到尾逐行阅读。建议在使用时配合相应的计算工具,以验证和拓展数据的应用范围。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
白色大气风格的健身私人教练模板下载.zip
白色简洁风的商务网站模板下载.zip
白色大气风格的前端设计案例展示模板.zip
内容概要:本文介绍了两个有趣的圣诞树项目方向:一是使用Arduino或Raspberry Pi开发可编程的圣诞树灯光控制系统;二是基于MATLAB开发一个圣诞树模拟器。前者通过硬件连接、编写Arduino/Raspberry Pi程序、MATLAB控制程序来实现LED灯带的闪烁;后者则通过创建圣诞树图形、添加动画效果、用户交互功能来实现虚拟的圣诞树效果。 适合人群:具备基本电子工程和编程基础的爱好者和学生。 使用场景及目标:①通过硬件和MATLAB的结合,实现实际的圣诞树灯光控制系统;②通过MATLAB模拟器,实现一个有趣的圣诞树动画展示。 阅读建议:读者可以根据自己的兴趣选择合适的项目方向,并按照步骤进行动手实践,加深对硬件编程和MATLAB编程的理解。
白色扁平风格的温室大棚公司企业网站源码下载.zip
Navicat.zip
内容概要:本文详细介绍了主成分分析(PCA)技术的原理及其在Scikit-learn库中的Python实现。首先讲解了PCA的基本概念和作用,接着通过具体示例展示了如何使用Scikit-learn进行PCA降维。内容涵盖了数据准备、模型训练、数据降维、逆转换数据等步骤,并通过可视化和实际应用案例展示了PCA的效果。最后讨论了PCA的局限性和参数调整方法。 适合人群:数据科学家、机器学习工程师、数据分析从业者及科研人员。 使用场景及目标:适用于高维数据处理,特别是在需要降维以简化数据结构、提高模型性能的场景中。具体目标包括减少计算复杂度、提高数据可视化效果和改进模型训练速度。 其他说明:本文不仅提供了详细的代码示例,还讨论了PCA在手写数字识别和机器学习模型中的应用。通过比较原始数据和降维后数据的模型性能,读者可以更好地理解PCA的影响。
VOC格式的数据集转COCO格式数据集 VOC格式的数据集转YOLO格式数据集。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
数字信号处理课程设计.doc
白色扁平化风格的灯饰灯具销售企业网站模板.zip
华豫佰佳组合促销视图.sql
白色大气风格的商务团队公司模板下载.zip
白色大气风格的VPS销售网站模板.zip