javadoc - Java API 文档生成器详解 转贴

目录

  • 结构
  • 说明
    • 相关文档
    • Javadoc Doclets
    • 术语
  • 源文件
  • 生成的文件
  • 文档注释
    • 注释源代码
  • Javadoc 标记
  • 使用标记的地方
  • 命令行参数文件
  • 选项
    • Javadoc 选项
    • 标准 Doclet 提供的选项
  • 简单示例
    • 建立包的文档
    • 建立类的文档
    • 建立包和类的文档
  • 实际示例
  • 环境
    • CLASSPATH
  • 参阅

结构

javadoc [ options ] [ packagenames ] [ sourcefiles ] [ @files ]

参数可按任意次序排列。

options
命令行选项,如本文档中所指定。要了解 javadoc 选项的典型用法,参见 实际示例。
packagenames
一系列包的名字,用空格分隔,例如 java.lang java.lang.reflect java.awt。必须分别指定想要为之建立文档的每一个包。Javadoc 不递归地作用于子包。不允许使用通配符,如(*)。参见 示例 - 建立包的文档
sourcefiles
一系列源文件名,用空格分隔。源文件名可包括路径和通配符如(*)。例如: Button.java /home/src/java/awt/Graphics*.java 参见 示例 - 建立类的文件。还可混合包名和源文件,如 示例 - 建立包和类的文档 中所示。
@files
以任何次序包含包名和源文件的一个或多个文件。


说明

Javadoc

可对 整个包、单个源文件 或 二者 运行 Javadoc。在第一种情况中,将一系列包名作为参数传递给 javadoc。在第二种情况中,传递一系列源(.java)文件名。在本文档最后给出了 示例。

在实现时,Javadoc 要求且依赖于 java 编译器完成其工作。Javadoc 调用部分 javac 编译声明部分,忽略成员实现。它建立类的内容丰富的内部表示,包括类层次和“使用”关系,然后从中生成 HTML。Javadoc 还从源代码的 文档注释 中获得用户提供的文档。

实际上,Javadoc 将在不带方法体的纯 stub 文件的 .java 源文件上运行。这意味着可以创建 API 的最早期阶段,在编写任何代码之前,就可编写文档注释并运行 Javadoc。

依赖编译器可以确保 HTML 输出完全对应于实际实现,这些实现可能有赖于隐式的(而非显式的)源代码。例如,Javadoc 将建立在 .class 文件中存在但在源代码中不存在的 缺省构造函数(Java 语言规范 的第 8.6.7 节)的文档。

当 Javadoc 建立其内部文档结构时,它将加载所有引用的类。由于这一点,Javadoc 必须能查找到所有引用的类,包括引导类、扩展类和用户类。有关详细信息,参见如何查找类。一般而言,所创建的类必须加载为扩展或位于 Javadoc 的类路径中。

Javadoc Doclets

可使用 doclets 自定义 Javadoc 输出的内容和格式。Javadoc 具有一个缺省的“内嵌”doclet,叫作标准 doclet,它生成 HTML-格式的 API 文档。用户可修改或扩展标准 doclet,或编写自己的 doclet 以生成 HTML、XML、MIF、RTF 或想要的任何输出格式。关于 doclets 及其用法的信息位于下列位置:

Javadoc Doclets -doclet 命令行选项

当没有用 -doclet 命令行选项指定自定义 doclet 时,Javadoc 将使用缺省的标准 doclet。不管使用哪个 doclet,javadoc 工具都有几个命令行选项可用。标准 doclet 还添加了额外的命令行选项集。二个选项集都将在下面的 选项 一节中介绍。

相关文档

有关 Javadoc 1.2 中增强功能的详细信息,参见 Javadoc 增强。 有关常问问题的答案、关于 Javadoc 相关工具的信息以及 bug 的解决方案,参见 Javadoc FAQ。 有关如何编写文档注释的信息,参见 如何为 Javadoc 编写文档注释。

术语

在 Javadoc 环境中,有些术语具有特定的意义:

生成的文档 由 javadoc 工具根据 Java 源代码中文档注释生成的文档。缺省的生成文档是 HTML 格式,并由标准 doclet 生成。

名字 Java 语言中的名字,通常为包、类、接口、域、构造函数或方法的名字。名字可以是完全限定的,例如 java.lang.String.equals(java.lang.Object),也可是部分限定的,例如 equals(Object)

带文档的类 在 javadoc 运行期间为之生成了全部文档的类和接口。要生成文档,源文件必须可用,并且其源文件名或包名必须传递到 javadoc 命令中。我们还将这些类称为在 javadoc 运行中包含的类,或包含的类

引用类 在带文档的类和接口的定义(实现)中显式引用的类和接口。引用的例子包括返回类型、参数类型、强制转换类型、已实现接口、导入类,等等。在文档注释(例如 @see 标记)中引用的类不算作引用类。当 Javadoc 运行时,它将 javadoc 引导类路径和类路径中所有的引用类加载到内存中(对于没有找到的引用类,Javadoc 将显示“类未找到”警告信息)。 Javadoc 可从类文件中获得足够的信息,以确定其存在性及其成员的全限定名字。

外部引用类 在 javadoc 运行期间没有生成其文档的引用类。也就是说,这些类对于该次 javadoc 运行是外部的。文档中名字到这些类的链接称为外部引用外部链接。例如,如果仅对 java.awt 包运行 javadoc,则 java.lang 中的任何类(如 Object)都是外部引用类。可使用 -link 选项链接外部引用类。 解析 Java 源文件中的声明和文档注释,并产生相应的 HTML 页(缺省),描述公有类、保护类、内部类、接口、构造函数、方法和域。


源文件

Javadoc 将根据四种不同的“源”文件生成输出: Java 语言源文件(.java)、包注释文件、概述注释文件和其他未处理文件。下面介绍了后三种类型。

包注释文件

每个包具有它自己的文档注释,保存在其自己的“源”文件中,Javadoc 将把它合并到生成的包概览页中。通常可在这个注释中包括适用于整个包的任何文档。

要创建包注释文件,必须将它命名为 package.html 并将它与 .java 文件一起放在源树中的包目录中。Javadoc 将自动在该位置查找该文件名。注意该文件名对于所有包都是相同的。

包注释文件的内容是一个大文档注释,用 HTML 编写,像所有其他注释一样,但有一个例外: 文档注释不应该包括注释分隔符 /***/ 或前导星号。在编写注释时,第一句应该是关于包的概览,并且在 和第一句之间不应该插入任何标题或其他文本。可包括 package 标记;与所有文档注释一样,除了 {@link} 之外的所有标记都应该位于描述之后。如果添加 @see 标记,则它必须是全限定名字。

当 Javadoc 运行时,它将自动查找该文件;如果找到,则 Javadoc 做下列事情:

  • 复制 标记之间的全部内容以进行处理。
  • 处理存在的任何包标记。
  • 在它生成的包概览页底部插入处理后的文本,例如 包概览。
  • 将包注释的第一句复制到包概览页和概述页(例如概述概览)的顶部。确定语句结尾用的规则相同确定类和成员描述第一个语句的相同规则确定。

概述注释文件

每个要为之建立文档的应用程序或包集可以有它自己的概述文档注释,保存在其自己的“源”文件中,Javadoc 将把它合并到生成的概述页中。在该注释中通常可包括适用于整个应用程序或包集的任何文档。

要创建概述注释文件,可将该文件命名为想要的任何名字(通常为 overview.html)并将它放置在任何地方(通常位于源树的最顶层中)。注意对于相同源文件集可有多个概述注释文件,以用于对不同包集多次运行 javadoc。例如,如果 java.applet 包的源文件包含在 C:/user/src/java/applet 目录中,则可创建概述注释文件 C:/user/src/overview.html

概述注释文件的内容是一个大文档注释,用 HTML 编写,与前面介绍的包注释文件类似。有关详细内容,参见描述。在编写注释时,要重新循环,第一句应该是关于应用程序或包集的概览,并且在 和第一句之间不要插入标题或任何其他文本。可包括 概述标记;与所有文档注释一样,除了 {@link} 之外的所有标记都就位于描述之后。如果添加 @see 标记,则它必须是全限定名字。

当运行 Javadoc 时,可用 -overview 选项指定概述注释文件。然后将以与包注释文件类似的方法处理该文件。

  • 复制 标记之间的全部内容以进行处理。
  • 处理存在任何 概述标记。
  • 将处理过后的文本插入到生成的概述页(例如 概述概览)的底部。
  • 将概述注释的第一句复制到概述概览页的顶部。

其他未处理文件

还可在源文件中包括想要 Javadoc 复制到目的目录中的任何其他文件。这通常包括图形文件、示例 Java 源文件(.java)和类文件(.class)以及其内容远超过常规 Java 源文件文档注释的独立 HTML 文件。

要包括未处理文件,请将它们放入一个叫作 doc-files 的目录中,它可以是任何包目录的子目录。每个包可以有使用一个这种子目录。例如,如果想要在 java.awt.Button 类文档中包含按钮图像 button.gif,则可将该文件放入 /home/user/src/java/awt/doc-files/ 目录中。所有到未处理文件的链接都必须是硬编码的,因为 Javadoc 不查看这些文件 -- 它只是将目录及其全部内容复制到目的地。例如,Button.java 文档注释中的链接可能类似如下:

    /**     * 该按钮类似如下:     *      */


生成的文件

缺省地,javadoc 使用标准 doclet 生成 HTML 格式文档。该 doclet 生成下列类型的文件(其中每个 HTML “页”相应于一个单独的文件)。注意 javadoc 生成具有二种名字的文件: 用类/接口命名的文件,和不用类/接口命名的文件(例如 package-summary.html)。后一组中的文件包括下划线(以防止与前一组中的文件名冲突)。

基本内容页

  • 为生成其文档的每个类或接口生成类或接口页classname.html)。
  • 为生成其文档的每个包生成包页package-summary.html)。Javadoc 将在其中包含源目录树中包目录中的 package.html 文件中提供的任何 HTML 文本。
  • 整个包集的概述页overview-summary.html)。它是生成的文档的首页。Javadoc 将在其中包含用 -overview 选项指定的文件中提供的任何 HTML 文本。(注意在有些情况下未生成概述页,详情参见 Javadoc 输出。)

交叉参考页

  • 整个包集的类层次页overview-tree.html)。要查看它,可以单击导航栏上的“概述”,然后单击“树”。
  • 整个包的类层次页package-tree.html)。要查看它,可转到特定包、类或接口页;单击“树”显示该包的层次。
  • 每个包的“用法”页package-use.html)和每个类和接口的单独页(class-use/classname.html)。该页描述了使用给定类、接口或包的任何部分的包、类、方法、构造函数和域。给定一个类或接口 A,其“用法”页包括 A 的子类、声明为 A 的域、返回 A 的方法以及具有 A 类型参数的方法和构造函数。要访问该页,可首先转到包、类或接口,然后在导航栏中单击“用法”链接。
  • 不鼓励使用的 API 页deprecated-list.html),列出所有不鼓励使用的名字。(通常由于改进的原因不推荐使用不鼓励使用的名字,并提供了替代的名字。不鼓励使用的 API 在未来的实现中可能删除。)
  • 序列化形式页serialized-form.html),提供关于可序列化或可外部化类的信息。每个这种类具有其序列化域和方法的描述。该信息对于重实现人员有用,使用 API 的开发人员一般不感兴趣。尽管在导航栏中没有其链接,但是可通过转到任何序列化类并单击类描述的“参见”部分中的“序列化形式”,获得该信息。
  • 所有类、接口、构造函数、域及方法名的 索引index-*.html),按字母次序排列。它为 Unicode 进行了国际化,并可生成为单个文件或为每个开始字符(例如英语中的 A - Z)生成一个单独的文件。

支持文件

  • 帮助页help-doc.html),它描述导航栏和上述各页。可使用 -helpfile 用自己的自定义帮助文件覆盖缺省帮助文件。
  • index.html 文件,创建用于显示的 HTML 框架。加载该文件可以用框架显示头版。该文件本身不包含文本内容。
  • 包含包、类和接口列表的几个框架文件*-frame.html),在显示 HTML 框架时使用。
  • 包列表 文件(package-list),通过 -link-linkoffline 选项使用。它是文本文件,而不是 HTML 文件,并且不能通过任何链接到达。
  • 样式表单 文件(stylesheet.css),它用于控制生成页面上的颜色数、字体、字体大小、字体样式和定位。

HTML 框架

Javadoc 将生成两个或三个 HTML 框架,如下图中所示。当将源文件(*.java)或单个包名作为参数传递到 javadoc 命令中时,它将仅在左边栏中创建一个框架(C) -- 类列表。当给 javadoc 传递两个或多个包名时,它将创建第三个框架(P)(列出所有包)以及一个概述页(Detail)。可通过在“无框架”链接上单击或在 overview-summary.html 进入,绕过框架。

如果您不熟悉 HTML 框架,则应该记住框架可具有焦点,以进行打印或滚动。要使框架具有焦点,可在其上单击。然后在许多浏览器中,箭头键和翻页键将滚动该框架,而打印菜单命令将打印它。

              ------------                  ------------              |C| Detail |                  |P| Detail |              | |        |                  | |        |              | |        |                  |-|        |              | |        |                  |C|        |              | |        |                  | |        |              | |        |                  | |        |              ------------                  ------------             javadoc *.java           javadoc java.lang java.awt

根据是否想要 HTML 框架,可加载下列两个文件之一作为开始页:

  • index.html(需要框架)
  • overview-summary.html(不需要框架)

生成的文件结构

生成的类和接口按与 Java 源文件和类文件相同的目录层次组织。该结构是每个子包一个目录。

例如,为 java.applet.Applet 类生成的文档将位于 java/applet/Applet.html。java.applet 包的文件结构也是一样,假定目的目录命名为 apidocs。如前所述,包含词“frame”的所有文件将出现在左上框架或左下框架中。所有其他 HTML 文件出现在右边框架中。

注意 - 目录用 粗体 显示。星号(*)表示当 javadoc 的参数为源文件(*.java)而不是包名时省略的文件和目录。另外当参数为源文件名时,将创建 package-list 但是它为空。文档文件目录将不出现在目的地中,除非它在源目录树中存在。

apidocs                             顶级目录   index.html                       建立 HTML 框架的初始页 * overview-summary.html            列出带第一句概览的所有包   overview-tree.html               列出所有包的类层次   deprecated-list.html             列出所有包中不鼓励使用的 API   serialized-form.html             列出所有包的序列化形式 * overview-frame.html              列出所有包,用于左上框架   allclasses-frame.html            列出所有包的全部类,用于左下框架中   help-doc.html                    列出如何组织这些页的用户帮助   index-all.html                   未用 -splitindex 选项创建的缺省索引   index-files                      用 -splitindex 选项创建的目录       index-.html          用 -splitindex 选项创建的索引文件   package-list                     列出包名,仅用于解析外部引用   stylesheet.css                   HTML 样式表单,用于定义字体、颜色和位置   java                             子包目录       applet                       子包目录            Applet.html             Applet 类页            AppletContext.html      AppletContext 接口页            AppletStub.html         AppletStub 接口页            AudioClip.html          AudioClip 接口页          * package-summary.html    列出带首句概览的类          * package-frame.html      列出该包中的类,用于左下框架          * package-tree.html       列出该包的类层次            package-use             列出使用该包的地方            doc-files               保存图像和示例文件的目录            class-use               保存 API 用法页的目录                Applet.html          Applet 类用法页                AppletContext.html     AppletContext 接口用法页                AppletStub.html        AppletStub 接口用法页                AudioClip.html         AudioClip 接口用法页

文档注释

注释源代码

可以在源代码中任何实体(类、接口、方法、构造函数或域)声明的前面包括文档注释。它们也称为 Javadoc 注释,并且文件必须用 HTML 编写,它们应使用 HTML 实体并可使用 HTML 标记。用户可使用自己浏览器支持的任何 HTML 版本;我们编写的标准 doclet 可在其它地方(文档注释外部)生成 HTML 3.2-兼容代码,其中包括级联样式表单和框架(由于使用框架集,我们在每个生成文件前面添加了“HTML 4.0”)。

例如,小于 (<) 和大于 (>) 符号的实体应该写为 <>。类似地,与符号(&)应该写为 &。在下面的示例中显示了粗体 HTML 标记

下面是文档注释:

/** * 这是 doc 注释。 * @see java.lang.Object */

文档注释由开始注释的字符 /** 和结束注释的字符 */ 之间的字符组成。文本分成一行或多行。当 javadoc 解析文档注释时,将去掉每行中的前导星号(*);初始星号(*)字符前面的空格和制表字符也丢弃。如果省略一行上的前导星号,则所有前导空格将被去除。(在某种程度上,可以忽略前导星号。由于省略前导星号导致问题的一种情况是用

 标记格式化多行的缩进时,例如样本代码所示。没有前导星号,生成文档中的缩进将丢失,因为前导空格被删除。) 

每个文档注释的首句应该为概览名,包含所声明实体的完整简要描述。该语句在第一个句号处结束后跟空格、制表或行结束符,或在第一个 标记 处结束。Javadoc 将首句复制到 HTML 页顶部的成员概览中。

文档注释只有在位于类、接口、构造函数、方法或域声明前面才能被识别。每个声明只有一个文档注释为 Javadoc 工具所识别。

当在文档注释中嵌入 HTML 标记时,不应使用 HTML 标题标记例如

,因为 Javadoc 创建完全结构化的文档,而这些标记将会干扰所生成文档的格式。

以字符 @ 开始的第一行文档注释将结束描述并开始标记段落部分。上例中的 @see 标记就是这种标记段落。

有关文档注释的规范,参见 James Gosling、Bill Joy 和 Guy Steele 所著书籍 Java 语言规范 中的第 18 章“文档注释”。


JAVADOC 标记

Javadoc 解析 Java 文档注释中嵌入的特殊标记。这些文档标记可帮助自动从源代码生成完整的格式化 API。标记用“at”符号(@)开头,并区分大小写 -- 必须按照正确大小写字母输入它们。标记必须从一行的开头开始(位于任何前导空格和可选星号之后),否则它将被视为普通文本。按规定应将相同名字的标记放在一起。例如,将所有 @see 标记放在一起。

有关我们将在未来版本中引入的标记的信息,参见 提议标记。

当前标记有:

标记 引入该标记的 JDK 版本
@author 1.0
@deprecated 1.0
@exception 1.0
{@link} 1.2
@param 1.0
@return 1.0
@see 1.0
@serial 1.2
@serialData 1.2
@serialField 1.2
@since 1.1
@throws 1.2
@version 1.0

@author name-text 当使用 -author 选项时,用指定的 name-text 在生成文档中添加“Author”项。文档注释可包含多个 @author 标记。可以对每个 @author 指定一个或多个名字。在前一种情况中,Javadoc 将在名字之间插入逗号( ,)和空格。在后一种情况下,将全部文本复制到生成文档中而不进行解析。如果想要用逗号以外的本地化名字分隔符,则应每行使用这个名字。

@deprecated deprecated-text 添加注释,指示不应再使用该 API(尽管它仍可用)。Javadoc 将 deprecated-text 移动到描述前面,用斜体显示,并在它前面添加粗体警告: “不鼓励使用”。

deprecated-text 的首句至少应该告诉用户什么时候开始不鼓励使用该 API 及使用什么替代它。Javadoc 仅将首句复制到概览部分和索引中。后面的语句还可解释为什么不鼓励使用它。还应包括一个指向替代 API 的 {@link} 标记(对于 Javadoc 1.2 或更新版本):

  • 对于 Javadoc 1.2,使用 {@link} 标记。这将在需要的地方创建内嵌链接。例如:
    /** * @deprecated  在 JDK 1.1 中,被 {@link #setBounds(int,int,int,int)} 取代。 */
  • 对于 Javadoc 1.1,标准格式是为每个 @deprecated 标记创建 @see 标记(它不能内嵌)。

有关不鼓励使用的信息,参见 @deprecated 标记。

@exception class-name description @exception 标记是 @throws 的同义标记。

{@link name label } 插入指向指定 name 的内嵌链接。该标记中 name 和 label 的语法与 @see 标记完全相同,如下所述,但是它产生内嵌链接而不是在“参见”部分中放置链接。该标记用花括号开始并用花括号结束,以使它区别于其他内嵌文本。如果在标签内需要使用“}”,则请使用 HTML 实体表示法 }

对于一个语句中所允许的 {@link} 标记数目没有限制。可以在文档注释的描述部分或任何标记(例如 @deprecated、@return 或 @param)的文本部分中使用该标记。

例如,下面是一个引用 getComponentAt(int, int) 方法的注释:

使用 {@link #getComponentAt(int, int) getComponentAt} 方法。

根据它,标准 doclet 将生成如下 HTML(假定它引用相同包中另一个类):

使用 getComponentAt 方法。

它在 web 页上显示为:

使用 getComponentAt 方法。

@param parameter-name description 给“参数”部分添加参数。描述可继续到下一行。

@return description 用 description 文本添加“返回”部分。该文本应描述值的返回类型和容许范围。

@see reference 添加“参见”标题,其中有指向 reference 的链接或文本项。文档注释可包含任意数目的 @see 标记,它们都分组在相同标题下。 @see 标记具有三种变体;下面的第三种形式是最常用的形式。
@see " string"   注意 - 该形式在 JDK 1.2 没有用。它不打印引用文本
为 string 添加文本项。不产生链接。 string 是通过该 URL 不可用的书籍或其他信息引用。Javadoc 通过查找第一个字符为双引号( ")的情形来区分它与前面的情况。例如:
     @see "Java 编程语言"

这将生成如下文本:

参见:
"Java 编程语言"
@see label
添加 URL#value 定义的链接。其中 URL#value 是相对 URL 或绝对 URL。Javadoc 通过查找第一个字符小于符号( <)区分它与其他情况。例如:
     @see Java 规范

这将生成如下链接:

参见:
Java Spec
@see package.class # member label
添加带可见文本 label 的链接,它指向 Java 语言中指定名字的文档。其中 label 是可选的;如果省略,则名字将作为可见文本出现,而且嵌入在 HTML 标记中。当想要缩写可见文本或不同于名字的可见文本时,可使用 label。

  • package.class#member 是 Java 语言中的任何有效名字 -- 包名、类名、接口名、构造函数名、方法名或域名 -- 除了用 hash 字符(#)取代成员名前面的点之外。如果该名字位于带文档的类中,则 Javadoc 将自动创建到它的链接。要创建到外部引用类的链接,可使用 -link 选项。使用另两种 @see 形式的任何一种引用不属于引用类的名字的文档。第一个参数将在 指定名字 中详细介绍。
  • label 是可选文本,它是链接的可见标签。label 可包含空格。如果省略 label,则将显示 package.class.member,并相对于当前类和包适当缩短。-- 参见 如何显示名字。
  • 空格是 package.class#member 和 label 之间的分界符。括号内的空格不表示标签的开始,因此在方法各参数之间可使用空格。

示例 - 在该示例中,Character 类中的 @see 标记引用 String 类中的 equals 方法。该标记包括两个参数: 名字“String#equals(Object)”和标签“equals”。.

 /**  * @see String#equals(Object) equals  */

标准 doclet 将产生类似如下的 HTML 文档:

参见:
equals

它在浏览器中看起来像如下内容,其中标签是可见链接文本:

参见:
equals

指定名字 - package.class#member 名可以是全限定的,例如 java.lang.String#toUpperCase(),也可以不是全限定的,例如 String#toUpperCase()#toUpperCase()。如果不是全限定的,则 Javadoc 使用正常 Java 编译器搜索次序查找它,在 @see 的搜索次序 中将进一步介绍。名字可以在括号内包含空格,例如在方法参数之间。

当然使用较短的“部分限定”名字的优点是键入更少,并且源代码中的混乱更少。下表显示的不同的名字形式,其中 Class 可以为类或接口,Type 可以为类、接口、数组或 基本数据类型,而 method 可以为方法或构造函数。

@see package.class#member 的典型形式
引用当前类的成员
@see #field
@see #method(Type, Type,...)
@see #method(Type argname, Type argname,...)

引用当前包或导入包中的其他类
@see Class#field
@see Class#method(Type, Type,...)
@see Class#method(Type argname, Type argname,...)
@see Class

引用其他包(全限定)
@see package.Class#field
@see package.Class#method(Type, Type,...)
@see package.Class#method(Type argname, Type argname,...)
@see package.Class
@see package

下述说明适用于上表:

  • 第一套形式(没有类和包)将导致 Javadoc 仅搜索当前类层次。它将查找当前类或接口、其父类或超接口、或其包含类或接口的成员(搜索步骤 1-3)。它不会搜索当前包的其余部分或其他包(搜索步骤 4-5)。
  • 如果任何方法或构造函数输入为不带括号的名字,例如 getValue,且如果没有具有相同名字的域,则 Javadoc 将正确创建到它的链接,但是将显示警告信息,提示添加括号和参数。如果该方法被重载,则 Javadoc 将链接到它搜索到的第一个未指定方法。
  • 对于所有形式,内部类必须指定为 outer.inner,而不是简单的 inner。
  • 如上所述,hash 字符(#)而不是点(.)用于分隔类和成员。这使 Javadoc 可正确解析,因为点还用于分隔类、内部类、包和子包。当 hash 字符(#)是第一个字符时,它是绝对不可少的。但是,在其他情况下,Javadoc 通常不严格,并允许在不产生歧义时使用点号,但是它将显示警告。

@see 的搜索次序 - Javadoc 将处理出现在源文件(.java)、包文件(package.html)或概述文件(overview.html)中的 @see 标记。在后两种文件中,必须完全限定用 @see 提供的名字。在源文件中,可指定全限定或部分限定的名字。

当 Javadoc 在 .java 中遇到不是全限定的 @see 标记时,它按照与 Java 编译器相同的次序搜索指定名字(Javadoc 将不检测名字空间二义性,因为它假定源代码不会有这些错误) 搜索次序在 Java 语言规范 第六章“名字”中正式定义,由“内部类规范”修改。Javadoc 在所有相关和导入类和包中搜索该名字。特别地,它按如下次序搜索:

  1. 当前类或接口
  2. 任何包含类和接口,先搜索最近的
  3. 任何父类和超接口,先搜索最近的
  4. 当前包
  5. 任何导入包、类和接口,按导入语句中的次序搜索

Javadoc 继续对它遇到的每个类重复步骤 1-3 进行搜索,直到找到匹配项。这就是说,当它搜索当前类及其包含类 E 之后,它在搜索 E 的包含类之前先搜索 E 的父类。 在步骤 4 和 5 中,Javadoc 不按任何指定的次序(该次序取决于特定编译器)搜索包中的类或接口。在步骤 5 中,Javadoc 将在 in java.lang 中查找,因为它是由所有程序自动导入的。

Javadoc 没有必要在子类中查找,也没有必要在其他包中查找,即使它们的文档在同一次运行中生成。例如,如果 @see 标记位于 java.awt.event.KeyEvent 类中并引用 java.awt 包中的名字,则 javadoc 将不查找该包,除非该类导入它。

如果显示名字 - 如果省略 label,则将显示 package.class.member。一般地,将相对于当前类和包适当缩短它。这里“缩短”是指仅显示必要的名字,使之尽可能短。例如:

方法包含 @see Tag @see 标记 显示为
String.toUpperCase() @see String#toLowerCase()
(引用相同类的成员)
toLowerCase()
(省略类名)
String.toUpperCase() @see Character#toLowerCase(char)
(引用其他类的成员)
Character.toLowerCase(char)
(包括类名)

@see 示例
右边的注释显示了当 @see 标记位于其他包(例如 java.applet.Applet)中时,如何显示名字。

                                           参见:@see java.lang.String                   //  String                          
      @see java.lang.String The String class  //   String 类                
      @see String                             //  String                          
      @see String#equals(Objetc)              //  String.equals(Object)           
      @see String#equals                      //  String.equals(java.lang.Object) 
      @see java.lang.Object#wait(long)        //  java.lang.Object.wait(long)     
      @see Character#MAX_RADIX                //  Character.MAX_RADIX             
      @see Java Spec  //  Java 规范           
      @see "The Java Programming Language"    //  "Java 编程语言"        
      

@since since-text
用 since-text 指定的内容给生成文档添加“Since”标题。该文本没有特殊内部结构。该标记表示该改变或功能自 since-text 所指定的软件版本之后就存在了。例如:
    @since JDK1.1

@serial field-description
用于缺省可序列化域的文档注释中。

可选的 field-description 增强了文档注释对域的描述能力。该组合描述必须解释该域的意义并列出可接受值。如需要,该描述可有多行。

应该对自 Serializable 类的最初版本之后添加的每个可序列化域添加 @since 标记。

要获得私有类的序列化形式,可使用 -private 选项。因而,要生成所有公共类和私有类的序列化形式,可用 -private 选项运行 javadoc。

有关如何使用这些标记的信息,以及相应示例,参见 Java 对象序列化规范 中第 1.6 节“建立类的可序列化域和数据的文档。

@serialField field-name field-type field-description
建立 Serializable 类的 serialPersistentFields 成员的 ObjectStreamField 组件的文档。应该对每个 ObjectStreamField 使用一个 @serialField 标记。

@serialData data-description
data-description 建立数据(尤其是 writeObject 方法所写入的可选数据和 Externalizable.writeExternal 方法写入的全部数据)序列和类型的文档,。

@serialData 标记可用于 writeObjectreadObjectwriteExternalreadExternal 方法的文档注释中。

@throws class-name description
@throws@exception 标记同义。用 class-name 和 description 文本给生成的文档添加“抛出”子标题。其中 class-name 是该方法可抛出的异常名。如果该类不是全限定的,则 Javadoc 使用 搜索次序 查找该类。

@version version-text
当使用 -version 选项时用 version-text 指定的内容给生成文档添加“版本”子标题。该文本没有特殊内部结构。文档注释最多只能包含一个 @version 标记。版本通常是指包含该类或成员的软件(例如 JDK)版本。


可使用标记的地方

下面介绍了在哪些地方可使用标记。注意这四个标记可用于所有文档注释中:@see@link@since@deprecated


概述文档标记

概述标记可出现在概述页的文档注释中(该文档通常位于叫作 overview.html 的源文件中)。像在任何其他文档注释中一样,这些标记必须位于描述后面。

注意 - {@link} 标记在 JDK 1.2 的概述文档中有一个 bug -- 文档正确显示,但没有链接。

概述标记
@see
{@link}
@since


包文档标记

包标记可出现在包的文档注释中(该文档位于叫作 package.html 的源文件中)。

包标记
@see
{@link}
@since
@deprecated


类和接口文档标记

下面是可出现在类或接口的文档注释中的标记。

类/接口标记
@see
{@link}
@since
@deprecated
@author
@version

类注释示例:

/** * 代表屏幕上窗口的类。 * 例如: * 
 *    Window win = new Window(parent); *    win.show(); * 
* * @author Sami Shaio * @version 1.6, 06/25/99 * @see java.awt.BaseWindow * @see java.awt.Button */class Window extends BaseWindow { ...}


域文档标记

下面是可出现在域文档注释中的标记。

域标记
@see
{@link}
@since
@deprecated
@serial
@serialField

域注释示例:

    /**     * 组件的 X 坐标。     *     * @see #getLocation()     */    int x = 1263732;


构造函数和方法文档标记

下面是可出现在构造函数或方法的文档注释中的标记。

方法/构造函数标记
@see
{@link}
@since
@deprecated
@param
@return
@throws (@exception)
@serialData

方法文档注释示例:

    /**     * 返回指定索引处的字符。索引     * 范围为 0length() - 1.     *     * @param     index  想要的字符的索引。     * @return    想要的字符。     * @exception StringIndexOutOfRangeException     *              如果索引不在范围 0     *              到 length()-1 中。     * @see       java.lang.Character#charValue()     */    public char charAt(int index) {       ...    }


命令行参数文件

为了缩短或简化 javadoc 命令,可指定一个或多个其中每行包含一个源文件名或包名的文件。在命令行中,采用 '@' 字符加上文件名的方法将它指定为文件列表。当 javadoc 遇到用字符‘@’开头的参数时,它将操作该文件中的名字,仿佛这些名字位于命令行上一样。

例如,可以在名为 packages 的文件中列出所有包名。该文件可能形如:

     com.mypackage1     com.mypackage2     com.mypackage3

然后可用如下命令运行 javadoc:

     C:> javadoc -d apidocs @packages


javadoc 工具使用 doclets 确定其输出。除非使用 -doclet 选项指定自定义 doclet ,否则 Javadoc 使用缺省的标准 doclet。Javadoc 提供一套命令行选项,可用于任何 doclet -- 这些选项将在下面的子标题 Javadoc 选项 中介绍。标准 doclet 提供了一套额外的命令行选项,它们将在下面的子标题 标准 Doclet 提供的选项 中介绍。所有选项名都不区分大小写,但是其参数可能区分大小写。

选项包括:

-1.1
-author
-bootclasspath
-bottom
-classpath
-d
-docencoding
-doclet
-docletpath
-doctitle
-encoding
-extdirs
-footer
-group
-header
-help
-helpfile
-J
-link
-linkoffline
-locale
-nodeprecated
-nodeprecatedlist
-nohelp
-noindex
-nonavbar
-notree
-overview
-package
-private
-protected
-public
-sourcepath
-splitindex
-stylesheetfile
-title
-use
-verbose
-version
-windowtitle

Javadoc 选项

-overview  i>path/filename 指定 javadoc 应该从 path/filename 所指定的“源”文件中获取概述文档,并将它放到概述页中( overview-summary.html)。其中 path/filename 是相对于 -sourcepath 的相对路径名。

尽管可对 filename 使用任何名字并将它放在 path 指定的任何地方,但是通常将它命令为 overview.html 并将它放入包含最顶级包目录的源目录树中。在该位置,建立包文档时不需要 path,因为 -sourcepath 将指向该文件。例如,如果 java.lang 包的源目录树是 /src/classes/java/lang/,则可以概述文件放到 /src/classes/overview.html。参见 实际示例。

有关 path/filename 指定文件的信息,参见 概述注释文件。

在一定情况下,将不产生概述页。有关详细信息,参见 HTML 框架。

-public 只显示公有类及成员。

-protected 只显示受保护的和公有的类及成员。这是缺省状态。

-package 只显示包、受保护的和公有的类及成员。

-private 显示所有类和成员。

-help 显示联机帮助,它将列出这些 javadoc 和 doclet 命令行选项。

-doclet class 指定启动用于生成文档的 doclet 的类文件。该 doclet 定义了输出的内容和格式。如果未使用 -doclet 选项,则 javadoc 使用标准 doclet 生成缺省 HTML 格式。该类必须包含 start(Root) 方法。该启动类的路径由 -docletpath 选项定义。

-docletpath classpathlist 指定 doclet 类文件的路径,该类文件用 -doclet 选项指定。如果 doclet 已位于搜索路径中,则没有必要使用该选项。

-1.1 生成具有用 Javadoc 1.1 生成的文档的外观和功能的文档。也就是说,页的背景为灰色,用图像做页眉,使用 bullet 列表而不是表格,具有单级目的目录结构,不包含继承 API,不使用 HTML 框架,并且不支持内部类。该选项还将索引分割成每个字母一个文件。如果想要这种外观,则该选项比 javadoc 1.1 优越之处在于修正了一些错误。

不是所有选项都能用于 -1.1 选项。为了查看哪些选项可用,可执行:

  C:> javadoc -1.1 -help

在该列表中显示的 -footer 选项在功能上与本页中其他地方介绍的 -bottom 选项相同。而 -title 选项在功能上与 -doctitle 相同。

-sourcepath sourcepathlist 当将包名传递到 javadoc 命令中时,指定查找源文件( .java)的搜索路径。注意只有当用 javadoc 命令指定包名时才能使用 sourcepath 选项 -- 它将不会定位传递到 javadoc 命令中的 .java 文件。如果省略 -sourcepath,则 javadoc 使用类路径查找源文件(参见 - classpath)。

将 sourcepathlist 设置成正在生成其文档的包的源树的根目录。例如,假定想要为叫作 com.mypackage 的包建立文档,其源文件位于:

C:/user/src/com/mypackage/*.java

在这种情况下,将把 sourcepath 指定为 C:/user/src,该目录包含 com/mypackage,然后提供包名 com.mypackage

javadoc -sourcepath C:/user/src com.mypackage

这是相当容易记忆的,注意如果将源路径和包名级联到一起,并将点号改为斜杠“/”,则最后将得到该包的完整路径:C:/user/src/com/mypackage.

-classpath classpathlist 指定 javadoc 将在其中查找 引用类 的路径 -- 引用类是指带文档的类加上它们引用的任何类。Javadoc 将搜索指定路径的所有子目录。 classpathlist 可以包含多个路径,它们用分号分隔。有关如何指定 classpathlist,请遵循 类路径 文档中的指令。

如果省略 -sourcepath,则 Javadoc 使用 -classpath 查找源文件和类文件(为了向后兼容性)。因而,如果想要在不同的路径中搜索源文件和类文件,则应使用 -sourcepath-classpath 两个选项。

例如,如果想要建立 com.mypackage 的文档,其类位于目录 C:/user/src/com/mypackage 中,并且该包依赖于 C:/user/lib 中的库,则将会指定:

  C:> javadoc -classpath /user/lib -sourcepath /user/src com.mypackage

与其他工具一样,如果不指定 -classpath,则 Javadoc 将使用 CLASSPATH 环境变量(如果它已设置)。如果二者都未设置,则 Javadoc 将从当前目录中搜索类。

有关 Javadoc 如何使用 -classpath 查找用户类及相关扩展类和自举类的深入介绍,参见 如何查找类。

-bootclasspath classpathlist 指定自举类所在路径。它们名义上是 Java 平台类。这个 bootclasspath 是 Javadoc 将用来查找源文件和类文件的搜索路径的一部分。有关详细信息,参见 如何查找类。在 classpathlist 中用分号(;)分隔目录。

-extdirs dirlist 指定扩展类所在的目录。它们是任何使用 Java 扩展机制的类。这个 extdirs 是 Javadoc 将用来查找源文件和在文件的搜索路径的一部分。有关详细信息,参见上面的 -classpath。在 dirlist 中用分号(;)分隔目录。

-verbose 在 javadoc 运行时提供更详细的信息。不使用 verbose 选项时,将显示加载源文件、生成文档(每个源文件一条信息)和排序的信息。verbose 选项导致打印额外的信息,指定解析每个 java 源文件的毫秒数。

-locale language_country_variant 指定 javadoc 在生成文档时使用的环境。该参数为环境名,如 java.util.Locale 文档中所述,例如 en_US(英语,美国)或 en_US_WIN(Windows 变量)。

指定环境将导致 javadoc 为各种信息(导航栏中的字符串、列表和表格的标题、帮助文件内容、stylesheet.css 中的注释,等等)选择使用该环境的资源文件。它还指定按字母次序排序列表的排序次序,以及用于确定第一句结束的语句分隔符。它不决定带文档类的源文件中指定的文档注释文本的环境。

-encoding name 指定源文件编码名,例如 EUCJIS/SJIS。如果未指定该选项,则使用平台缺省转换器。

-J flagflag 直接传递给运行 javadoc 的运行时系统 java。注意在 Jflag 之间不能有空格。例如,如果需要确保系统分配 32 兆内存用于处理生成文档,则应按如下使用该标志:

C:> javadoc -J-Xmx32m -J-Xms32m com.mypackage

标准 Doclet 提供的选项

-d directory 指定 javadoc 保存生成的 HTML 文件的目的目录。("d" 表示 "destination.") 省略该选项将导致把文件保存到当前目录中。其中 directory 可以是绝对路径或相对当前工作目录的相对路径。例如,下列代码将生成 com.mypackage 包的文档并将结果保存在 C:/user/doc/ 目录中:
  C:> javadoc -d /user/doc com.mypackage

-use 对每个带文档类和包包括一个“用法”页。该页描述使用给定类或包的任何 API 的包、类、方法、构造函数和域。对于给定类 C,使用类 C 的任何东西将包括 C 的子类、声明为 C 的域、返回 C 的方法以及具有 C 类型参数的方法和构造函数。

例如,下面来看一下出现在 String 的“用法”页上的内容。java.awt.Font 类中的 getName() 方法返回类型 String。因而,getName() 使用 String,从而可在 String 的“用法”页上找到该方法。

注意它只产生使用 API 的文档,而不包括实现。如果方法在其实现中使用 String 但不接受字符串参数也不返回字符串,则将不认为它使用 String

可通过先转到类或包,然后在导航栏上单击“用法”链接,访问生成的“用法”页。

-version 在生成文档中包括 @version 文本。缺省地将省略该文本。

-author 在生成文档中包括 @author 文本。

-splitindex 将索引文件按字母分割成多个文件,每个字母一个文件,再加上一个包含所有以非字母字符开头的索引项的文件。

-windowtitle title 指定放入 HTML 标记中的标题。它将出现在窗口标题栏中和为该页创建的任何浏览器书签(最喜欢的地方)中。该标题不应该包含任何 HTML 标记,因为浏览器将不能正确解释它们。在 <em>title</em> 中的任何内部引号必须转义。如果省略 -windowtitle,则 Javadoc 对该选项使用 -doctitle 的值。 <p> </p> <strong>-doctitle</strong> <em>title</em> 指定放置在靠近概述概览文件顶部的标题。该标题将作为一级标题,居中地直接放在导航栏下面。 <em>title</em> 可包含 html 标记和空格,但是如果这样,则必须用引号将它括起。在 <em>title</em> 中的任何内部引号必须转义。 <p> </p> <strong>-title</strong> <em>title</em> <strong>该选项不再存在</strong>。它仅存在于 Javadoc 1.2 的 Beta 版中。它已重命名为 <strong>-doctitle</strong>。重命名该选项是为了更清楚地表示它定义文档标题而不是窗口标题。 <p> </p> <strong>-header</strong> <em>header</em> 指定放置在每个输出文件顶部的页眉文本。该页眉将放在上部导航栏的右边。 <em>header</em> 可包含 HTML 标记和空格,但是如果这样则必须用引号将它括起。在 <em>header</em> 中的任何内部引号必须转义。 <p> </p> <strong>-footer</strong> <em>footer</em> 指定放置在每个输出文件底部的脚注文本。脚本将放置在下部导航栏的右边。 <em>footer</em> 可包含 html 标记和空格,但是如果这样,则必须用引号将它括起。在 <em>footer</em> 中的任何内部引号必须转义。 <p> </p> <strong>-bottom</strong> <em>text</em> 指定放置在每个输出文件底部的文本。该文本将放置在页底,位于下部导航栏的下面。其中 text 可包含 HTML 标记和空格,但是如果这样,则必须用引号将它括起。在 text 中的任何内部引号必须转义。 <p> </p> <strong>-link</strong> <em>docURL</em> <br>创建链接指向已用 javadoc-生成的 外部引用类 的文档。参数 <em>docURL</em>是想要链接到的 javadoc-生成外部文档的 URL。该位置可以是相对的或绝对的 URL。 <p>也就是说,该选项使得可链接到代码所引用但是当前 javadoc 运行<em>没有</em>产生其文档的类。为保证这些链接指向有效页,必须知道那些 HTML 页所在位置,并用 <em>docURL</em> 指定其位置。例如,这将允许第三方文档链接到 <code>http://java.sun.com</code> 上的 <code>java.*</code> 文档。另一种用途是用于包集之间的 交叉-链接: 对一个包集执行 javadoc,然后再对另一个包集运行 javadoc,在两个集合之间创建双向链接。另一个用途是作为到 更新文档 的“hack”: 在整个包集上执行 javadoc,然后对更改过的包的较小集再次运行 javadoc,从而将更新文件插回到原集中。(这样做可节省时间,但是需要小心使用 -- 如果从子集中添加或删除 API,则将会丢失或破坏索引中的链接。) </p> <p>按如下使用 <code>-link</code> 选项: </p> <ul type="disc"> <li>省略 <code>-link</code> 选项,使 javadoc 只创建指向当前运行中正在生成的文档中 API 的链接。(不使用 <code>-link</code> 选项,Javadoc 将不创建外部引用文档的链接,因为它不知道该文件是否存在(或其位置)。) </li> <li>包括 <code>-link</code> 选项,使用 javadoc 还创建指向位于 <em>docURL</em> 的 外部引用类 文档的链接。 </li> </ul> <p>注意如果 URL 位于 WWW 上,则 javadoc 在生成文档时必须具有 web 连接以访问 <code>package-list</code>。如果不能访问,则可使用 <code>-linkoffline</code> 代替。</p> <p><strong>Package List</strong> - <code>-link</code> 选项需要一个名为 <code>package-list</code> 的文件(它由 Javadoc 生成)位于用 <code>-link</code> 指定的 URL 中。<code>package-list</code> 文件是简单的文本文件,列出在该位置有文档的包名。在下面将介绍 Javadoc 如何使用包列表。</p> <p>例如,Java 平台 1.2 API 的包列表位于 <code>http://java.sun.com/products/jdk/1.2/docs/api/package-list</code>。并且以如下内容开始:</p> <pre> java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.event java.awt.font 等等。</pre> <p>当 javadoc 不带 <code>-link</code> 选项运行时,在它生成文档时,当它遇到属于 外部引用类 的名字时,它将打印不带链接的名字。但是,如使用 <code>-link</code> 选项,则 Javadoc 将在指定 <em>docURL</em> 的 <code>package-list</code> 文件中搜索该包名。如果它查找到该包名,则将 URL 添加到该名字前面。(如果 URL 是相对路径并且 -d 目的目录选项是相对路径,则 Javadoc 将目的目录的相对路径添加到 URL 中,以使链接在目的目录中可用。) </p> <p>为了不产生无效链接,外部引用的所有文档都必须在指定 URL 存在。Javadoc 将不会检查这些页的存在 -- 它只检查 package-list 的存在。</p> <p>如果 javadoc 的参数是源文件而不是包,则将创建 package-list, 文件但是为空。</p> <p><strong>示例</strong> - 例如,下面命令导致 Javadoc 在给定 URL 查找 <code>package-list</code> 文件,读取该文件中的包名,然后在添加指向那些外部包中 API 的链接时使用给定 URL:</p> <pre> C:> <strong>javadoc -link http://java.sun.com/products/jdk/1.2/docs/api com.mypackage</strong></pre> <p><strong>多链接</strong> - 可提供多个 <code>-link</code> 选项,链接到任意多个外部生成文档。 <em><strong>已知 Bug</strong> - Javadoc 1.2 有一个已知 bug,它使得不能提供多个 </em>-link <em>命令。在未来版本中将会修正它</em>。</p> <p>为每个要链接的外部文档指定不同的链接选项: </p> <p>牋<code> C:> <strong>javadoc -link</strong> </code><em>docURL1</em><code> <strong>-link</strong> </code><em>docURL2</em><code> ... <strong>-link</strong> </code><em>docURLn</em><code> <strong>com.mypackage</strong></code> </p> <p>其中 <em>docURL1</em>、 <em>docURL2</em>、 ... <em>docURLn</em> 分别指向外部文档的根目录,各自包含一个 <code>package-list</code> 文件。</p> <p><strong>交叉链接</strong> - 注意在交叉链接两个或多个还没有生成的文档时,可能需要“启动”。也就是说,如果任何文档的 <code>package-list</code> 都不存在,则在对第一个文档运行 javadoc 时,第二个文档的包列表文件也将不存在。因而,要创建外部链接,必须在生成第二个文档之后重新生成第一个文档。</p> <p>在这种情况中,第一次生成文档的目的是创建其包列表(如果能确定包名,也可手工创建包列表)。然后生成带外部链接的第二个文档。Javadoc 在需要的外部 <code>package-list</code> 文件不存在时打印警告信息。</p> <p><strong>更新文档</strong> - <code>-link</code> 选项的第三个用途是如果项目有数十个或数百个包,并且已对整个目录树运行了 javadoc,现在,在单独的运行中,想要快速地进行一些小的修改,并对源目录树的一小部分重新运行 javadoc,这时它是非常有用的。这有些类似于 hack,因为它只在改变文档注释时才能正常工作,而修改签名则不行。如果想要在源代码中添加、删除或改变任何签名,则可能在索引、包目录树、继承成员列表、用法页或其他位置出现无效链接。</p> <p>首先,为这次小运行新建一个目的目录,并将 <code>-link</code> 和 <code>-d</code> 设置成相同的相对路径: 如果原文档位于目录 <code>html</code> 中,则为:</p> <pre> C:> <strong>javadoc -d update -linkoffline . html com.mypackage</strong></pre> <p>当 javadoc 完成后,复制 <code>update</code> 中生成的文件并覆盖 <code>html</code> 中的原文件。</p> <p>背景知识: 一般地,在 javadoc 运行时,它有可能为其生成页中出现的名字产生链接: 例如在签名、<code>@see</code> 标记、<code>{@link}</code> 标记、概览、层次、概述和索引中。有些链接将转到当前运行中生成的页,而其他链接有可能转到不是在当前运行中生成的页。</p> <p> </p> <strong>-linkoffline</strong> <em>docURL</em> <em>packagelistURL</em> <br>该选项为外部引用类名字创建指向文档的链接,其中: <ul type="disc"> <li><strong><em>docURL</em></strong> 是想要链接到的 javadoc 生成的外部文档的根目录的 URL。该位置可以是相对的或绝对的 URL。 </li> <li><strong><em>packagelistURL</em></strong> 是包含文档的包列表文件所在目录的 URL。(如果需要,可手工创建该文件。) </li> </ul> <p>该选项是 <code>-link</code> 的一种变体。如果在运行 javadoc 时包列表文件在 <em>docURL</em> 位置不存在,则可使用 <code>-linkoffline</code>。如果知道文档链接到的包名和文档所在位置,则可以在该包列表文件实际存在于该位置之前,生成带外部链接的文档。这使得可用自己的包列表副本,生成具有适当链接的文档。</p> <p>当需要生成链接指向包名已知但尚未发布的新外部文档(但是还没有建立)时,这时非常有用的。这使得两个公司可同时发布他们的文档。它还允许生成链接到没有包列表文件的外部文档(或许它是用 Javadoc 1.0、1.1 或最高 1.2 Beta3 生成)的文档。</p> <p>注意该选项在运行 javadoc 时不需要访问文档 URL。因而,即使该 URL 位于 WWW 上,在生成文档时也不需要 web 链接。</p> <p>如下所示,要使用该选项,请指定 <em>docURL1</em>(javadoc 生成的外部引用类的文档的位置)和 <em>packagelistURL1</em>(其包列表文件的位置)。如果它们具有相同位置,则可仅使用 <code>-link</code> 选项。对每个想要引用的生成文档,需要包括 <code>-linkoffline</code> 一次: </p> <p><code>C:></code> <code><strong>javadoc -linkoffline</strong> </code><em>docURL1</em><code> </code><em>packagelistURL1</em><code> <strong>-linkoffline</strong> </code><em>docURL2</em><code> </code><em>packagelistURL2</em> </p> <p>例如,下面的命令使用第一个参数给定的 URL 添加链接,并在第二个参数给定的路径中查找 <code>package-list</code> 文件。</p> <pre></pre> <p> </p> <strong>-group</strong> groupheading packagepattern <code>:</code> packagepattern <code>:</code>... 将概述页上的包分成指定的组,每组一个表格。可以用不同的 <code>-group</code> 选项指定每个组。各组按命令行中指定的次序出现在页面上,组内的包按字母排序。对于给定 <code>-group</code> 选项,与 packagepattern 表达式列表匹配的包出现在标题为 groupheading 的表格中。 <ul type="disc"> <li><strong>groupheading</strong> 可以为任何文本,并可包括空格。该文本将放置在该组的表格标题中。 </li> <li><strong>packagepattern</strong> 可以为任何包名,也可以为任何包名的开头后跟星号(<code>*</code>)。星号是通配符,表示“匹配任何字符”。它是唯一允许的通配符。一组中可包包括多个模式,并用分号(<code>;</code>)分隔它们。 </li> </ul> <blockquote> <strong> </strong> <p><strong>注意: 如果在模式或模式列表中使用星号,则模式 列表必须位于引号内部,例如 <code>"java.lang*:java.util"</code></strong></p> <strong> </strong> </blockquote> <p>如果没有提供任何 <code>-group</code> 选项,则所有包都将放在一组中,并且其标题为“包”。如果所有组未包括全部带文档包,则剩余的任何包将出现在一个单独的组中,且其标题为“其他包”。</p> <p>例如,下面的选项将四个带文档包分成“核心包”、“扩展包”和“其他包”。注意后面的“点”号不出现在 "java.lang*" 中 -- 包括点号,例如“java.lang.*”将忽略 java.lang 包。</p> <pre> C:> <strong>javadoc -group "核心包" "java.lang*:java.util" -group "扩展包" "javax.*" java.lang java.lang.reflect java.util javax.servlet java.new</strong></pre> <p>结果分组为: </p> <blockquote> <dl> <dt> <strong>核心包</strong> </dt> <dd> <code>java.lang</code> </dd> <dd> <code>java.lang.reflect</code> </dd> <dd> <code>java.util</code> </dd> <dt> <strong>扩展包</strong> </dt> <dd> <code>javax.servlet</code> </dd> <dt> <strong>其他包</strong> </dt> <dd> <code>java.new</code> </dd> </dl> </blockquote> <p> </p> <strong>-nodeprecated</strong> 防止在文档中生成任何不鼓励使用的 API。它执行 -nodeprecatedlist 所做的事情,并且它不在文档其余部分生成任何不鼓励使用的 API。当编写代码并不想被不鼓励使用的代码分心时,这是非常有用的。 <p> </p> <strong>-nodeprecatedlist</strong> 防止在生成文件中包含不鼓励使用的 API 列表(deprecated-list.html)并防止在导航栏中包含该页的链接。(但是,javadoc 继续在文档其余部分生成不鼓励使用的 API。) 如果源代码未包含不鼓励使用的 API,并且想要导航栏更干净,则它是非常有用的。 <p> </p> <strong>-notree </strong>在生成文档中忽略类/接口层次。缺省地,将产生该层次。 <p> </p> <strong>-noindex </strong>在生成文档中忽略索引。缺省地,将产生索引。 <p> </p> <strong>-nohelp</strong> 在输出的每页顶部和底部的导航栏中忽略“帮助”链接。 <p> </p> <strong>-nonavbar</strong> 防止产生导航栏、页眉和脚注,否则它们将出现在生成页的顶部和底部。它对“bottom”选项没有影响。当只对内容感兴趣并且没有必要导航时,例如仅将文件转换成 PostScript 或 PDF 以进行打印, <code>-nonavbar</code> 选项是非常有用的。 <p> </p> <strong>-helpfile</strong> <em>path/filename</em> 指定顶部和底部导航栏中“帮助”链接所链接到的替代帮助文件 <em>path/filename</em> 的路径。不使用该选项时,Javadoc 自动创建帮助文件 <code>help-doc.html</code>,它在 Javadoc 中硬编码。该选项使得可覆盖这种缺省情况。其中 <em>filename</em> 可以是任何名字,不局限于 <code>help-doc.html</code> -- Javadoc 将相应调整导航栏中的链接。例如: <pre> C:> <strong>javadoc -helpfile C:/user/myhelp.html java.awt</strong></pre> <p> </p> <strong>-stylesheetfile</strong> <em>path/filename</em> 指定替代 HTML 样式表单文件的路径。不使用该选项时,Javadoc 将自动创建样式表单文件 <code>stylesheet.css</code>,它在 Javadoc 中硬编码。该选项使得可覆盖这种缺省情况。其中 <em>filename</em> 可以是任何名字,不局限于 <code>stylesheet.css</code>。例如: <pre> C:> <strong>javadoc -stylesheetfile C:/user/mystylesheet.css com.mypackage</strong></pre> <p> </p> <strong>-docencoding</strong> <em>name</em> 指定输出 HTML 文件的编码方式。 </blockquote> <p><br> </p> <h2>简单示例</h2> <blockquote> <p>可以对整个包或单个类运行 javadoc。每个包名有一个相应的目录名。在下面的示例中,源文件位于 <code>C:/home/src/java/awt/*java</code>。目的目录是 <code>C:/home/html</code>。 </p> <h3>建立包的文档</h3> <p>要建立包的文档,该包的源文件(<code>*.java</code>)必须位于一个与该包名字相同的目录中。如果包名由几个标识符组成(用点号分隔),则每个标识符代表一个不同的目录。因而,所有 <code>java.awt</code> 类必须位于名为 <code>java/awt/</code> 的目录中。可用如下两种方式之一运行 javadoc -- 通过改变目录(用 <code>cd</code>)或使用 <code>sourcepath</code> 选项。不能使用通配符指定多个包。 </p> <ul> <li><strong>情况 1- 换到包目录</strong> - 换到全限定包的父目录。然后运行 run javadoc,并提供想要建立其文档的一个或多个包的名字: <pre> C:> <strong>cd C:/home/src/</strong> C:> <strong>javadoc -d C:/home/html java.awt java.awt.event</strong></pre> </li> <li><strong>情况 2 - 从任何目录</strong> - 在这种情况下,当前目录是什么没有关系。运行 javadoc 时用 <code>sourcepath</code> 提供全限定包的父目录,并提供想要建立其文档的一个或多个包的名字: <pre> C:> <strong>javadoc -d C:/home/html -sourcepath C:/home/src java.awt java.awt.event</strong></pre> </li> </ul> <p>这两种情况都将产生包 <code>java.awt</code> 和 <code>java.awt.event</code> 中公共和保护类和接口的 HTML 格式文档,并将 HTML 文件保存在指定目的目录(<code>C:/home/html</code>)中。因为要生成两个或多个包,所以文档具有三个框架 -- 包列表、类列表和主页。 </p> <h3>建立类的文档</h3> <p>要建立一个或多个源文件(<code>.java</code>)的文档,这些文件不必位于特定目录中。可以用如下两种方式之一运行 javadoc -- 通过改变目录(用 <code>cd</code>)或完全指定 <code>.java</code> 文件的路径。选项 <code>-sourcepath</code> 在建立源文件的文档时没有作用。可使用命令行通配符,例如星号(*),指定多个类。 </p> <ul> <li><strong>情况 1 - 换到源目录</strong> - 换到保存 <code>.java</code> 文件的目录。然后运行 javadoc,并提供想要建立其文档的一个或多个源文件名。 <pre> C:> <strong>cd C:/home/src/java/awt</strong> C:> <strong>javadoc -d C:/home/html Button.java Canvas.java Graphics*.java</strong></pre> <p>该示例产生类 <code>Button</code>、<code>Canvas</code> 和以 <code>Graphics</code> 开头的类的 HTML 格式文档。因为是源文件而不是包名作为参数传递给 javadoc,所以文档具有两个框架 -- 类列表和主页。</p> </li> <li><strong>情况 2 - 改变到包的根目录</strong> - 当要为相同根目录下不同子包中的单个源文件建立文档时,这是非常有用的。改变到包的根目录,并提供源文件相对于其根的路径。 <pre> C:> <strong>cd /home/src/</strong> C:> <strong>javadoc -d /home/html java/awt/Button.java java/applet/Applet.java</strong></pre> <p>该示例产生类 <code>Button</code> 和 <code>Applet</code> 的 HTML 格式文档。</p> </li> <li><strong>情况 3 - 从任何目录</strong> - 在这种情况下,当前目录是什么没有关系。运行 javadoc,并提供想要建立其文档的 <code>.java</code> 文件的绝对路径(或相对于当前目录的相对路径)。 <pre> C:> <strong>javadoc -d C:/home/html C:/home/src/java/awt/Button.java C:/home/src/java/awt/Graphics*.java</strong></pre> <p>该示例产生类 <code>Button</code> 和以 <code>Graphics</code> 开头的类的 HTML 格式文档。</p> </li> </ul> <p></p> <h3>建立包和类的文档</h3> <p>可同时建立整个包和单个类的文档。下面是一个混合前两个示例的示例。可使用 <code>-sourcepath</code> 指定包的路径但不作为单个类的路径。</p> <pre> C:> <strong>javadoc -d C:/home/html -sourcepath C:/home/src java.awt C:/home/src/java/applet/Applet.java</strong></pre> <p>该示例生成包 <code>java.awt</code> 和类 <code>Applet</code> 的 HTML 格式文档(Javadoc 从 <code>Applet.java</code> 源文件中的包声明(如果有)中确定 <code>Applet</code> 的包名)。 </p> </blockquote> <p><br> </p> <h2>实际示例</h2> <blockquote> <p>Javadoc 有许多有用的选项,有些相对其他更为常用。下面是实际中我们用来在 Java 平台 API 上运行 javadoc 的命令,它使用了 makefile 变量(除了未列出所有要建文档的包之外)。</p> <pre>javadoc -sourcepath /jdk/src/share/classes / /* 源文件路径 */ -d /jdk/build/api / /* 目的目录 */ -use / /* 添加“用法”文件 */ -splitIndex / /* 分割索引 A-Z */ -windowtitle $(WINDOWTITLE) / /* 添加窗口标题 */ -doctitle $(DOCTITLE) / /* 添加文档标题 */ -header $(HEADER) / /* 添加运行页眉文本 */ -bottom $(BOTTOM) / /* 添加底部文本 */ -group $(GROUPCORE) / /* 概述页的核心标题 */ -group $(GROUPEXT) / /* 概述页的扩展标题 */ -overview overview-core.html / /* 概述文本 */ -J-Xmx180m / /* 180MB 内存 */ java.lang java.lang.reflect / /* 要建立其文档的包 */ java.util java.io java.net / java.appletWINDOWTITLE = 'Java 平台 1.2 最终 API 规范'DOCTITLE = 'Java<sup><font size="-2">TM</font></sup> Platform 1.2 Final API Specification'HEADER = '<b>Java Platform 1.2</b><br><font size="-1">Final</font>'BOTTOM = '<font size="-1"><a href="http://java.sun.com/cgi-bin/bugreport.cgi"> 提交 bug 或功能 </a><br><br>Java 是 Sun Microsystems , Inc 在美国和其他国家 的商标或注册商标。<br>Copyright 1993-1998 Sun Microsystems, Inc. 901 San Antonio Road,<br>Palo Alto, California, 94303, U.S.A. 保留所有权利。</font>'GROUPCORE = '"核心包" "java.*:com.sun.java.*:org.omg.*"GROUPEXT = '"扩展包" "javax.*"'</pre> <p>如果省略 <code>-windowtitle</code> 选项,则 javadoc 将文档标题复制到窗口标题。<code>-windowtitle</code> 选项是没有必要的,除非文档标题包含 HTML 标记。</p> <p>如果像这里所做的一样省略 <code>-footer</code> 选项,则 javadoc 将页眉文本复制到脚注文本。</p> <p>其他重要的选项是 <code>-classpath</code> 和 <code>-link</code>。</p> </blockquote> <p><br> </p> <h2>环境</h2> <blockquote> <p></p> <code><strong>CLASSPATH</strong></code> 提供 javadoc 用于查找用户类文件路径的环境变量。该环境变量将被 <code>-classpath</code> 选项覆盖。用分号分隔目录,例如: <pre> </pre> .;C:/classes;C:/home/java/classes </blockquote> <p><br> </p> <h2>另请参阅</h2> <blockquote> <ul> <li>javac </li> <li>java </li> <li>jdb </li> <li>javah </li> <li>javap </li> <li>Javadoc 主页 </li> <li>如何为 Javadoc 编写文档注释 </li> </ul> </blockquote>  </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1290189421890576384"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(javadoc - Java API 文档生成器详解 转贴)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1946709539894128640.htm" title="MyBatis之动态SQL编写指南" target="_blank">MyBatis之动态SQL编写指南</a> <span class="text-muted">AA-代码批发V哥</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>MyBatis之动态SQL编写指南一、动态SQL的核心价值传统JDBC的SQL拼接问题MyBatis动态SQL的优势二、核心动态SQL标签详解2.1`if`标签:条件判断基本用法`test`表达式规则2.2`where`与`trim`标签:条件拼接优化2.2.1`where`标签2.2.2`trim`标签:自定义拼接规则2.3`choose`、`when`、`otherwise`标签:多条件分支2</div> </li> <li><a href="/article/1946708747204227072.htm" title="微信小程序官方组件展示之视图容器page-container源码" target="_blank">微信小程序官方组件展示之视图容器page-container源码</a> <span class="text-muted">MLC061</span> <div>以下将展示微信小程序之视图容器page-container源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:页面容器。小程序如果在页面内进行复杂的界面设计(如在页面内弹出半屏的弹窗、在页面内加载一个全屏的子页面等),用户进行返回操作会直接离开当前页面,不符合用户预期,预期应为关闭当前弹出的组件。为此提供“假页”容器组件,效果类似于pop</div> </li> <li><a href="/article/1946707145944788992.htm" title="排序算法—插入排序(插入、希尔)(动图演示)" target="_blank">排序算法—插入排序(插入、希尔)(动图演示)</a> <span class="text-muted">每天都要进步1</span> <a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>目录十大排序算法分类插入排序算法步骤:动图演示:性能分析:代码实现(Java):希尔排序算法步骤:动图演示:性能分析:代码实现(Java):十大排序算法分类本篇分享十大排序算法中的需要进行交换操作的插入排序与希尔排序,其余算法也有介绍噢(努力赶进度中,后续会添加上)插入排序工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优</div> </li> <li><a href="/article/1946705759823785984.htm" title="Python PyV8: 在Python中运行JavaScript的利器" target="_blank">Python PyV8: 在Python中运行JavaScript的利器</a> <span class="text-muted">莱财一哥</span> <div>本文还有配套的精品资源,点击获取简介:PythonPyV8是一个在Python环境中执行JavaScript代码的库,基于Google的V8JavaScript引擎,实现Python与JavaScript之间的互操作性。本文将详细讨论PyV8的安装方法,包括通过pip安装和自行编译安装特定版本的步骤,以及如何在Python程序中使用PyV8执行JavaScript代码。1.PythonPyV8库介</div> </li> <li><a href="/article/1946703492290768896.htm" title="Java基础入门(传智)暑期预习笔记(一)7.18" target="_blank">Java基础入门(传智)暑期预习笔记(一)7.18</a> <span class="text-muted">wssgakki</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Java的基本语法【修饰符】class类名{程序代码}publicclassHelloword{publicstaticvoidmain(String[]args){System.out.printIn(”你好呀");}注意大小写、排版问题{左大括号里面的第一行代码要有缩进ctrl+shift+F键快速格式化代码一个连续的字符串不能分开在两行中书写即同一个双引号里面的内容不能分两行写。Java中的</div> </li> <li><a href="/article/1946700469141303296.htm" title="html5这什么意思,html5是什么意思?html5和html的区别介绍" target="_blank">html5这什么意思,html5是什么意思?html5和html的区别介绍</a> <span class="text-muted">wiles super</span> <a class="tag" taget="_blank" href="/search/html5%E8%BF%99%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D/1.htm">html5这什么意思</a> <div>一、HTML5是什么?HTML5是HyperTextMarkupLanguage5的缩写,HTML5是超文本标记语言的最新版本,也就是描述网页的代码,html5实际上是三种代码形式,首先是HTML提供结构,其次是层叠样式表(CSS)负责网站的样式和布局,最后是JavaScript是给网站添加动态功能。二、html5和html的区别1、定义上区别HTML5是应用超文本标记语言(HTML)的第五次修改</div> </li> <li><a href="/article/1946700090643116032.htm" title="curl请求一直等待但是postman访问正常的问题处理" target="_blank">curl请求一直等待但是postman访问正常的问题处理</a> <span class="text-muted">幻灭行度</span> <a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8%E9%97%AE%E9%A2%98/1.htm">异常问题</a><a class="tag" taget="_blank" href="/search/curl/1.htm">curl</a> <div>问题说明:研发开发的接口,使用postman工具调用时正常响应。但是使用curl时会一直等待接口响应。curl命令如下:curl-XPOST"http://localhost:8000/api/apiTest"\-H"xRequestId:5e4787a69959450f8d3f537ab1f7c149"\-H"xTimestamp:1752562369002"\-H"nodeId:9111010</div> </li> <li><a href="/article/1946699586903011328.htm" title="10、程序员友好的Java语义模块化定义" target="_blank">10、程序员友好的Java语义模块化定义</a> <span class="text-muted">time3</span> <a class="tag" taget="_blank" href="/search/Java%E8%AF%AD%E4%B9%89/1.htm">Java语义</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%9D%97%E5%8C%96%E5%AE%9A%E4%B9%89/1.htm">模块化定义</a><a class="tag" taget="_blank" href="/search/%E6%8A%BD%E8%B1%A1%E8%AF%AD%E6%B3%95%E6%A0%91/1.htm">抽象语法树</a> <div>程序员友好的Java语义模块化定义1引言Java作为一种广泛应用的编程语言,其语义的准确性和一致性对于开发者至关重要。为了更好地理解Java的语义,并确保其在实际应用中的可靠性,我们需要一种模块化且易于理解的方式来定义Java语义。本文将探讨如何以一种对程序员友好的方式进行Java语义的模块化定义,重点在于Java顺序命令核心的语义,涵盖Java方法体中的语句和表达式。2Java的抽象语法表示Ja</div> </li> <li><a href="/article/1946699208933306368.htm" title="Java基础一键通" target="_blank">Java基础一键通</a> <span class="text-muted">冠位巴萨辛山の翁</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>以下代码均使用IntelliJIDEA2024.1下运行,代码来源为学习java过程中所写代码。交流学习使用。1-Java入门1.1HellopublicclassHello{/***主函数执行程序的入口点*此函数没有接收任何参数,也没有返回值*它首先打印多次"Hello",然后调用getCode()方法并打印其返回值*@paramargs命令行参数,本程序中未使用*/publicstaticvo</div> </li> <li><a href="/article/1946698830154100736.htm" title="HTML和HTML5的区别" target="_blank">HTML和HTML5的区别</a> <span class="text-muted">半生凉忆</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>HTML和HTML5的区别什么是HTML?HTML全称为超文本标记语言(HyperTextMarkupLanguage),它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。什么是HTML5?HTML5是HTML的第五个版本,HTML5已经远远超越了标记语言的范畴,它的设计目的是在移动设备上支持多媒体,和HTML比起来,深度和广度上都做了进一步</div> </li> <li><a href="/article/1946697787680813056.htm" title="荒蛮故事(1)" target="_blank">荒蛮故事(1)</a> <span class="text-muted">炎炎冬日</span> <div>图片发自App在吃午饭得时间,看了一部外国的电影,选片的时候,选的是喜剧片。而这个《荒蛮故事》居然归档在喜剧里面,我严重怀疑这个做文档整理的职员,脑子开小差了。是的,这部影片勉强可以归为黑色幽默,但是映射的人性以及社会问题,却是世界性的问题。虽然语言怪异,我十分陌生,它既没有法语那么好听,也不似德语,当然,肯定不是英语!为了不让自己过于纠结,在没有看完之前,我便查了一下百度,发现这是一部阿根廷的影</div> </li> <li><a href="/article/1946695174964965376.htm" title="Postman/Apipost中使用Post URL编码发送含换行符参数的问题分析" target="_blank">Postman/Apipost中使用Post URL编码发送含换行符参数的问题分析</a> <span class="text-muted">悟道|养家</span> <a class="tag" taget="_blank" href="/search/postman/1.htm">postman</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>Postman/Apipost中使用PostURL编码发送含换行符参数的问题分析在使用Postman或Apipost等API测试工具进行POST请求时,当参数中包含换行符(\n或\r)通过UI界面复制参数时会遇到参数发送失效的问题。问题原因分析URL编码规范限制:x-www-form-urlencoded格式要求所有特殊字符(包括换行符)都必须进行百分号编码(URL编码)换行符(\n)在URL编码</div> </li> <li><a href="/article/1946693158070972416.htm" title="LangChain4j:Java开发者的AI应用构建利器 | 1. 实战:构建AI对话应用" target="_blank">LangChain4j:Java开发者的AI应用构建利器 | 1. 实战:构建AI对话应用</a> <span class="text-muted">秋秋棠</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>LangChain4j:Java开发者的AI应用构建利器目录LangChain4j简介LangChain4jvsSpringAI:JavaAI框架对比实战:构建AI对话应用环境搭建配置大模型核心服务实现深入ChatModel:灵活配置与应用框架选择建议LangChain4j简介LangChain4j是专为Java开发者设计的AI应用开发框架,它提供了开箱即用的API和模块化设计,让开发者能够快速构</div> </li> <li><a href="/article/1946693031793061888.htm" title="MyBatis深度解析:从原理到实战的ORM框架指南" target="_blank">MyBatis深度解析:从原理到实战的ORM框架指南</a> <span class="text-muted">秋秋棠</span> <a class="tag" taget="_blank" href="/search/Java%E5%85%A8%E6%A0%88/1.htm">Java全栈</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>MyBatis深度解析:从原理到实战的ORM框架指南一、MyBatis核心概念1.1ORM框架的本质对象关系映射(ORM)是连接面向对象编程与关系型数据库的桥梁,它实现了:数据库表↔Java类的映射表记录↔对象实例的映射表字段↔对象属性的映射以用户表为例:idusernamepasswordage1zhangsan123456252lisiabcdef30对应的Java实体类:publicclas</div> </li> <li><a href="/article/1946691646817103872.htm" title="Python爬虫实战:高效提取与解析JSON格式数据" target="_blank">Python爬虫实战:高效提取与解析JSON格式数据</a> <span class="text-muted">Python爬虫项目</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%AE%BD%E5%BA%A6%E4%BC%98%E5%85%88/1.htm">宽度优先</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E4%BC%98%E5%85%88/1.htm">深度优先</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.JSON数据爬取概述在当今互联网时代,JSON(JavaScriptObjectNotation)已成为最流行的数据交换格式之一。相比传统的HTML页面,JSON格式数据具有结构清晰、体积小、解析方便等优势,使得它成为API接口的首选数据格式。1.1为什么选择JSON数据爬取数据结构化:JSON数据本身就是结构化的,不需要像HTML那样进行复杂的解析传输高效:JSON通常比HTML体积小,传输</div> </li> <li><a href="/article/1946689505675243520.htm" title="sgg大数据全套技术链接[plus]" target="_blank">sgg大数据全套技术链接[plus]</a> <span class="text-muted">原来是大华啊~</span> <a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90/1.htm">资源</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>写在开头:感谢尚硅谷,尚硅谷万岁,我爱尚硅谷111个技术栈+43个项目,兄弟们,冲!最近小米又又又火了一把,致敬所有造福人民的企业和伟大的企业家,致敬雷军,小米,致敬马云,致敬尚硅谷,致敬所有为人民谋福的英雄人物和企业,再次献上我诚挚的敬意,致敬!尚硅谷大数据全套111个技术1.Java从入门到精通JDK版链接:https://pan.baidu.com/s/1GAc610SYSMmZBuOX4D</div> </li> <li><a href="/article/1946688884050030592.htm" title="2020-12-09" target="_blank">2020-12-09</a> <span class="text-muted">幸福大黑鸭</span> <div>IT1.LeetCode:汇总区间Java编写2020-12-09(228.汇总区间)2.《Java从入门到精通》明日科技:P351~355阅读记xmind笔记,并自己实现实例。知识点之前确实都学过,但还是再系统复习一下吧。3.《Semantic-awareWorkflowConstructionandAnalysisforDistributedDataAnalyticsSystems》:粗读关键</div> </li> <li><a href="/article/1946688498513801216.htm" title="kafka的基本使用" target="_blank">kafka的基本使用</a> <span class="text-muted">柔弱的富po</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>kafka3.0的基本使用一、kafka基本使用1.启动kafka服务zookeeper+kafka的使用进入kafka/bin目录下./kafka-server-start.sh-daemon../config/server.properties验证是否启动成功:进入到zk中的节点看id是0的broker有没有存在(上线)ls/brokers/idsserver.properties核心配置详解</div> </li> <li><a href="/article/1946687489343287296.htm" title="Spring - BeanFactory 和 ApplicationContext 有什么区别" target="_blank">Spring - BeanFactory 和 ApplicationContext 有什么区别</a> <span class="text-muted">撸帝</span> <div>学习完整课程请移步互联网Java全栈工程师BeanFactory可以理解为含有bean集合的工厂类。BeanFactory包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initia</div> </li> <li><a href="/article/1946679671403900928.htm" title="Java云原生安全矩阵:从代码到运行时的量子级防御" target="_blank">Java云原生安全矩阵:从代码到运行时的量子级防御</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%996/1.htm">Java学习资料6</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>核心架构:SpringSecurity与Envoy的“量子态防御”基于声明式安全的“波函数坍缩”API网关的“暗物质过滤”代码示例:SpringSecurity的量子态权限控制威胁检测的“超弦理论”基于行为分析的“量子隧穿”异常检测实时日志的“引力波监测”代码示例:机器学习驱动的异常行为检测加密与密钥管理的“暗能量引擎”敏感数据的“量子态加密”密钥的“黑洞事件视界”保护代码示例:BCrypt与JW</div> </li> <li><a href="/article/1946672744552787968.htm" title="Go语言Context详解:原理、使用场景与最佳实践" target="_blank">Go语言Context详解:原理、使用场景与最佳实践</a> <span class="text-muted"></span> <div>文章目录1.Context概述1.1什么是Context1.2为什么需要Context2.Context的核心接口3.Context的创建与派生3.1根Context3.2派生Context3.2.1WithCancel3.2.2WithDeadline3.2.3WithTimeout3.2.4WithValue4.Context的工作原理4.1Context的底层结构4.2取消传播机制4.3流程</div> </li> <li><a href="/article/1946672617423433728.htm" title="Python与Java互操作性的桌面应用开发" target="_blank">Python与Java互操作性的桌面应用开发</a> <span class="text-muted">master_chenchengg</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python%E5%BC%80%E5%8F%91/1.htm">python开发</a><a class="tag" taget="_blank" href="/search/IT/1.htm">IT</a> <div>Python与Java互操作性的桌面应用开发跨语言协作的魅力:Python遇上Java为什么选择Python和Java进行桌面应用开发?两种语言的优势互补:Python的简洁与Java的强大实际案例分享:当Python遇见Java,会发生什么奇妙的化学反应?搭建桥梁:Jython与JPype介绍Jython:用Python编写Java程序安装与配置:轻松几步让你上手调用Java类库:如何在Pyth</div> </li> <li><a href="/article/1946671856232755200.htm" title="工作流引擎Conductor" target="_blank">工作流引擎Conductor</a> <span class="text-muted">William一直在路上</span> <a class="tag" taget="_blank" href="/search/%E8%81%8C%E4%B8%9A%E9%87%8D%E5%90%AF%E8%AE%A1%E5%88%92/1.htm">职业重启计划</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E5%BF%83%E5%BE%97/1.htm">工作心得</a><a class="tag" taget="_blank" href="/search/conductor/1.htm">conductor</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Conductor是Netflix开源的分布式工作流编排引擎,用于协调微服务、API和任务的执行顺序。它通过声明式工作流定义,实现复杂业务流程的自动化管理,特别适合电商订单处理、数据管道、CI/CD等场景。核心概念1.工作流(Workflow)由多个任务组成的有向无环图(DAG),定义业务流程逻辑。示例:电商订单流程(创建订单→支付验证→库存锁定→物流分配)。2.任务(Task)工作流的基本执行单</div> </li> <li><a href="/article/1946671604071198720.htm" title="python调用java的方法" target="_blank">python调用java的方法</a> <span class="text-muted">月下老葫</span> <a class="tag" taget="_blank" href="/search/python%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/1.htm">python自动化测试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>最近自己开发的一套测试平台,因为上游系统经常修改主数据,导致其中一个功能经常失败,要频繁找上游测试帮忙修改数据。基于此种原因,对于这种过于依赖上游系统的接口,决定放弃直接调上游系统的http请求下发数据,改成调本地系统的java接口,直接构造数据。而这有两个难点,一个python怎么调用java方法,一个是我不会java编程。。。经常不懈的努力,终于解决了这2个问题,这里做个简单的记录。这里有同学</div> </li> <li><a href="/article/1946670591314554880.htm" title="JS 表达式和操作符-解构" target="_blank">JS 表达式和操作符-解构</a> <span class="text-muted">坚定的小辣鸡在努力</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>JavaScript的解构(Destructuring)语法是一种从数组或对象中快速提取值并赋值给变量的方式。它能让代码更简洁、清晰,常用于函数参数、变量赋值等场景。ThedestructuringsyntaxinJavaScriptisapowerfulfeaturethatmakesitpossibletounpackvaluesfromarraysorpropertiesfromobject</div> </li> <li><a href="/article/1946670212807979008.htm" title="在python程序中调用java代码" target="_blank">在python程序中调用java代码</a> <span class="text-muted">Meryoufdd</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在python程序中调用java代码Python是一门“胶水”语言,非常灵活多变,但是在一些特殊的时候,也需要调用其它语言来协助实现更多的功能;在公司使用python进行接口测试的时候,会遇到有些接口数据是由公司的开发人员进行自定义的加密算法进行加密的,此时,要开发告诉加密代码是不太可能的。跟开发小哥沟通时,很多时候都是由他给一个jar包,然后剩下的就由测试人员来发挥了。那python该如何使用这</div> </li> <li><a href="/article/1946669925103890432.htm" title="WorkManager" target="_blank">WorkManager</a> <span class="text-muted">CentForever</span> <div>1.WorkManager简介https://developer.android.google.cn/topic/libraries/architecture/viewmodel?hl=zh-cn#java2.https://developer.android.com/topic/libraries/architecture/workmanager/how-to/intermediate-prog</div> </li> <li><a href="/article/1946669583054204928.htm" title="Web开发 03" target="_blank">Web开发 03</a> <span class="text-muted"></span> <div>今天在学习JavaScript,我其实需要很多练习才可以巩固一点!需要更多!1const用于声明常量的规则在JavaScript中,const用于声明常量,其核心规则是:声明时【必须】同时初始化(赋值),且后续无法重新赋值。关键知识点拆解const声明规则用const声明变量时,必须直接赋初始值,否则会触发SyntaxError:Missinginitializerinconstdeclarati</div> </li> <li><a href="/article/1946669454771417088.htm" title="Web开发 02" target="_blank">Web开发 02</a> <span class="text-muted">im_AMBER</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>今天梳理出的HTML+CSS核心知识点,涵盖基础结构、布局、样式优化等实用技巧:总结1一、HTML核心知识1.基础结构文档声明:定义文档为HTML5标准。基本标签::根元素,包裹整个页面。:元数据(标题、样式、脚本等),不显示在页面。:设置网页标题(浏览器标签显示)。:页面内容容器,所有可见内容写在这里。2.常用标签文本与标题:~:标题标签,自动加粗且有默认层级样式。:段落标签,默认有上下边距。图</div> </li> <li><a href="/article/1946668950397972480.htm" title="Java BPM量子引擎:用代码折叠时空,让企业流程快到违反物理定律!" target="_blank">Java BPM量子引擎:用代码折叠时空,让企业流程快到违反物理定律!</a> <span class="text-muted">墨夶</span> <a class="tag" taget="_blank" href="/search/Java%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%994/1.htm">Java学习资料4</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>企业流程的"薛定谔困境"与破局之道老张的茶话会:“企业流程像薛定谔的猫——你永远不知道下一秒是卡在审批还是烂在沟通!但Java能用代码让它’量子坍缩’到最优路径!”数据说话:传统流程平均耗时:72小时→优化后仅需18分钟流程执行成功率:优化前68%→优化后99.9%并发处理能力:单实例支持1000+流程实例核心矛盾:“企业流程像’薛定谔的审批’——测不准路径,调不好节点?Java用代码让它’量子化</div> </li> <li><a href="/article/34.htm" title="Java 并发包之线程池和原子计数" target="_blank">Java 并发包之线程池和原子计数</a> <span class="text-muted">lijingyao8206</span> <a class="tag" taget="_blank" href="/search/Java%E8%AE%A1%E6%95%B0/1.htm">Java计数</a><a class="tag" taget="_blank" href="/search/ThreadPool/1.htm">ThreadPool</a><a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91%E5%8C%85/1.htm">并发包</a><a class="tag" taget="_blank" href="/search/java%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">java线程池</a> <div>对于大数据量关联的业务处理逻辑,比较直接的想法就是用JDK提供的并发包去解决多线程情况下的业务数据处理。线程池可以提供很好的管理线程的方式,并且可以提高线程利用率,并发包中的原子计数在多线程的情况下可以让我们避免去写一些同步代码。     这里就先把jdk并发包中的线程池处理器ThreadPoolExecutor 以原子计数类AomicInteger 和倒数计时锁C</div> </li> <li><a href="/article/161.htm" title="java编程思想 抽象类和接口" target="_blank">java编程思想 抽象类和接口</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%8A%BD%E8%B1%A1%E7%B1%BB/1.htm">抽象类</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3/1.htm">接口</a> <div>接口c++对接口和内部类只有简介的支持,但在java中有队这些类的直接支持   1 ,抽象类 :  如果一个类包含一个或多个抽象方法,该类必须限定为抽象类(否者编译器报错)   抽象方法 : 在方法中仅有声明而没有方法体    package com.wj.Interface; </div> </li> <li><a href="/article/288.htm" title="[房地产与大数据]房地产数据挖掘系统" target="_blank">[房地产与大数据]房地产数据挖掘系统</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a> <div>        随着一个关键核心技术的突破,我们已经是独立自主的开发某些先进模块,但是要完全实现,还需要一定的时间...        所以,除了代码工作以外,我们还需要关心一下非技术领域的事件..比如说房地产     &nb</div> </li> <li><a href="/article/415.htm" title="数组队列总结" target="_blank">数组队列总结</a> <span class="text-muted">沐刃青蛟</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84%E9%98%9F%E5%88%97/1.htm">数组队列</a> <div>      数组队列是一种大小可以改变,类型没有定死的类似数组的工具。不过与数组相比,它更具有灵活性。因为它不但不用担心越界问题,而且因为泛型(类似c++中模板的东西)的存在而支持各种类型。      以下是数组队列的功能实现代码:   import List.Student; public class</div> </li> <li><a href="/article/542.htm" title="Oracle存储过程无法编译的解决方法" target="_blank">Oracle存储过程无法编译的解决方法</a> <span class="text-muted">IT独行者</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B%E3%80%80/1.htm">存储过程 </a> <div>今天同事修改Oracle存储过程又导致2个过程无法被编译,流程规范上的东西,Dave 这里不多说,看看怎么解决问题。   1.     查看无效对象 XEZF@xezf(qs-xezf-db1)> select object_name,object_type,status from all_objects where status='IN</div> </li> <li><a href="/article/669.htm" title="重装系统之后oracle恢复" target="_blank">重装系统之后oracle恢复</a> <span class="text-muted">文强chu</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>前几天正在使用电脑,没有暂停oracle的各种服务。 突然win8.1系统奔溃,无法修复,开机时系统 提示正在搜集错误信息,然后再开机,再提示的无限循环中。 无耐我拿出系统u盘 准备重装系统,没想到竟然无法从u盘引导成功。 晚上到外面早了一家修电脑店,让人家给装了个系统,并且那哥们在我没反应过来的时候, 直接把我的c盘给格式化了 并且清理了注册表,再装系统。 然后的结果就是我的oracl</div> </li> <li><a href="/article/796.htm" title="python学习二( 一些基础语法)" target="_blank">python学习二( 一些基础语法)</a> <span class="text-muted">小桔子</span> <a class="tag" taget="_blank" href="/search/pthon/1.htm">pthon</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95/1.htm">基础语法</a> <div>紧接着把!昨天没看继续看django 官方教程,学了下python的基本语法 与c类语言还是有些小差别: 1.ptyhon的源文件以UTF-8编码格式 2. /   除 结果浮点型 //  除 结果整形 %   除 取余数 *   乘 **  乘方 eg 5**2 结果是5的2次方25 _&</div> </li> <li><a href="/article/923.htm" title="svn 常用命令" target="_blank">svn 常用命令</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/%E7%89%88%E6%9C%AC%E5%9B%9E%E9%80%80/1.htm">版本回退</a> <div>1 svn回退版本   1)在window中选择log,根据想要回退的内容,选择revert this version或revert chanages from this version 两者的区别:   revert this version:表示回退到当前版本(该版本后的版本全部作废)   revert chanages from this versio</div> </li> <li><a href="/article/1050.htm" title="某小公司面试归来" target="_blank">某小公司面试归来</a> <span class="text-muted">alafqq</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>先填单子,还要写笔试题,我以时间为急,拒绝了它。。时间宝贵。 老拿这些对付毕业生的东东来吓唬我。。 面试官很刁难,问了几个问题,记录下; 1,包的范围。。。public,private,protect. --悲剧了 2,hashcode方法和equals方法的区别。谁覆盖谁.结果,他说我说反了。 3,最恶心的一道题,抽象类继承抽象类吗?(察,一般它都是被继承的啊) 4,stru</div> </li> <li><a href="/article/1177.htm" title="动态数组的存储速度比较 集合框架" target="_blank">动态数组的存储速度比较 集合框架</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/1.htm">集合框架</a> <div>集合框架: 自定义数据结构(增删改查等) package 数组; /** * 创建动态数组 * @author 百合 * */ public class ArrayDemo{ //定义一个数组来存放数据 String[] src = new String[0]; /** * 增加元素加入容器 * @param s要加入容器</div> </li> <li><a href="/article/1304.htm" title="用JS实现一个JS对象,对象里有两个属性一个方法" target="_blank">用JS实现一个JS对象,对象里有两个属性一个方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/js%E5%AF%B9%E8%B1%A1/1.htm">js对象</a> <div><html> <head> </head> <body> 用js代码实现一个js对象,对象里有两个属性,一个方法 </body> <script> var obj={a:'1234567',b:'bbbbbbbbbb',c:function(x){ </div> </li> <li><a href="/article/1431.htm" title="探索JUnit4扩展:使用Rule" target="_blank">探索JUnit4扩展:使用Rule</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a><a class="tag" taget="_blank" href="/search/Rule/1.htm">Rule</a> <div>        在上一篇文章中,讨论了使用Runner扩展JUnit4的方式,即直接修改Test Runner的实现(BlockJUnit4ClassRunner)。但这种方法显然不便于灵活地添加或删除扩展功能。下面将使用JUnit4.7才开始引入的扩展方式——Rule来实现相同的扩展功能。 1. Rule       &n</div> </li> <li><a href="/article/1558.htm" title="[Gson一]非泛型POJO对象的反序列化" target="_blank">[Gson一]非泛型POJO对象的反序列化</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a> <div>当要将JSON数据串反序列化自身为非泛型的POJO时,使用Gson.fromJson(String, Class)方法。自身为非泛型的POJO的包括两种: 1. POJO对象不包含任何泛型的字段 2. POJO对象包含泛型字段,例如泛型集合或者泛型类 Data类 a.不是泛型类, b.Data中的集合List和Map都是泛型的 c.Data中不包含其它的POJO    </div> </li> <li><a href="/article/1685.htm" title="【Kakfa五】Kafka Producer和Consumer基本使用" target="_blank">【Kakfa五】Kafka Producer和Consumer基本使用</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>0.Kafka服务器的配置 一个Broker, 一个Topic Topic中只有一个Partition()   1. Producer: package kafka.examples.producers; import kafka.producer.KeyedMessage; import kafka.javaapi.producer.Producer; impor</div> </li> <li><a href="/article/1812.htm" title="lsyncd实时同步搭建指南——取代rsync+inotify" target="_blank">lsyncd实时同步搭建指南——取代rsync+inotify</a> <span class="text-muted">ronin47</span> <div>1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是 inotify + rsync,但随着文件数量的增大到100W+,目录下的文件列表就达20M,在网络状况不佳或者限速的情况下,变更的文件可能10来个才几M,却因此要发送的文件列表就达20M,严重减低的带宽的使用效率以及同步效率;更为要紧的是,加入inotify</div> </li> <li><a href="/article/1939.htm" title="java-9. 判断整数序列是不是二元查找树的后序遍历结果" target="_blank">java-9. 判断整数序列是不是二元查找树的后序遍历结果</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class IsBinTreePostTraverse{ static boolean isBSTPostOrder(int[] a){ if(a==null){ return false; } /*1.只有一个结点时,肯定是查找树 *2.只有两个结点时,肯定是查找树。例如{5,6}对应的BST是 6 {6,5}对应的BST是</div> </li> <li><a href="/article/2066.htm" title="MySQL的sum函数返回的类型" target="_blank">MySQL的sum函数返回的类型</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a> <div>今天项目切换数据库时,出错 访问数据库的代码大概是这样: String sql = "select sum(number) as sumNumberOfOneDay from tableName"; List<Map> rows = getJdbcTemplate().queryForList(sql); for (Map row : rows</div> </li> <li><a href="/article/2193.htm" title="java设计模式之单例模式" target="_blank">java设计模式之单例模式</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">java设计模式</a> <div> 在阎宏博士的《JAVA与模式》一书中开头是这样描述单例模式的:   作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 单例模式的结构   单例模式的特点: 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。   饿汉式单例类   publ</div> </li> <li><a href="/article/2320.htm" title="javascript取当月最后一天" target="_blank">javascript取当月最后一天</a> <span class="text-muted">ctrain</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div> <!--javascript取当月最后一天--> <script language=javascript> var current = new Date(); var year = current.getYear(); var month = current.getMonth(); showMonthLastDay(year, mont</div> </li> <li><a href="/article/2447.htm" title="linux tune2fs命令详解" target="_blank">linux tune2fs命令详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/tune2fs/1.htm">tune2fs</a><a class="tag" taget="_blank" href="/search/%E6%9F%A5%E7%9C%8B%E7%B3%BB%E7%BB%9F%E6%96%87%E4%BB%B6%E5%9D%97%E4%BF%A1%E6%81%AF/1.htm">查看系统文件块信息</a> <div>一.简介: tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式。 二.用法: Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g grou</div> </li> <li><a href="/article/2574.htm" title="做有中国特色的程序员" target="_blank">做有中国特色的程序员</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a> <div>  从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是因为不喜欢这个类型,而此人也不会全不喜欢这些网络作品。究其原因,是因为网络作品都是让人先白看的,看的好了才出了头。而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾。 许多大牛都是写了博客,后来出了书。这些书也都不次,可能有人让为不好,是因为技术书不像小说,小说在读故事,技术书是在学知识或温习知识,有</div> </li> <li><a href="/article/2701.htm" title="Android:TextView属性大全" target="_blank">Android:TextView属性大全</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/textview/1.htm">textview</a> <div>android:autoLink    设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)  android:autoText    如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输</div> </li> <li><a href="/article/2828.htm" title="tomcat虚拟目录安装及其配置" target="_blank">tomcat虚拟目录安装及其配置</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/tomcat%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E/1.htm">tomcat配置说明</a><a class="tag" taget="_blank" href="/search/tomca%E9%83%A8%E7%BD%B2web%E5%BA%94%E7%94%A8/1.htm">tomca部署web应用</a><a class="tag" taget="_blank" href="/search/tomcat%E8%99%9A%E6%8B%9F%E7%9B%AE%E5%BD%95%E5%AE%89%E8%A3%85/1.htm">tomcat虚拟目录安装</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2097184 1.-------------------------------------------tomcat  目录结构 config:存放tomcat的配置文件 temp  :存放tomcat跑起来后存放临时文件用的 work   : 当第一次访问应用中的jsp</div> </li> <li><a href="/article/2955.htm" title="浅谈:APP有哪些常被黑客利用的安全漏洞" target="_blank">浅谈:APP有哪些常被黑客利用的安全漏洞</a> <span class="text-muted">gg163</span> <a class="tag" taget="_blank" href="/search/APP/1.htm">APP</a> <div>首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时会因为BOSS时间催得紧等很多可观原因。由国内移动应用安全检测团队爱内测(ineice.com)的CTO给我们浅谈关于Android 系统的开源设计以及生态环境。 1. 应用反编译漏洞:APK 包非常容易被反编译成可读</div> </li> <li><a href="/article/3082.htm" title="C#根据网址生成静态页面" target="_blank">C#根据网址生成静态页面</a> <span class="text-muted">hvt</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a> <div>HoverTree开源项目中HoverTreeWeb.HVTPanel的Index.aspx文件是后台管理的首页。包含生成留言板首页,以及显示用户名,退出等功能。根据网址生成页面的方法:   bool CreateHtmlFile(string url, string path) { //http://keleyi.com/a/bjae/3d10wfax.htm stri</div> </li> <li><a href="/article/3209.htm" title="SVG 教程 (一)" target="_blank">SVG 教程 (一)</a> <span class="text-muted">天梯梦</span> <a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a> <div>SVG 简介 SVG 是使用 XML 来描述二维图形和绘图程序的语言。 学习之前应具备的基础知识: 继续学习之前,你应该对以下内容有基本的了解: HTML XML 基础 如果希望首先学习这些内容,请在本站的首页选择相应的教程。 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量</div> </li> <li><a href="/article/3336.htm" title="一个简单的java栈" target="_blank">一个简单的java栈</a> <span class="text-muted">luyulong</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%A0%88/1.htm">栈</a> <div> public class MyStack { private long[] arr; private int top; public MyStack() { arr = new long[10]; top = -1; } public MyStack(int maxsize) { arr = new long[maxsize]; top </div> </li> <li><a href="/article/3463.htm" title="基础数据结构和算法八:Binary search" target="_blank">基础数据结构和算法八:Binary search</a> <span class="text-muted">sunwinner</span> <a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a><a class="tag" taget="_blank" href="/search/Binary+search/1.htm">Binary search</a> <div>Binary search needs an ordered array so that it can use array indexing to dramatically reduce the number of compares required for each search, using the classic and venerable binary search algori</div> </li> <li><a href="/article/3590.htm" title="12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!" target="_blank">12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!</a> <span class="text-muted">刘星宇</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int main(void) {     char buff[10];     memset(buff,0,sizeof(buff)); </div> </li> <li><a href="/article/3717.htm" title="ITeye 7月技术图书有奖试读获奖名单公布" target="_blank">ITeye 7月技术图书有奖试读获奖名单公布</a> <span class="text-muted">ITeye管理员</span> <a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a><a class="tag" taget="_blank" href="/search/ITeye/1.htm">ITeye</a><a class="tag" taget="_blank" href="/search/%E8%AF%95%E8%AF%BB/1.htm">试读</a> <div>ITeye携手人民邮电出版社图灵教育共同举办的7月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。 7月试读活动回顾: http://webmaster.iteye.com/blog/2092746 本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀): 《Java性能优化权威指南》 </div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>