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/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950232781174927360.htm" title="15个小技巧,让我的Windows电脑更好用了!" target="_blank">15个小技巧,让我的Windows电脑更好用了!</a> <span class="text-muted">曹元_</span> <div>01.桌面及文档处理第一部分的技巧,主要是围绕桌面的一些基本操作,包括主题设置、常用文档文件快捷打开的多种方式等等。主题换色默认情况下,我们的Win界面可能就是白色的文档界面,天蓝色的图表背景,说不出哪里不好看,但是就是觉得不够高级。imageimage说到高级感,本能第一反应就会和暗色模式联想起来,如果我们将整个界面换成黑夜模式的话,它会是这样的。imageimage更改主题颜色及暗色模式,我们</div> </li> <li><a href="/article/1950228031117258752.htm" title="深入解析JVM工作原理:从字节码到机器指令的全过程" target="_blank">深入解析JVM工作原理:从字节码到机器指令的全过程</a> <span class="text-muted"></span> <div>一、JVM概述Java虚拟机(JVM)是Java平台的核心组件,它实现了Java"一次编写,到处运行"的理念。JVM是一个抽象的计算机器,它有自己的指令集和运行时内存管理机制。JVM的主要职责:加载:读取.class文件并验证其正确性存储:管理内存分配和垃圾回收执行:解释或编译字节码为机器指令安全:提供沙箱环境限制恶意代码二、JVM架构详解JVM由三个主要子系统组成:1.类加载子系统类加载过程分为</div> </li> <li><a href="/article/1950227023859347456.htm" title="Linux系统配置(应用程序)" target="_blank">Linux系统配置(应用程序)</a> <span class="text-muted">1风天云月</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/1.htm">应用程序</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/1.htm">编译安装</a><a class="tag" taget="_blank" href="/search/rpm/1.htm">rpm</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a> <div>目录前言一、应用程序概述1、命令与程序的关系2、程序的组成3、软件包封装类型二、RPM1、RPM概述2、RPM用法三、编译安装1、解包2、配置3、编译4、安装5、启用httpd服务结语前言在Linux中的应用程序被视为将软件包安装到系统中后产生的各种文档,其中包括可执行文件、配置文件、用户手册等内容,这些文档被组织为一个有机的整体,为用户提供特定的功能,因此对于“安装软件包”与“安装应用程序”这两</div> </li> <li><a href="/article/1950226517397139456.htm" title="JVM 内存模型深度解析:原子性、可见性与有序性的实现" target="_blank">JVM 内存模型深度解析:原子性、可见性与有序性的实现</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/JVM/1.htm">JVM</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%89%96%E6%9E%90%EF%BC%9A%E4%BB%8E%E9%9D%A2%E8%AF%95%E8%80%83%E7%82%B9%E5%88%B0%E7%94%9F%E4%BA%A7%E5%AE%9E%E8%B7%B5/1.htm">深度剖析:从面试考点到生产实践</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B/1.htm">内存模型</a> <div>在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J</div> </li> <li><a href="/article/1950226390070652928.htm" title="Flowable 高级扩展:自定义元素与性能优化实战" target="_blank">Flowable 高级扩展:自定义元素与性能优化实战</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/Flowable/1.htm">Flowable</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%BC%95%E6%93%8E%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97/1.htm">流程引擎实战指南</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%9B%BE/1.htm">流程图</a><a class="tag" taget="_blank" href="/search/flowable/1.htm">flowable</a><a class="tag" taget="_blank" href="/search/BPMN/1.htm">BPMN</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%BC%95%E6%93%8E/1.htm">流程引擎</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在前五篇文章中,我们从基础概念、流程设计、API实战、SpringBoot集成,到外部系统协同,逐步构建了Flowable的应用体系。但企业级复杂场景中,原生功能往往难以满足定制化需求——比如需要特殊的审批规则网关、与决策引擎联动实现动态路由,或是在高并发场景下优化流程引擎性能。本文将聚焦Flowable的高级扩展能力,详解如何自定义流程元素、集成规则引擎,并掌握大型系统中的性能调优策略。一、自定</div> </li> <li><a href="/article/1950225785054883840.htm" title="Java | 多线程经典问题 - 售票" target="_blank">Java | 多线程经典问题 - 售票</a> <span class="text-muted">Ada54</span> <div>一、售票需求1)同一个票池2)多个窗口卖票,不能出售同一张票二、售票问题代码实现(线程与进程小总结,请戳:Java|线程和进程,创建线程)step1:定义SaleWindow类实现Runnable接口,覆盖run方法step2:实例化SaleWindow对象,创建Thread对象,将SaleWindow作为参数传给Thread类的构造函数,然后通过Thread.start()方法启动线程step3</div> </li> <li><a href="/article/1950225381961297920.htm" title="SpringMVC的执行流程" target="_blank">SpringMVC的执行流程</a> <span class="text-muted"></span> <div>1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,</div> </li> <li><a href="/article/1950224616647618560.htm" title="JAVA接口机结构解析" target="_blank">JAVA接口机结构解析</a> <span class="text-muted">秃狼</span> <a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/%E5%85%AB%E8%82%A1%E6%96%87/1.htm">八股文</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消</div> </li> <li><a href="/article/1950223497875746816.htm" title="最新阿里四面面试真题46道:面试技巧+核心问题+面试心得" target="_blank">最新阿里四面面试真题46道:面试技巧+核心问题+面试心得</a> <span class="text-muted">风平浪静如码</span> <div>前言做技术的有一种资历,叫做通过了阿里的面试。这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。希望对大家帮助,祝面试成功,有个更好的职业规划。一,阿里常见技术面1、微信红包怎么实现。2、海量数据分析。3、测试职位问的线程安全和非线程安全。4、HTTP2.0、thrift。5、面试电话沟通可能先让自我介绍。6、分布式事务一致性。7、ni</div> </li> <li><a href="/article/1950223483048882176.htm" title="【ARM】FPU,VFP,ASE,NEON,SVE...是什么意思?" target="_blank">【ARM】FPU,VFP,ASE,NEON,SVE...是什么意思?</a> <span class="text-muted">亿道电子Emdoor</span> <a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/ARM/1.htm">ARM</a> <div>1、文档目标对执行浮点和SIMD操作的逻辑的各种名称的缩写词进行简要解释。2、问题场景Arm处理器内核中有用于执行浮点和SIMD操作的逻辑,有各种名称。它们通常是一系列的缩写形式,因此本文旨在对每一个缩写词进行简要解释。3、软硬件环境1、软件版本:不涉及2、电脑环境:不涉及4、相关缩写FPU(Floating-PointUnit)浮点单元浮点单元是处理器核心中的一个模块,用于使用浮点数执行算术运算</div> </li> <li><a href="/article/1950222345163567104.htm" title="深入理解汇编语言子程序设计与系统调用" target="_blank">深入理解汇编语言子程序设计与系统调用</a> <span class="text-muted">网安spinage</span> <a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80/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><a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>本文将全面解析汇编语言中子程序设计的核心技术以及系统调用的实现方法,涵盖参数传递的多种方式、堆栈管理、API调用等关键知识点,并提供实际案例演示。一、子程序设计:参数传递的艺术1.寄存器传参:高效简洁.386.modelflat,stdcalloptioncasemap:none.dataxdd5;定义变量ydd6sumdd?.code;函数定义:addxy1addxy1procpushebpmo</div> </li> <li><a href="/article/1950218946015719424.htm" title="图论算法经典题目解析:DFS、BFS与拓扑排序实战" target="_blank">图论算法经典题目解析:DFS、BFS与拓扑排序实战</a> <span class="text-muted">周童學</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E8%AE%BA/1.htm">图论</a> <div>图论算法经典题目解析:DFS、BFS与拓扑排序实战图论问题是算法面试中的高频考点,本博客将通过四道LeetCode经典题目(均来自"Top100Liked"题库),深入讲解图论的核心算法思想和实现技巧。涵盖DFS、BFS、拓扑排序和前缀树等知识点,每道题配有Java实现和易错点分析。1.岛屿数量(DFS遍历)问题描述给定一个由'1'(陆地)和'0'(水)组成的二维网格,计算岛屿的数量。岛屿由水平或</div> </li> <li><a href="/article/1950218818781507584.htm" title="【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge" target="_blank">【异常】使用 LiteFlow 框架时,提示错误ChainDuplicateException: [chain name duplicate] chainName=categoryChallenge</a> <span class="text-muted">本本本添哥</span> <a class="tag" taget="_blank" href="/search/002/1.htm">002</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E9%98%B6%E5%BC%80%E5%8F%91%E8%83%BD%E5%8A%9B/1.htm">进阶开发能力</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>一、报错内容Causedby:com.yomahub.liteflow.exception.ChainDuplicateException:[chainnameduplicate]chainName=categoryChallengeatcom.yomahub.liteflow.parser.helper.ParserHelper.lambda$null$0(ParserHelper.java:1</div> </li> <li><a href="/article/1950218314064130048.htm" title="Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)" target="_blank">Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)</a> <span class="text-muted">bug菌¹</span> <a class="tag" taget="_blank" href="/search/Java%E5%AE%9E%E6%88%98%28%E8%BF%9B%E9%98%B6%E7%89%88%29/1.htm">Java实战(进阶版)</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Java%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Java零基础入门</a><a class="tag" taget="_blank" href="/search/Java%E5%B9%B6%E5%8F%91/1.htm">Java并发</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">线程池</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%AF%87/1.htm">多线程篇</a> <div>本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行</div> </li> <li><a href="/article/1950217936077647872.htm" title="Java 队列" target="_blank">Java 队列</a> <span class="text-muted">tryxr</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/%E9%98%9F%E5%88%97/1.htm">队列</a> <div>队列一般用什么哪种结构实现队列的特性数据入队列时一定是从尾部插入吗数据出队列时一定是从头部删除吗队列的基本运算有什么队列支持随机访问吗队列的英文表示什么是队列队列从哪进、从哪出队列的进出顺序队列是用哪种结构实现的Queue和Deque有什么区别Queue接口的方法Queue中的add与offer的区别offer、poll、peek的模拟实现如何利用链表实现队列如何利用顺序表实现队列什么叫做双端队列</div> </li> <li><a href="/article/1950216170401492992.htm" title="常规笔记本和加固笔记本的区别" target="_blank">常规笔记本和加固笔记本的区别</a> <span class="text-muted">luchengtech</span> <a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E9%98%B2%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">三防笔记本</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">加固计算机</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">加固笔记本</a> <div>在现代科技产品中,笔记本电脑因其便携性和功能性被广泛应用。根据使用场景和需求的不同,笔记本可分为常规笔记本和加固笔记本,二者在多个方面存在显著区别。适用场景是区分二者的重要标志。常规笔记本主要面向普通消费者和办公人群,适用于家庭娱乐、日常办公、学生学习等相对稳定的室内环境。比如,人们在家用它追剧、处理文档,学生在教室用它完成作业。而加固笔记本则专为特殊行业设计,像军事、野外勘探、工业制造、交通运输</div> </li> <li><a href="/article/1950215540215705600.htm" title="JVM 内存分配与回收策略:从对象创建到内存释放的全流程" target="_blank">JVM 内存分配与回收策略:从对象创建到内存释放的全流程</a> <span class="text-muted"></span> <div>在JVM的运行机制中,内存分配与回收策略是连接对象生命周期与垃圾收集器的桥梁。它决定了对象在堆内存中的创建位置、存活过程中的区域迁移,以及最终被回收的时机。合理的内存分配策略能减少GC频率、降低停顿时间,是优化Java应用性能的核心环节。本文将系统解析JVM的内存分配规则、对象晋升机制,以及实战中的内存优化技巧。一、对象优先在Eden区分配:新生代的“临时缓冲区”大多数情况下,Java对象在新生代</div> </li> <li><a href="/article/1950214657335685120.htm" title="代码随想录算法训练营第三十五天" target="_blank">代码随想录算法训练营第三十五天</a> <span class="text-muted"></span> <div>01背包问题二维题目链接01背包问题二维题解importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intM=sc.nextInt();intN=sc.nextInt();int[]space=newint[M];int[]value=new</div> </li> <li><a href="/article/1950209621381672960.htm" title="Android 应用权限管理详解" target="_blank">Android 应用权限管理详解</a> <span class="text-muted"></span> <div>文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G</div> </li> <li><a href="/article/1950209116165173248.htm" title="uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)" target="_blank">uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)</a> <span class="text-muted">十一猫咪爱养鱼</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%BB%84%E4%BB%B6%E4%B8%8E%E5%8A%9F%E8%83%BD%28%E5%BC%80%E7%AE%B1%E5%8D%B3%E7%94%A8%29/1.htm">前端组件与功能(开箱即用)</a><a class="tag" taget="_blank" href="/search/uniapp%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/1.htm">uniapp常见问题解决</a><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/uniapp3%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">uniapp3小程序授权登录</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%E6%95%99%E7%A8%8B/1.htm">微信小程序登录获取用户信息教程</a><a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E6%98%B5%E7%A7%B0%E6%89%8B%E6%9C%BA%E5%8F%B7%E5%A4%B4%E5%83%8F%E4%BF%A1%E6%81%AF%E7%99%BB%E5%BD%95/1.htm">获取用户昵称手机号头像信息登录</a><a class="tag" taget="_blank" href="/search/vue3%E7%89%88%E6%9C%AC%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">vue3版本小程序平台授权登录</a><a class="tag" taget="_blank" href="/search/uniap%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AB%AF%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%B5%81%E7%A8%8B/1.htm">uniap小程序端用户登录流程</a><a class="tag" taget="_blank" href="/search/uni%E5%AE%8C%E6%95%B4%E7%9A%84%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E7%99%BB%E5%BD%95%E6%BA%90%E7%A0%81/1.htm">uni完整的小程序平台登录源码</a> <div>效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是</div> </li> <li><a href="/article/1950208989954371584.htm" title="Selenium 特殊控件操作与 ActionChains 实践详解" target="_blank">Selenium 特殊控件操作与 ActionChains 实践详解</a> <span class="text-muted">小馋喵知识杂货铺</span> <a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a> <div>1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个</div> </li> <li><a href="/article/1950208107430866944.htm" title="python笔记14介绍几个魔法方法" target="_blank">python笔记14介绍几个魔法方法</a> <span class="text-muted">抢公主的大魔王</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> <div>python笔记14介绍几个魔法方法先声明一下各位大佬,这是我的笔记。如有错误,恳请指正。另外,感谢您的观看,谢谢啦!(1).__doc__输出对应的函数,类的说明文档print(print.__doc__)print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.std</div> </li> <li><a href="/article/1950208107032408064.htm" title="DPDK 技术详解:榨干网络性能的“瑞士军刀”" target="_blank">DPDK 技术详解:榨干网络性能的“瑞士军刀”</a> <span class="text-muted"></span> <div>你是否曾感觉,即使拥有顶级的服务器和万兆网卡,你的网络应用也总是“喂不饱”硬件,性能总差那么一口气?传统的网络处理方式,就像在高速公路上设置了太多的收费站和检查点,限制了数据包的“奔跑”速度。今天,我们要深入探讨一个能够打破这些瓶颈,让你的网络应用快到飞起的“黑科技”——DPDK(DataPlaneDevelopmentKit,数据平面开发套件)。这不仅仅是一个工具包,更是一种全新的网络处理哲学。</div> </li> <li><a href="/article/1950207097413103616.htm" title="微信公众号回调java_处理微信公众号消息回调" target="_blank">微信公众号回调java_处理微信公众号消息回调</a> <span class="text-muted">weixin_39607620</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E5%9B%9E%E8%B0%83java/1.htm">微信公众号回调java</a> <div>1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.</div> </li> <li><a href="/article/1950204954295726080.htm" title="Anaconda 和 Miniconda:功能详解与选择建议" target="_blank">Anaconda 和 Miniconda:功能详解与选择建议</a> <span class="text-muted">古月฿</span> <a class="tag" taget="_blank" href="/search/python%E5%85%A5%E9%97%A8/1.htm">python入门</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a> <div>Anaconda和Miniconda详细介绍一、Anaconda的详细介绍1.什么是Anaconda?Anaconda是一个开源的包管理和环境管理工具,在数据科学、机器学习以及科学计算领域发挥着关键作用。它以Python和R语言为基础,为用户精心准备了大量预装库和工具,极大地缩短了搭建数据科学环境的时间。对于那些想要快速开展数据分析、模型训练等工作的人员来说,Anaconda就像是一个一站式的“数</div> </li> <li><a href="/article/1950204701714739200.htm" title="环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用" target="_blank">环境搭建 | Python + Anaconda / Miniconda + PyCharm 的安装、配置与使用</a> <span class="text-muted"></span> <div>本文将分别介绍Python、Anaconda/Miniconda、PyCharm的安装、配置与使用,详细介绍Python环境搭建的全过程,涵盖Python、Pip、PythonLauncher、Anaconda、Miniconda、Pycharm等内容,以官方文档为参照,使用经验为补充,内容全面而详实。由于图片太多,就先贴一个无图简化版吧,详情请查看Python+Anaconda/Minicond</div> </li> <li><a href="/article/1950200667587014656.htm" title="学C++的五大惊人好处" target="_blank">学C++的五大惊人好处</a> <span class="text-muted"></span> <div>为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其</div> </li> <li><a href="/article/1950200541233606656.htm" title="Android 基础知识:Android 应用权限详解" target="_blank">Android 基础知识:Android 应用权限详解</a> <span class="text-muted">流水mpc</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>这篇文章为大家系统的梳理一下Android权限相关的知识,在日常开发中,我们都用过权限,但是对于权限的一些细节我们可能掌握的还不够全面,这篇文章会全面的为大家介绍权限相关的知识。当然,本篇文章依然是参考了Google的官方文档:应用权限。本文目录一、认识Android权限(一)Android系统为什么需要权限?Android系统设置权限的目的是保护Android用户的隐私。对于用户的敏感数据And</div> </li> <li><a href="/article/1950200414989250560.htm" title="面试必考题:Android Binder 机制详解" target="_blank">面试必考题:Android Binder 机制详解</a> <span class="text-muted">大模型大数据攻城狮</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/binder/1.htm">binder</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/dalvik/1.htm">dalvik</a><a class="tag" taget="_blank" href="/search/retrofit/1.htm">retrofit</a> <div>目录第一章:Binder的基本概念什么是Binder?多角度解读Binder第二章:Binder的工作机制Binder的整体流程服务注册:从零到有的第一步服务查询:找到目标的“地图”服务调用:请求与响应的旅程Binder驱动的幕后功劳为什么Binder这么快?第三章:Binder在系统架构中的角色Activity:界面背后的通信枢纽Binder的角色实例分析Service:后台任务的跨进程支柱Bi</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>