2025年java 在线教程(java教程 免费)

java 在线教程(java教程 免费)原文 原文 如果您浏览类的规范 您会看到总结支持的正则表达式构造的表格 在 字符类 部分 您会找到以下内容 构造 描述 a b 或 c 简单类 除了 a b 或 c 之外的任何字符 否定 a 到 z 或 A 到 Z 包括 范围 a 到 d 或者 m 到 p



原文:

原文:

如果您浏览类的规范,您会看到总结支持的正则表达式构造的表格。在“字符类”部分,您会找到以下内容:

构造描述a、b 或 c(简单类)除了 a、b 或 c 之外的任何字符(否定)a 到 z,或 A 到 Z,包括(范围)a 到 d,或者 m 到 p:[a-dm-p](并集)d、e 或 f(交集)a 到 z,除了 b 和 c:[ad-z](减法)a 到 z,但不包括 m 到 p:[a-lq-z](减法)

左侧列指定了正则表达式构造,而右侧列描述了每个构造将匹配的条件。


**注意:**短语“字符类”中的“类”并不指代文件。在正则表达式的上下文中,字符类是一组方括号内的字符。它指定了成功匹配给定输入字符串中的单个字符的字符。


字符类的最基本形式是在方括号内简单地放置一组字符。例如,正则表达式将匹配单词"bat"、“cat"或"rat”,因为它定义了一个字符类(接受"b"、"c"或"r"中的任意一个)作为其第一个字符。

 

在上面的例子中,只有当第一个字母与字符类定义的字符之一匹配时,整体匹配才成功。

否定

要匹配除列出的字符之外的所有字符,请在字符类的开头插入“”元字符。这种技术被称为否定

 

只有当输入字符串的第一个字符包含字符类定义的任何字符时,匹配才成功。

范围

有时,您可能想要定义一个包含一系列值的字符类,比如字母"a 到 h"或数字"1 到 5"。要指定一个范围,只需在要匹配的第一个和最后一个字符之间插入“”元字符,比如或。您还可以在类内将不同的范围放在一起,以进一步扩展匹配可能性。例如,将匹配任何字母:a 到 z(小写)或 A 到 Z(大写)。

以下是一些范围和否定的示例:

 

并集

您还可以使用并集来创建由两个或多个单独字符类组成的单一字符类。要创建并集,只需将一个类嵌套在另一个类中,比如。这个特定的并集创建了一个单一的字符类,匹配数字 0、1、2、3、4、6、7 和 8。

 

交集

要创建一个仅匹配所有嵌套类共同字符的单一字符类,请使用,比如。这个特定的交集创建了一个单一的字符类,仅匹配两个字符类共同的数字:3、4 和 5。

 

这里有一个示例,展示了两个范围的交集:

 

减法

最后,您可以使用减法来否定一个或多个嵌套的字符类,比如。这个示例创建了一个单一的字符类,匹配从 0 到 9 的所有内容,除了数字 3、4 和 5。

 

现在我们已经介绍了如何创建字符类,您可能想在继续下一节之前查看字符类表。

原文:

API 包含许多有用的预定义字符类,提供了常用正则表达式的便捷简写:

构造描述任何字符(可能匹配行终止符,也可能不匹配)一个数字:一个非数字:一个空白字符:一个非空白字符:一个单词字符:一个非单词字符:

在上表中,左列中的每个构造都是右列中字符类的简写。例如, 表示数字范围(0-9), 表示单词字符(任何小写字母、任何大写字母、下划线字符或任何数字)。尽可能使用预定义类。它们使您的代码更易阅读,并消除由格式不正确的字符类引入的错误。

以反斜杠开头的构造称为转义构造。我们在字符串文字部分预览了转义构造,其中我们提到了反斜杠和引号的使用。如果您在字符串文字中使用转义构造,必须在字符串编译之前在反斜杠前加上另一个反斜杠。例如:

 

在这个例子中, 是正则表达式;额外的反斜杠是为了代码编译而需要的。测试工具直接从读取表达式,因此额外的反斜杠是不必要的。

以下示例演示了预定义字符类的使用。

 

在前三个例子中,正则表达式只是(“点"元字符),表示"任何字符”。因此,在所有三种情况下匹配都成功(随机选择的字符、一个数字和一个字母)。其余的例子每个都使用了预定义字符类表中的一个正则表达式构造。您可以参考这个表格来理解每个匹配背后的逻辑:

  • 匹配所有数字

  • 匹配空格

  • 匹配单词字符

或者,大写字母表示相反的意思:

  • 匹配非数字

  • 匹配非空格

  • 匹配非单词字符

原文:

量词允许您指定要匹配的出现次数。为方便起见,下面呈现了 Pattern API 规范的三个部分,描述了贪婪、勉强和占有量词。乍一看,似乎量词、和做的事情完全相同,因为它们都承诺匹配",一次或零次"。有微妙的实现差异,将在本节末尾解释。

贪婪勉强占有含义,一次或零次,零次或多次,一次或多次,恰好**次,至少**次,至少*次但不超过*次

让我们通过创建三个不同的正则表达式来开始我们对贪婪量词的研究:字母"a"后面跟着、或。让我们看看当这些表达式针对空输入字符串进行测试时会发生什么:

 
 

在上面的例子中,前两种情况匹配成功,因为表达式和都允许字母出现零次。您还会注意到开始和结束索引都是零,这与我们迄今为止看到的任何示例都不同。空输入字符串没有长度,因此测试只是在索引 0 处匹配到了空。这种匹配称为零长度匹配。零长度匹配可以出现在几种情况下:在空输入字符串中,在输入字符串的开头,在输入字符串的最后一个字符之后,或在输入字符串的任意两个字符之间。零长度匹配很容易识别,因为它们始终从相同的索引位置开始和结束。

让我们通过几个例子来探索零长度匹配。将输入字符串更改为单个字母"a",您会注意到一些有趣的事情:

 

所有三个量词都找到了字母"a",但前两个还在索引 1 处找到了零长度匹配;也就是说,在输入字符串的最后一个字符之后。请记住,匹配器将字符"a"视为位于索引 0 和索引 1 之间的单元格中,我们的测试工具循环直到无法找到匹配。根据使用的量词,最后一个字符后面的“无内容”可能会或可能不会触发匹配。

现在将输入字符串更改为连续五次的字母"a",您将得到以下结果:

 

表达式 为每个字符找到一个匹配,因为它匹配 “a” 出现零次或一次时。表达式 找到两个单独的匹配:第一个匹配中的所有字母 “a”,然后是索引 5 处最后一个字符后的零长度匹配。最后, 匹配所有字母 “a” 的出现,忽略最后索引处的 “nothing” 的存在。

此时,您可能想知道如果前两个量词遇到除 “a” 外的字母会发生什么。例如,如果它遇到字母 “b”,比如 “ababaaaab” 会发生什么?

让我们来看看:

 

尽管字母 “b” 出现在单元格 1、3 和 8 中,输出报告在这些位置上的零长度匹配。正则表达式 并不是专门寻找字母 “b”;它只是查找字母 “a” 的存在(或不存在)。如果量词允许 “a” 匹配零次,那么输入字符串中不是 “a” 的任何内容都会显示为零长度匹配。剩下的 a 根据前面示例中讨论的规则进行匹配。

要精确匹配一个模式 n 次,只需在大括号内指定数字:

 

在这里,正则表达式 在连续三个字母 “a” 中搜索三次出现的情况。第一个测试失败,因为输入字符串中没有足够的 a 与之匹配。第二个测试包含输入字符串中恰好 3 个 a,触发了匹配。第三个测试也触发了匹配,因为输入字符串开头恰好有 3 个 a。在此之后的任何内容都与第一个匹配无关。如果在那之后再次出现该模式,将触发后续的匹配:

 

要求模式至少出现 n 次,数字后加逗号:

 

使用相同的输入字符串,此测试仅找到一个匹配,因为连续 9 个 a 满足 “至少” 3 个 a 的需求。

最后,要指定出现次数的上限,在大括号内添加第二个数字:

 

第一个匹配强制停在 6 个字符的上限处。第二个匹配包括剩下的内容,这恰好是三个 a,这是允许的最小字符数。如果输入字符串短了一个字符,就不会有第二个匹配,因为只剩下两个 a。

到目前为止,我们只在包含一个字符的输入字符串上测试了量词。实际上,量词只能附加到一个字符上,因此正则表达式 “abc+” 意味着 “a,后跟 b,后跟 c 一次或多次”。它不意味着 “abc” 一次或多次。然而,量词也可以附加到字符类和捕获组,例如 (a 或 b 或 c,一次或多次)或 (组 “abc”,一次或多次)。

让我们通过连续三次指定组来说明。

 

在第一个例子中找到三个匹配,因为量词应用于整个捕获组。然而,去掉括号,匹配失败,因为量词现在仅适用于字母"g"。

同样,我们可以将一个量词应用于整个字符类:

 

在第一个例子中,量词应用于整个字符类,但在第二个例子中仅应用于字母"c"。

贪婪、勉强和占有量词之间存在微妙的区别。

贪婪量词被认为是"贪婪"的,因为它们强制匹配器在尝试第一次匹配之前读取或吞掉整个输入字符串。如果第一次匹配尝试(整个输入字符串)失败,匹配器会向后退一个字符并重试,重复这个过程直到找到匹配或没有更多字符可以后退。根据表达式中使用的量词,它将尝试匹配的最后一件事是 1 个或 0 个字符。

然而,勉强量词采取相反的方法:它们从输入字符串的开头开始,然后不情愿地一次吃掉一个字符寻找匹配。它们尝试的最后一件事是整个输入字符串。

最后,占有量词总是吞掉整个输入字符串,尝试一次(仅一次)匹配。与贪婪量词不同,占有量词永远不会后退,即使这样做可以使整体匹配成功。

为了说明,考虑输入字符串。

 

第一个例子使用贪婪量词来找到"任何东西",零次或多次,然后是字母。因为量词是贪婪的,表达式的部分首先吞掉整个输入字符串。此时,整体表达式无法成功,因为最后三个字母()已经被消耗。因此,匹配器慢慢地一次后退一个字母,直到最右边的"foo"出现,匹配成功并结束搜索。

然而,第二个例子是勉强的,因此它首先消耗"nothing"。因为"foo"不出现在字符串的开头,它被迫吞下第一个字母(一个"x"),这触发了第一个匹配在 0 和 4。我们的测试工具继续这个过程直到输入字符串耗尽。它在 4 和 13 找到另一个匹配。

第三个例子无法找到匹配,因为量词是占有的。在这种情况下,整个输入字符串被消耗,没有剩余内容来满足表达式末尾的"foo"。在想要占有所有内容而永远不后退的情况下使用占有量词;在匹配不立即找到的情况下,它将优于等效的贪婪量词。

原文:

在上一节中,我们看到量词如何附加到一个字符、字符类或捕获组上。但直到现在,我们还没有详细讨论捕获组的概念。

捕获组是将多个字符视为单个单元的一种方式。它们是通过将要分组的字符放在一对括号中创建的。例如,正则表达式创建了一个包含字母和的单个组。与捕获组匹配的输入字符串部分将被保存在内存中,以便稍后通过反向引用进行调用(如下面在反向引用部分中讨论)。

如 API 中所述,通过从左到右计算其开括号来对捕获组进行编号。例如,在表达式中,有四个这样的组:

要找出表达式中存在多少组,请在匹配器对象上调用方法。方法返回一个,显示匹配器模式中存在的捕获组数。在这个例子中,将返回数字,显示该模式包含 4 个捕获组。

还有一个特殊组,组 0,它始终表示整个表达式。这个组不包括在报告的总数中。以开头的组是纯粹的、非捕获组,不捕获文本,也不计入组总数。(您将在 Pattern 类的方法部分后面看到非捕获组的示例。)

重要的是要理解组是如何编号的,因为一些方法接受一个指定特定组号的作为参数:

  • :返回在先前匹配操作期间由给定组捕获的子序列的起始索引。

  • :返回在先前匹配操作期间由给定组捕获的子序列的最后一个字符的索引加一。

  • :返回在先前匹配操作期间由给定组捕获的输入子序列。

匹配捕获组的输入字符串部分将被保存在内存中,以便通过反向引用进行后续调用。反向引用在正则表达式中被指定为反斜杠()后跟表示要调用的组的数字。例如,表达式定义了一个捕获组,匹配连续两个数字,可以在表达式中通过反向引用稍后调用。

要匹配任意两个数字,后跟完全相同的两个数字,您可以使用作为正则表达式:

 

如果更改最后两个数字,匹配将失败:

 

对于嵌套的捕获组,反向引用的工作方式完全相同:指定一个反斜杠,后跟要调用的组的编号。

原文:

到目前为止,我们只关心匹配是否在特定输入字符串的某个位置发现。我们从不关心匹配发生在字符串的哪个位置

通过使用边界匹配器,您可以使模式匹配更加精确。例如,也许您对查找特定单词感兴趣,但只有在它出现在行首或行尾时才匹配。或者您想知道匹配是否发生在单词边界上,或者在前一个匹配的末尾。

以下表格列出并解释了所有的边界匹配器。

边界构造描述一行的开头一行的结尾单词边界非单词边界输入的开头前一个匹配的结尾输入的结尾,但不包括最终终止符(如果有)输入的结尾

以下示例演示了边界匹配器和的使用。如上所述,匹配行的开头,匹配行的结尾。

 

第一个示例成功,因为模式占据了整个输入字符串。第二个示例失败,因为输入字符串开头包含额外的空格。第三个示例指定了一个允许无限空格,然后在行尾跟着"dog"的表达式。第四个示例要求"dog"必须出现在一行的开头,后面跟着无限数量的单词字符。

要检查模式是否从单词边界开始和结束(而不是在更长字符串中的子字符串),只需在两侧使用;例如,

 

要在非单词边界上匹配表达式,请使用:

 

要求匹配仅发生在前一个匹配的末尾,请使用:

 

这里第二个示例只找到一个匹配,因为第二次出现的"dog"不是从前一个匹配的末尾开始的。

原文:

到目前为止,我们只使用测试工具来创建对象的最基本形式。本节探讨了一些高级技术,如使用标志创建模式和使用嵌入式标志表达式。它还探讨了一些我们尚未讨论的其他有用方法。

类定义了一个替代的方法,接受一组影响模式匹配方式的标志。标志参数是一个位掩码,可以包括以下任何公共静态字段:

  • 启用规范等价性。当指定此标志时,只有当两个字符的完整规范分解匹配时,它们才被视为匹配。例如,表达式将在指定此标志时匹配字符串。默认情况下,匹配不考虑规范等价性。指定此标志可能会带来性能损失。

  • 启用不区分大小写的匹配。默认情况下,不区分大小写的匹配假定只有在 US-ASCII 字符集中的字符被匹配。通过与此标志一起指定 UNICODE_CASE 标志,可以启用 Unicode 感知的不区分大小写匹配。不区分大小写的匹配也可以通过嵌入式标志表达式启用。指定此标志可能会带来轻微的性能损失。

  • 允许在模式中使用空格和注释。在此模式下,空格被忽略,并且以开头的嵌入式注释被忽略直到行尾。注释模式也可以通过嵌入式标志表达式启用。

  • 启用 dotall 模式。在 dotall 模式下,表达式匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符。Dotall 模式也可以通过嵌入式标志表达式启用。(s 是"single-line"模式的缩写,在 Perl 中称为这种模式。)

  • 启用模式的字面解析。当指定此标志时,指定模式的输入字符串被视为一系列字面字符。输入序列中的元字符或转义序列将不被赋予特殊含义。当与此标志一起使用时, 和 标志在匹配时保留其影响。其他标志变得多余。没有嵌入式标志字符用于启用字面解析。

  • 启用多行模式。在多行模式下,表达式和分别在行终止符之后或之前匹配,或在输入序列的末尾。默认情况下,这些表达式仅在整个输入序列的开头和结尾匹配。多行模式也可以通过嵌入式标志表达式启用。

  • 启用 Unicode 感知大小写折叠。当指定此标志时,大小写不敏感匹配(由标志启用)将按照 Unicode 标准一致的方式进行。默认情况下,大小写不敏感匹配假定只匹配 US-ASCII 字符集中的字符。Unicode 感知大小写折叠也可以通过嵌入式标志表达式启用。指定此标志可能会带来性能损失。

  • 启用 UNIX 行模式。在此模式下,只有行终止符在, , 和的行为中被识别。UNIX 行模式也可以通过嵌入式标志表达式启用。

在以下步骤中,我们将修改测试工具以创建一个具有大小写不敏感匹配的模式。

首先,修改代码以调用的另一个版本:

 

然后编译并运行测试工具以获得以下结果:

 

正如你所看到的,字符串字面量"dog"匹配两个实例,不考虑大小写。要编译带有多个标志的模式,请使用按位 OR 运算符""分隔要包含的标志。为了清晰起见,以下代码示例硬编码正则表达式而不是从中读取:

 

你也可以指定一个变量:

 
 

也可以使用嵌入式标志表达式来启用各种标志。嵌入式标志表达式是的两参数版本的替代方案,并在正则表达式本身中指定。以下示例使用原始测试工具与嵌入式标志表达式来启用大小写不敏感匹配。

 

再次,不管大小写,所有匹配都成功。

对应于的公共可访问字段的嵌入式标志表达式如下表所示:

常量等效的嵌入式标志表达式无无

类定义了一个方便的方法,允许您快速检查给定输入字符串中是否存在模式。与所有公共静态方法一样,您应该通过其类名调用,例如。在这个例子中,该方法返回,因为数字"1"与正则表达式匹配。

方法是一个很好的工具,用于收集与已匹配模式两侧的文本。如下所示,在中,方法可以从字符串""中提取单词"":

 
 

为简单起见,我们匹配了一个字符串字面量,即冒号(),而不是一个复杂的正则表达式。由于我们仍在使用和对象,您可以使用 split 来获取任何正则表达式两侧的文本。这里是相同的示例,,修改为按数字拆分:

 
 
 

您可能也会发现以下方法有些用处:

  • 为指定的返回一个字面模式。此方法生成一个,可用于创建一个,该将匹配,就好像它是一个字面模式。输入序列中的元字符或转义序列将不被赋予特殊含义。

  • 返回此模式的表示。这是编译此模式的正则表达式。

通过几种模仿行为的方法,中也存在正则表达式支持。为方便起见,以下是它们 API 中的关键摘录。

  • : 告诉这个字符串是否与给定的正则表达式匹配。形式为的此方法的调用产生与表达式完全相同的结果。

  • : 将此字符串围绕给定正则表达式的匹配项拆分。形式为的此方法的调用产生与表达式相同的结果。

  • : 将此字符串围绕给定正则表达式的匹配项拆分。此方法的工作方式与使用给定表达式和限制参数为零调用两参数拆分方法相同。结果数组中不包括尾随空字符串。

还有一个替换方法,用另一个替换一个:

  • : 用指定的文字替换序列替换此字符串的每个与字面目标序列匹配的子字符串。替换从字符串的开头到结尾进行,例如,在字符串“aaa”中用“b”替换“aa”将导致“ba”而不是“ab”。

原文:

本节描述了类的一些额外有用的方法。为方便起见,下面列出的方法根据功能进行了分组。

索引方法提供了有用的索引值,精确显示匹配在输入字符串中的位置:

  • : 返回先前匹配的起始索引。

  • : 返回在先前匹配操作期间由给定组捕获的子序列的起始索引。

  • : 返回匹配的最后一个字符后的偏移量。

  • : 返回在先前匹配操作期间由给定组捕获的子序列的最后一个字符后的偏移量。

学习方法审查输入字符串并返回一个布尔值,指示模式是否被找到。

  • : 尝试从区域的开头开始匹配输入序列与模式。

  • : 尝试查找与模式匹配的输入序列的下一个子序列。

  • : 重置此匹配器,然后尝试查找从指定索引开始的输入序列的下一个与模式匹配的子序列。

  • : 尝试将整个区域与模式匹配。

替换方法是用于替换输入字符串中文本的有用方法。

  • : 实现了一个非终端追加和替换步骤。

  • : 实现了一个终端追加和替换步骤。

  • :用给定替换字符串替换与模式匹配的输入序列的每个子序列。

  • :用给定的替换字符串替换与模式匹配的输入序列的第一个子序列。

  • :为指定的返回一个字面替换。此方法生成一个将作为类的方法中的字面替换的。生成的将匹配将视为字面序列处理的字符序列。反斜杠()和美元符号()将不被赋予特殊含义。

这里有一个例子,,它计算输入字符串中单词"dog"出现的次数。

 
 

您可以看到,此示例使用单词边界来确保字母不仅仅是更长单词的子字符串。它还提供了有关匹配发生在输入字符串的哪个位置的一些有用信息。 方法返回在先前匹配操作期间由给定组捕获的子序列的起始索引,而 返回匹配的最后一个字符的索引加一。

和 方法都尝试将输入序列与模式进行匹配。然而,不同之处在于 要求整个输入序列匹配,而 则不需要。这两种方法始终从输入字符串的开头开始。以下是完整代码,:

 
 
 

和 方法替换与给定正则表达式匹配的文本。正如它们的名称所示, 替换第一次出现,而 替换所有出现。以下是 代码:

 
 

在这个第一个版本中,所有 的出现都被替换为 。但为什么要停在这里呢?与其仅替换简单的文字,不如替换与任何正则表达式匹配的文本。该方法的 API 表明,“给定正则表达式,输入,替换字符串为,对该表达式的匹配器调用此方法将产生字符串。”

以下是 代码:

 
 

要仅替换模式的第一次出现,只需调用 而不是 。它接受相同的参数。

类还提供了 和 方法用于文本替换。下面的示例, ,使用这两种方法实现与 相同的效果。

 
 
 

为方便起见, 类也模仿了一些 方法:

  • :用给定的替换内容替换此字符串匹配给定正则表达式的第一个子字符串。形式为 的此方法调用产生的结果与表达式 完全相同。

  • :用给定的替换内容替换此字符串中与给定正则表达式匹配的每个子字符串。形式为 的此方法调用产生的结果与表达式 完全相同。

原文:

是一个未经检查的异常,表示正则表达式模式中的语法错误。类提供以下方法,帮助您确定出了什么问题:

  • : 检索错误的描述。

  • : 检索错误索引。

  • : 检索错误的正则表达式模式。

  • : 返回一个包含语法错误描述、错误索引、错误的正则表达式模式以及模式中错误索引的可视指示的多行字符串。

以下源代码,,更新了我们的测试工具以检查格式不正确的正则表达式:

 

要运行此测试,请将输入为正则表达式。这个错误是程序员在嵌入式标志表达式中忘记开括号的常见情况。这样做将产生以下结果:

 

从这个输出中,我们可以看到语法错误是在索引 0 处的悬空元字符(问号)。缺少的开括号是罪魁祸首。

原文:

从 JDK 7 版本开始,正则表达式模式匹配已扩展功能以支持 Unicode 6.0。

  • 匹配特定代码点

  • Unicode 字符属性

您可以使用形式为的转义序列匹配特定的 Unicode 代码点,其中是您想匹配的代码点的十六进制值。例如,匹配东方的汉字。

或者,您可以使用 Perl 风格的十六进制表示法指定一个代码点,。例如:

 
 

每个 Unicode 字符除了其值之外,还具有某些属性或特性。您可以使用表达式匹配属于特定类别的单个字符。您可以使用表达式匹配属于特定类别的单个字符。

支持的属性类型有脚本、区块和“通用”类别。

脚本

要确定代码点是否属于特定脚本,您可以使用关键字或的简写形式,例如,。或者,您可以在脚本名称前加上字符串,例如。

支持的有效脚本名称是接受的那些。

区块

可以使用关键字或的简写形式指定一个区块,例如,。或者,您可以在区块名称前加上字符串,例如。

支持的有效区块名称是接受的那些。

通用类别

类别可以用可选前缀指定。例如,匹配 Unicode 字母的类别。类别也可以通过使用关键字或简写形式来指定。例如,大写字母可以使用或来匹配。

支持的类别是由类指定的Unicode 标准版本中的类别。

原文:

现在您已经完成了关于正则表达式的这节课,您可能会发现您的主要参考资料将是以下类的 API 文档:、和。

对于正则表达式构造的行为更精确的描述,我们建议阅读 Jeffrey E. F. Friedl 的书籍精通正则表达式

原文:

  1. 包中有哪三个公共类?描述每个类的目的。

  2. 考虑字符串字面值。起始索引是多少?结束索引是多少?解释这些数字的含义。

  3. 普通字符和元字符之间有什么区别?举例说明。

  4. 如何让一个元字符表现得像一个普通字符?

  5. 一组字符被方括号括起来叫什么?它的作用是什么?

  6. 这里有三个预定义的字符类:、和。描述每一个,并使用方括号重写它们。

  7. 对于每个、和,写出两个简单的表达式,匹配相反的字符集。

  8. 考虑正则表达式。识别两个子表达式。这个表达式匹配什么字符串?

  1. 使用反向引用编写一个表达式,只有当一个人的名字和姓氏相同时才匹配该人的名字。

检查你的答案。

原文:

Java 富互联网应用程序(RIA)是具有类似桌面应用程序特征的应用程序,但是通过互联网部署。Java RIA 可以作为 Java 小程序或 Java Web Start 应用程序开发和部署。

  • 小程序 - Java 小程序在浏览器环境中运行。Java 插件软件控制 Java 小程序的执行和生命周期。

  • Java Web Start 应用程序 - Java Web Start 应用程序首次通过浏览器启动。随后可以通过桌面快捷方式启动。一旦下载了 Java Web Start 应用程序并且用户接受了其安全证书,它的行为几乎像一个独立的应用程序。

在过去,决定将 Java 富互联网应用程序作为小程序在浏览器内部部署,还是作为 Java Web Start 应用程序在浏览器外部部署,可能会显著影响应用程序的设计。有了最新的 Java 插件,这个决定变得简单多了。

传统上,应用程序在 方法中构建其用户界面,包括顶级 。这种编程风格阻碍了应用程序在浏览器中的重新部署,因为它假定应用程序创建自己的 。在浏览器中作为小程序运行时,小程序是应该容纳应用程序用户界面的顶级容器。不需要顶级 。

在设计 Java 富互联网应用程序时,请使用基于组件的架构。尝试将其功能组织成一个或多个可以组合在一起的组件。在这种情况下,“组件”一词指的是 AWT 类的子类、Swing 类或另一个子类的 GUI 元素。例如,您可以有一个顶级 ,其中包含其他 UI 组件(如更多嵌套的 JPanels 和文本字段、组合框等)。通过这种设计,将核心功能部署为小程序或 Java Web Start 应用程序变得相对容易。

要部署为 Java 小程序,只需将核心功能封装在 或 中,并添加必要的浏览器特定功能。要部署为 Java Web Start 应用程序,请将功能封装在 中。

富互联网应用程序决策指南包含详细信息,帮助您决定将代码部署为 Java 小程序还是 Java Web Start 应用程序。

自包含应用程序提供了一种部署选项,不需要浏览器。用户在本地安装您的应用程序,并类似于本机应用程序运行它。自包含应用程序包括运行应用程序所需的 JRE,因此用户始终拥有正确的 JRE。

本教程讨论了 RIA 和自包含应用程序的开发和部署。请查看新功能,了解客户端 Java 运行时环境(JRE)软件各个版本引入的功能。

支持工具

原文:

本课程讨论了 Java 小程序的基础知识,如何开发与环境交互丰富的小程序,以及如何部署小程序。

Java 小程序是一种特殊类型的 Java 程序,可以由启用了 Java 技术的浏览器从互联网上下载并运行。小程序通常嵌入在网页中,并在浏览器的上下文中运行。小程序必须是 类的子类。 类提供了小程序与浏览器环境之间的标准接口。

Swing 提供了 类的一个特殊子类,名为 。应该使用 类来构建使用 Swing 组件构建其图形用户界面(GUI)的所有小程序。

浏览器的 Java 插件软件管理小程序的生命周期。

使用 Web 服务器来测试本课程中的示例。不建议使用本地小程序,当 Java 控制面板中的安全级别设置为高或非常高时,本地小程序将被阻止。


注意: 要运行小程序,请在 Microsoft Edge 上使用 IE 模式。请参阅Microsoft Edge + Internet Explorer mode: Getting Started guide。



注意: 请确保您的客户端机器上至少安装了Java SE Development Kit (JDK) 6 update 10版本,然后再继续。您将需要此版本才能查看示例丰富的互联网应用程序并在不中断的情况下阅读后续章节。


原文:

接下来展示的 HelloWorld 小程序是一个显示字符串"Hello World"的 Java 类。

//<![CDATA[ var attributes = { code:‘HelloWorld.class’, archive:‘examples/dist/applet_HelloWorld/applet_HelloWorld.jar’, width:150, height:30} ; var parameters = { permissions:‘sandbox’ } ; deployJava.runApplet(attributes, parameters, ‘1.4’); //]]>


注意: 如果你看不到示例运行,可能需要在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


以下是 HelloWorld 小程序的源代码:

 

这样的小程序通常由浏览器中的Java 插件软件管理和运行。

下载源代码以进一步进行实验。

原文:

每个 Java 小程序都必须定义或类的子类。在 Hello World 小程序中,这个子类被称为。以下是类的源代码。

 

Java applets inherit significant functionality from the or class, including the capabilities to communicate with the browser and present a graphical user interface (GUI) to the user.

一个将使用来自 Swing(Java 的 GUI 工具包)的 GUI 组件的小程序应该扩展基类,它提供了与 Swing 的 GUI 设施最佳集成。

提供了一个根窗格,它与 Swing 的和组件具有相同的顶层组件结构,而只提供了一个基本面板。有关如何使用此功能的更多详细信息,请参见如何使用根窗格。

一个小程序可以扩展类,当它不使用 Swing 的 GUI 组件时。

原文:

类为小程序执行提供了一个框架,定义了系统在里程碑发生时调用的方法。里程碑是小程序生命周期中的重要事件。大多数小程序会覆盖其中一些或全部方法以适当地响应里程碑。

方法适用于不需要太长时间的一次性初始化。方法通常包含通常放在构造函数中的代码。小程序通常没有构造函数的原因是在调用其方法之前不能保证其具有完整的环境。保持方法简短,以便您的小程序可以快速加载。

每个在初始化后执行任务(除了直接响应用户操作)的小程序必须覆盖方法。方法启动小程序的执行。从方法快速返回是一个良好的实践。如果需要执行计算密集型操作,最好为此目的启动一个新线程。

大多数覆盖方法的小程序也应该覆盖方法。方法应该暂停小程序的执行,这样当用户不查看小程序页面时,它就不会占用系统资源。例如,显示动画的小程序在用户不查看时应该停止尝试绘制动画。

许多小程序不需要覆盖方法,因为它们的方法(在之前调用)将执行关闭小程序执行所需的所有任务。但是,方法适用于需要释放额外资源的小程序。


注意: 尽量保持方法的实现尽可能简短,因为不能保证该方法会完全执行。在长方法完成之前,Java 虚拟机可能会退出。


原文:

小程序可以对以下重大事件做出反应:

  • 它可以初始化自身。

  • 它可以开始运行。

  • 它可以停止运行。

  • 它可以执行最终清理,为即将卸载做准备。

本节介绍了一个新的小程序,它使用了所有这些方法。与 Java 应用程序不同,小程序不需要实现方法。

这是小程序。

//<![CDATA[ var attributes = { code:‘Simple.class’, archive:‘examples/dist/applet_Simple/applet_Simple.jar’, width:500, height:20} ; var parameters = { permissions:‘sandbox’ } ; deployJava.runApplet(attributes, parameters, ‘1.4’); //]]>


注意: 如果您看不到示例运行,请确保在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


以下是小程序的源代码。该小程序在其生命周期中遇到重要里程碑时会显示描述性字符串,例如当用户首次访问包含小程序的页面时。

 

注意: 在此示例中, 类被扩展,而不是 Swing 类,因为 Swing 组件不需要添加到此小程序中。


由于小程序被加载,您应该看到文本“初始化…启动…”。小程序加载时,会发生以下情况:

  • 创建小程序控制类的一个实例(子类)。

  • 小程序初始化自身。

  • 小程序开始运行。

当用户离开页面,例如前往另一页时,浏览器会停止并销毁小程序。小程序的状态不会被保留。当用户返回页面时,浏览器会初始化并启动小程序的新实例。

当您刷新或重新加载浏览器页面时,当前小程序实例会被停止和销毁,并创建一个新实例。

当用户退出浏览器时,小程序有机会在浏览器退出之前停止自身并执行最终清理。

下载源代码以进一步实验Simple 小程序示例。

原文:

Java applet 在浏览器的上下文中运行。浏览器中的 Java 插件软件控制 Java applet 的启动和执行。浏览器还有一个 JavaScript 解释器,用于运行网页上的 JavaScript 代码。本主题描述了 Java 平台标准版 6 更新 10 中发布的 Java 插件软件的行为。

Java 插件软件为每个 Java applet 创建一个工作线程。它在 Java Runtime Environment (JRE)软件的一个实例中启动 applet。通常,所有 applet 在同一个 JRE 实例中运行。Java 插件软件在以下情况下启动新的 JRE 实例:

  • 当 applet 请求在特定版本的 JRE 中执行时。

  • 当 applet 指定自己的 JRE 启动参数时,例如堆大小。如果新 applet 的要求是现有 JRE 的子集,则新 applet 使用现有 JRE,否则启动新的 JRE 实例。

如果满足以下条件,applet 将在现有 JRE 中运行:

  • applet 所需的 JRE 版本与现有的 JRE 匹配。

  • JRE 的启动参数满足 applet 的要求。

以下图表显示了 applet 在 JRE 中的执行方式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Java applet 可以调用网页中存在的 JavaScript 函数。JavaScript 函数也允许调用同一网页上嵌入的 applet 的方法。Java 插件软件和 JavaScript 解释器协调 Java 代码到 JavaScript 代码的调用以及 JavaScript 代码到 Java 代码的调用。

Java 插件软件是多线程的,而 JavaScript 解释器在单个线程上运行。因此,为了避免线程相关问题,特别是当多个 applet 同时运行时,请保持 Java 代码和 JavaScript 代码之间的调用简短,并尽量避免往返。查看以下主题以了解 Java 代码和 JavaScript 代码之间的交互更多信息:

  • 从 Applet 调用 JavaScript 代码

  • 从 JavaScript 代码调用 Applet 方法

原文:

使用基于组件的架构设计的应用程序可以开发为 Java applet。考虑具有基于 Swing 的图形用户界面(GUI)的 Java applet 的示例。通过组件化设计,GUI 可以使用更小的构建块或组件构建。以下是用于创建 applet GUI 的一般步骤:

  • 创建一个名为的类,它是的子类。在类的构造函数中布置您的 applet 的 GUI 组件。

  • 创建一个名为的类,它是的子类。

  • 在的方法中,实例化并将其设置为 applet 的内容窗格。

以下部分通过使用动态树演示 applet 更详细地探讨这些步骤。如果您对 Swing 不熟悉,请参阅使用 Swing 创建 GUI 以了解更多关于使用 Swing GUI 组件的信息。

//<![CDATA[ var attributes = { code:‘appletComponentArch.DynamicTreeApplet.class’, archive:‘examples/dist/applet_ComponentArch_DynamicTreeDemo/DynamicTreeDemo.jar’, width:300, height:300} ; var parameters = {jnlp_href: ‘examples/dist/applet_ComponentArch_DynamicTreeDemo/dynamictree_applet.jnlp’} ; deployJava.runApplet(attributes, parameters, ‘1.4’); //]]>


注意: 如果您看不到示例运行,请确保在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


创建一个是子类的类。这个顶部充当所有其他 UI 组件的容器。在下面的示例中,类是最顶层的。类的构造函数调用其他方法来正确创建和布局 UI 控件。

 
 

对于具有基于 Swing 的 GUI 的 Java applet,请创建一个类,它是的子类。不包含基于 Swing 的 GUI 的 applet 可以扩展类。

覆盖 applet 的方法以实例化您的顶部类并创建 applet 的 GUI。类的方法在 AWT 事件分发线程中调用方法。

 
 

另一种创建 applet 的方法是只需移除抽象层(单独的顶部)并在 applet 的方法中布置所有控件。直接在 applet 中创建 GUI 的缺点是,如果以后选择将功能部署为 Java Web Start 应用程序,则现在将更难部署您的功能。

在动态树演示示例中,核心功能位于类中。现在,将类放入并部署为 Java Web Start 应用程序变得轻而易举。

因此,为了保持可移植性并保持部署选项开放,请按照本页描述的基于组件的设计。

下载源代码以进一步实验动态树演示程序示例。

译文:

要部署您的 Java applet,首先编译源代码,将其打包为 JAR 文件,并对 JAR 文件进行签名。

Java applet 可以以两种方式启动。

  • 您可以使用 Java 网络启动协议(JNLP)启动您的 applet。使用 JNLP 启动的 applet 可以访问强大的 JNLP API 和扩展。

  • 或者,您可以通过直接在 applet 标记中指定 applet 的启动属性来启动 applet。然而,这种部署 applet 的旧方法对 applet 施加了严格的安全限制。

部署工具包脚本包含可用于在网页中部署 applet 的有用 JavaScript 函数。

如果您对这些部署技术不熟悉,请在继续之前查看 深入部署 课程。

以下是一些逐步说明,用于打包和部署您的 applet。Dynamic Tree Demo applet 用于说明 applet 的部署。您可能希望设置构建脚本来执行以下一些步骤。

//<![CDATA[ var attributes = { code:‘appletComponentArch.DynamicTreeApplet.class’, archive:‘examples/dist/applet_ComponentArch_DynamicTreeDemo/DynamicTreeDemo.jar’, width:300, height:300} ; var parameters = {jnlp_href: ‘examples/dist/applet_ComponentArch_DynamicTreeDemo/dynamictree_applet.jnlp’} ; deployJava.runApplet(attributes, parameters, ‘1.7’); //]]>


注意: 如果您看不到示例运行,请确保在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


  1. 编译您的 applet 的 Java 代码,并确保所有类文件和资源(如图像)位于单独的目录中。

    在 DynamicTree Demo applet 的情况下,编译后的类文件将放置在 目录中。

  2. 创建一个包含您的 applet 需要的任何 JAR 文件清单属性的文本文件。

    对于 DynamicTree Demo applet,创建一个名为 的文件在 目录中,并添加 、 和 属性。该 applet 不需要访问用户系统资源,因此对于权限使用 。对于代码库,使用您将加载示例的域,例如 。将以下属性添加到 文件中。

     

    其他清单属性可用于限制 applet 仅使用受信任的代码,并为需要在特权 Java 代码和沙箱 Java 代码之间进行调用,或者具有调用 applet 的 JavaScript 代码的 applet 提供安全性。请参阅 使用清单属性增强安全性 课程以了解更多可用的清单属性。

  3. 创建一个包含您 applet 的类文件和资源的 JAR 文件。在您之前创建的 文件中包含清单属性。

    例如,以下命令将创建一个 JAR 文件,其中包含 目录中的类文件和 目录中的清单文件。

     

    参阅 在 JAR 文件中打包程序 课程,了解有关创建和使用 JAR 文件的更多信息。

  4. 为您的 applet 签署 JAR 文件并为签名加上时间戳。使用由受信任的证书颁发机构颁发的有效的当前代码签名证书,向用户提供确保可以安全运行 applet 的保证。

    请参阅 签署 JAR 文件 课程以获取更多信息。

    如果您想要使用签名的 JNLP 文件以确保安全性,请按照下一步中描述的方式创建 JNLP 文件,并在签名 JAR 文件之前将其包含在 JAR 文件中。有关详细信息,请参阅 Java 平台标准版部署指南中的 签名的 JNLP 文件。

  5. 创建描述您的 applet 应如何启动的 JNLP 文件。

    这是用于启动动态树演示 applet 的 JNLP 文件。

    的源代码如下:

     

    请注意,JNLP 文件中不存在请求额外权限的安全元素,因此 applet 仅在安全沙箱中运行。

    主题,JNLP 文件的结构,描述了 JNLP 文件的语法和选项。

  6. 创建将显示 applet 的 HTML 页面。调用部署工具包函数以部署 applet。

    在我们的示例中,动态树演示 applet 部署在 中。

     
  7. 将 applet 的 JAR 文件、JNLP 文件和 HTML 页面放置在适当的文件夹中。

    对于此示例,请将 、 和 放置在本地计算机或 Web 服务器上的同一目录中。建议使用 Web 服务器。要从本地计算机运行,必须将应用程序添加到例外站点列表中,该列表可从 Java 控制面板的安全选项卡中管理。

  8. 在浏览器中打开 applet 的 HTML 页面以查看 applet。在提示时同意运行 applet。检查 Java 控制台日志以查看错误和调试消息。

下载源代码 以进一步尝试 动态树演示 applet 示例。

原文:

如果您不确定最终用户的浏览器是否启用了 JavaScript 解释器,您可以通过手动编码 HTML 标签来部署您的 Java applet,而不是使用 Deployment Toolkit 函数。根据您需要支持的浏览器,您可能需要使用 或 HTML 标签来部署您的 Java applet。查看W3C HTML 规范以获取有关这些标签的使用详情。

您可以使用 Java 网络启动协议(JNLP)启动您的 applet,或者直接在 标签中指定启动属性。

按照部署 applet 主题中描述的步骤编译您的源代码,创建并签名 JAR 文件,如有必要创建 JNLP 文件。部署的整体步骤仍然相关。只有包含 applet 的 HTML 页面的内容会发生变化。

页面使用手动编码的 标签部署了 Dynamic Tree Demo applet(意味着该 applet 不是使用自动生成所需 HTML 的 Deployment Toolkit 部署的)。该 applet 仍然使用 JNLP 启动。JNLP 文件在 属性中指定。

 
 

使用 JNLP 是部署 applet 的首选方式,但您也可以在没有 JNLP 文件的情况下部署您的 applet。

部署了 Dynamic Tree Demo applet,如下面的代码片段所示。

 

其中

  • 是 applet 类的名称。

  • 是包含 applet 及其资源的 jar 文件的名称。

  • 是 applet 的宽度。

  • 是 applet 的高度。

  • 表示 applet 是否在安全沙箱中运行。将值指定为"sandbox"以在沙箱中运行。将值指定为"all-permissions"以在沙箱外运行。如果未提供 参数,则签名的 applet 默认为"all-permissions",未签名的 applet 默认为"sandbox"。

原文:

Java 小程序 API 使您能够充分利用小程序与浏览器之间的密切关系。该 API 由类和接口提供。小程序执行架构使小程序能够与其环境交互,从而产生丰富的用户体验。小程序可以操纵其父网页,与网页中的 JavaScript 代码交互,查找在同一网页中运行的其他小程序等等。

探索 Java 小程序的高级功能在后续主题中。

有关常见小程序和 Java Web 启动应用程序的高级主题的进一步信息,请参阅使用 Java 丰富互联网应用程序做更多事情(例如设置参数和属性,使用 Java 网络启动协议 API)。

原文:

每当 Java applet 需要从指定了相对 URL 的文件加载数据(指定了文件位置但不完全指定的 URL),applet 通常使用代码库或文档库来形成完整的 URL。

由 的 方法返回的代码库是一个 URL,指定了 applet 的类加载的目录。对于本地部署的 applet, 方法返回 null。

由 的 方法返回的文档库指定包含 applet 的 HTML 页面的目录。对于本地部署的 applet, 方法返回 null。

除非 标签指定了代码库,否则代码库和文档库都指向同一服务器上的同一目录。

applet 可能需要的数据,或者需要依赖的备份数据,通常相对于代码库指定。通常由 applet 开发人员指定的数据,通常通过使用参数指定,通常相对于文档库指定。


**注意:**出于安全原因,浏览器限制了不受信任的 applet 可以读取的 URL。例如,大多数浏览器不允许不受信任的 applet 使用 “…” 访问代码库或文档库上面的目录。此外,由于不受信任的 applet 不能读取除了位于 applet 源主机上的文件之外的文件,因此如果文档和不受信任的 applet 位于不同的服务器上,则文档库通常是无用的。


类定义了方便的图像加载和声音加载方法,使您能够相对于基本 URL 指定图像和声音。例如,假设 applet 设置为以下图中显示的其中一个目录结构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

要创建一个使用 下的 图像文件的 对象,applet 可以使用以下代码:

 
 

原文:

参数对于 Java applet 就像命令行参数对于应用程序一样重要。它们使用户能够自定义 applet 的操作。通过定义参数,你可以增加 applet 的灵活性,使其在多种情况下工作而无需重新编码和重新编译。

你可以在 applet 的 Java 网络启动协议(JNLP)文件或 标签的 元素中指定 applet 的输入参数。通常最好在 applet 的 JNLP 文件中指定参数,这样即使 applet 部署在多个网页上,参数也可以一致提供。如果 applet 的参数会因网页而异,则应在 标签的 元素中指定参数。

如果你对 JNLP 不熟悉,请查看 Java 网络启动协议 主题获取更多信息。

考虑一个需要三个参数的 applet。 和 参数在 applet 的 JNLP 文件中指定,。

 

参数在传递给部署工具包脚本的 函数的 变量中指定在 。

 

查看 部署 Applet 获取有关 函数的更多信息。

你可以使用 类的 方法来检索 applet 的输入参数。 applet 检索并显示其所有输入参数(, 和 )。

 

下面显示了 applet。

//<![CDATA[ var attributes = { code:‘AppletTakesParams.class’, archive:‘examples/dist/applet_AppletWithParameters/applet_AppletWithParameters.jar’, width:800, height:50} ; var parameters = { jnlp_href: ‘examples/dist/applet_AppletWithParameters/applettakesparams.jnlp’, paramOutsideJNLPFile: ‘fooOutsideJNLP’ }; deployJava.runApplet(attributes, parameters, ‘1.6’); //]]>


注意: 如果你看不到 applet 运行,你需要安装至少 Java SE Development Kit (JDK) 6 update 10 版本。



注意: 如果你看不到示例运行,可能需要在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


下载源代码 以进一步进行实验。

原文:

所有浏览器都允许 Java applets 显示一个简短的状态字符串。页面上的所有 Java applets 以及浏览器本身共享同一状态行。

永远不要将关键信息放在状态行中。如果许多用户可能需要该信息,请在 applet 区域内显示该信息。如果只有少数精通的用户可能需要该信息,请考虑将信息发送到标准输出(参见将诊断信息写入标准输出和错误流)。

状态行通常不太显眼,并且可能被其他 applets 或浏览器覆盖。因此,最好将其用于偶发的、短暂的信息。例如,一个加载多个图像文件的 applet 可能会显示当前正在加载的图像文件的名称。

Applets 使用方法显示状态行,该方法从类继承到类。

这里是其使用示例:

 

注意: 不要在状态行中放置滚动文本。浏览器用户会觉得这种行为非常恼人。


原文:

一个 Java 小程序可以使用 类中的 方法在浏览器窗口中加载网页。

以下是 的两种形式:

 

的单参数形式简单地指示浏览器显示指定 URL 的文档,而不指定显示文档的窗口。

的双参数形式允许您指定显示文档的窗口或 HTML 框架。第二个参数可以有以下值之一:

  • – 在一个新的、无名称的窗口中显示文档。

  • – 在名为 windowName 的窗口中显示文档。如有必要,将创建此窗口。

  • – 在包含小程序的窗口和框架中显示文档。

  • – 在小程序框架的父框架中显示文档。如果小程序框架没有父框架,则与 相同。

  • – 在顶层框架中显示文档。如果小程序框架是顶层框架,则与 相同。


注意: 在这个讨论中,frame 指的不是一个 Swing ,而是浏览器窗口内的 HTML 框架。


以下小程序使您可以尝试 两种形式的每个参数。该小程序打开一个窗口,让您输入 URL 并选择 参数的选项。当您按下 Return 键或点击显示文档按钮时,小程序调用 。

//<![CDATA[ var attributes = { code:‘ShowDocument.class’, archive:‘examples/dist/applet_ShowDocument/applet_ShowDocument.jar’, width:200, height:30} ; var parameters = { permissions:‘sandbox’ } ; deployJava.runApplet(attributes, parameters, ‘1.4’); //]]>


注意: 如果您看不到示例运行,可能需要在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


以下是调用 的小程序代码。这是整个程序,。

 

下载源代码 以进一步尝试 Show Document 示例。

原文:

Java 小程序可以调用与小程序在同一网页中的 JavaScript 函数。LiveConnect 规范描述了 JavaScript 代码如何与 Java 代码通信的详细信息。

类使 Java 小程序能够检索对 JavaScript 对象的引用并与网页交互。接下来描述的数据摘要小程序调用 JavaScript 代码从网页中检索信息,并将数据摘要写回网页。

假设您有一个带有几个 JavaScript 函数的网页。示例具有用于检索年龄、地址和电话号码的 JavaScript 函数。还有一个名为的变量,一开始没有值。

 

接下来,考虑一个名为的小程序类。类执行以下操作。

  • 调用的方法将变量设置为"John Doe"。

  • 检索年龄、地址和电话号码,并构建包含这些数据摘要的字符串。

  • 调用 JavaScript 函数将摘要写回网页。

该小程序首先需要按以下方式检索对的引用:

 

将前述语句放入 try…catch…块中以处理。

现在,小程序已经有了对的引用,它可以通过的和方法调用相关的 JavaScript 函数。

 

要编译具有对包中类的引用的 Java 代码,请在类路径中包含。在运行时,Java 插件软件会自动使这些类对小程序可用。

数据摘要小程序在网页上显示以下结果:

 

在浏览器中打开以查看数据摘要小程序。


注意: 如果您看不到小程序运行,请安装至少Java SE Development Kit (JDK) 6 update 10版本。



注意: 如果您看不到示例运行,请确保在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


下载源代码以进一步实验从小程序调用 JavaScript 代码示例。

原文:

网页上的 JavaScript 代码可以与嵌入在页面上的 Java applet 进行交互。JavaScript 代码可以执行以下操作:

  • 调用 Java 对象上的方法

  • 获取并设置 Java 对象中的字段

  • 获取和设置 Java 数组元素

LiveConnect 规范描述了 JavaScript 代码如何与 Java 代码通信的详细信息。

当 JavaScript 代码调用 Java applet 时,会显示安全警告。要抑制这些警告,需要在 JAR 文件清单中添加属性。指定允许调用 applet 的 JavaScript 代码的位置。有关属性的信息,请参阅安全的 JAR 文件清单属性。

本主题探讨了使用 Math applet 示例进行 JavaScript 代码到 Java applet 通信。类和支持的类提供了一组公共方法和变量。网页上的 JavaScript 代码调用和评估这些公共成员以传递数据并检索计算结果。

这是类的源代码。方法返回辅助类的引用。

 

类中的方法允许用户设置两个值,相加数字,并在范围内检索数字。

 

类的方法返回当前日期。

 
 

在网页中部署 applet,。部署 applet 时,请确保为 applet 指定一个 id。稍后将使用 applet id 获取对 applet 对象的引用。

 

接下来,在网页中添加一些 JavaScript 代码。JavaScript 代码可以使用 applet id 作为对 applet 对象的引用,并调用 applet 的方法。在下面的示例中,JavaScript 代码设置了 applet 的公共成员变量,调用了公共方法,并检索了由 applet 引用的另一个对象()的引用。JavaScript 代码能够处理基本类型、数组和对象返回类型。

 

当数字 a = 0 和 b = 5 时,Math applet 在网页上显示以下结果:

 

在浏览器中打开以查看数学小程序。


注意: 如果您看不到小程序运行,请至少安装Java SE 开发工具包(JDK)6 更新 10版本。



注意: 如果您看不到示例运行,请确保在浏览器中启用 JavaScript 解释器,以便部署工具包脚本能够正常运行。


检查由 JavaScript 代码调用的小程序所受到的安全限制。

下载源代码以进一步进行实验的通过 JavaScript 代码调用小程序方法示例。

编程小号
上一篇 2025-02-05 21:11
下一篇 2025-03-08 17:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/46850.html