diff --git a/docs/10.md b/docs/10.md index 319e10bc1ae9a55569e42740ab2d77c20ebf57f0..478cac6e523ecdc15149450166fedb348e8139df 100644 --- a/docs/10.md +++ b/docs/10.md @@ -104,7 +104,7 @@ java MyApp arg1 arg2 ``` -数组中的每个字符串称为 _ 命令行参数 _。命令行参数允许用户影响应用程序的操作,而无需重新编译它。例如,排序程序可能允许用户使用此命令行参数指定数据按降序排序: +数组中的每个字符串称为*命令行参数*。命令行参数允许用户影响应用程序的操作,而无需重新编译它。例如,排序程序可能允许用户使用此命令行参数指定数据按降序排序: ```java -descending diff --git a/docs/1000.md b/docs/1000.md index 862aec56408948dbebbd491f3e3d2a8ae841ec70..7fedced63525c09306c8c9196b3d4eccf7a93a13 100644 --- a/docs/1000.md +++ b/docs/1000.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/ops/filter.html](https://docs.oracle.com/javase/tutorial/jndi/ops/filter.html) -除了使用一组属性指定搜索外,您还可以以 _ 搜索过滤器 _ 的形式指定搜索。搜索过滤器是以逻辑表达式的形式表示的搜索查询。 [`DirContext.search()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-javax.naming.Name-java.lang.String-javax.naming.directory.SearchControls-) 接受的搜索过滤器的语法在 [RFC 2254](http://www.ietf.org/rfc/rfc2254.txt) 中描述。 +除了使用一组属性指定搜索外,您还可以以*搜索过滤器*的形式指定搜索。搜索过滤器是以逻辑表达式的形式表示的搜索查询。 [`DirContext.search()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-javax.naming.Name-java.lang.String-javax.naming.directory.SearchControls-) 接受的搜索过滤器的语法在 [RFC 2254](http://www.ietf.org/rfc/rfc2254.txt) 中描述。 以下搜索过滤器指定限定条目必须具有`“sn”`属性,其值为`“Geisel”`和`“mail”`属性,具有任何值: @@ -58,9 +58,9 @@ value: +1 408 555 5252 | 符号 | 描述 | | --- | --- | -| &安培; | 连接(即 _ 和 _ - 列表中的所有内容必须为 true) | -| | | 析取(即 _ 或 _ - 一个或多个替代必须为真) | -| ! | 否定(即 _ 而不是 _ - 被否定的项目不得为真) | +| &安培; | 连接(即*和 _ - 列表中的所有内容必须为 true) | +| | | 析取(即*或 _ - 一个或多个替代必须为真) | +| ! | 否定(即*而不是 _ - 被否定的项目不得为真) | | = | 相等(根据属性的匹配规则) | | 〜= | 近似相等(根据属性的匹配规则) | | > = | 大于(根据属性的匹配规则) | diff --git a/docs/1001.md b/docs/1001.md index bff309942e474878064ae2974b43d08ca8525857..ad918950e0dd94c491d789d7b9b6d5c928ba8860 100644 --- a/docs/1001.md +++ b/docs/1001.md @@ -4,7 +4,7 @@ 默认 [`SearchControls`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchControls.html)指定在指定的上下文中执行搜索( [`SearchControls.ONELEVEL_SCOPE`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchControls.html#ONELEVEL_SCOPE))。此默认值用于[搜索过滤器部分](filter.html)的示例中。 -除此默认值外,您还可以指定在 _ 整个子树 _ 中执行搜索,或仅在命名对象中执行搜索。 +除此默认值外,您还可以指定在*整个子树*中执行搜索,或仅在命名对象中执行搜索。 搜索整个子树搜索命名对象及其所有后代。要使搜索以这种方式运行,请将 [`SearchControls.SUBTREE_SCOPE`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchControls.html#SUBTREE_SCOPE)传递给 [`SearchControls.setSearchScope()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchControls.html#setSearchScope-int-) ,如下所示。 diff --git a/docs/1004.md b/docs/1004.md index 3166d51e16b1ed46f2ee986b1ec2d33b8acf9e74..4204f39fe06cec452cf88602248b8f045c11b653 100644 --- a/docs/1004.md +++ b/docs/1004.md @@ -19,19 +19,19 @@ 。 -_ 原因 _:您没有指定要用于初始上下文的实现。具体来说, [`Context.INITIAL_CONTEXT_FACTORY`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#INITIAL_CONTEXT_FACTORY)环境属性未设置为将创建初始上下文的工厂的类名。或者,您没有向程序提供由`Context.INITIAL_CONTEXT_FACTORY`命名的服务提供者的类。 +_ 原因*:您没有指定要用于初始上下文的实现。具体来说, [`Context.INITIAL_CONTEXT_FACTORY`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#INITIAL_CONTEXT_FACTORY)环境属性未设置为将创建初始上下文的工厂的类名。或者,您没有向程序提供由`Context.INITIAL_CONTEXT_FACTORY`命名的服务提供者的类。 -_ 解决方案 _:将`Context.INITIAL_CONTEXT_FACTORY`环境属性设置为您正在使用的初始上下文实现的类名。有关详细信息,请参见[配置](index.html)部分。 +_ 解决方案*:将`Context.INITIAL_CONTEXT_FACTORY`环境属性设置为您正在使用的初始上下文实现的类名。有关详细信息,请参见[配置](index.html)部分。 如果设置了属性,那么确保类名没有错误输入,并且命名的类可用于您的程序(在其类路径中或安装在`jre / lib / ext`目录中 JRE)。 包括 LDAP,COS 命名,DNS 和 RMI 注册表的服务供应器。必须安装所有其他服务供应器并将其添加到执行环境中。 -_ 原因 _:服务器不提供由`Context.PROVIDER_URL`环境属性标识的服务器和端口。也许某人已禁用或关闭运行服务器的计算机。或者,您可能错误输入了服务器的名称或端口号。 +_ 原因*:服务器不提供由`Context.PROVIDER_URL`环境属性标识的服务器和端口。也许某人已禁用或关闭运行服务器的计算机。或者,您可能错误输入了服务器的名称或端口号。 -_ 解决方案 _:检查该端口上是否确实有服务器正在运行,并在必要时重新启动服务器。执行此检查的方式取决于您使用的 LDAP 服务器。通常,可以使用管理控制台或工具来管理服务器。您可以使用该工具验证服务器的状态。 +_ 解决方案*:检查该端口上是否确实有服务器正在运行,并在必要时重新启动服务器。执行此检查的方式取决于您使用的 LDAP 服务器。通常,可以使用管理控制台或工具来管理服务器。您可以使用该工具验证服务器的状态。 -_ 原因 _:服务器不响应 LDAP v3 连接请求。某些服务器(尤其是公共服务器)无法正确响应 LDAP v3,忽略请求而不是拒绝它们。此外,某些 LDAP v3 服务器在处理 Oracle 的 LDAP 服务供应器自动发送的控件时遇到问题,并且通常会返回特定于服务器的故障代码。 +_ 原因*:服务器不响应 LDAP v3 连接请求。某些服务器(尤其是公共服务器)无法正确响应 LDAP v3,忽略请求而不是拒绝它们。此外,某些 LDAP v3 服务器在处理 Oracle 的 LDAP 服务供应器自动发送的控件时遇到问题,并且通常会返回特定于服务器的故障代码。 -_ 解决方案 _。尝试将环境属性`“java.naming.ldap.version”`设置为`“2”`。默认情况下,LDAP 服务供应器尝试使用 LDAP v3 连接到 LDAP 服务器;如果失败,则使用 LDAP v2。如果服务器静默忽略 v3 请求,则供应器将假定请求有效。要解决此类服务器,必须显式设置协议版本以确保服务器的正确行为。 +_ 解决方案*。尝试将环境属性`“java.naming.ldap.version”`设置为`“2”`。默认情况下,LDAP 服务供应器尝试使用 LDAP v3 连接到 LDAP 服务器;如果失败,则使用 LDAP v2。如果服务器静默忽略 v3 请求,则供应器将假定请求有效。要解决此类服务器,必须显式设置协议版本以确保服务器的正确行为。 如果服务器是 v3 服务器,则在创建初始上下文之前尝试设置以下环境属性: @@ -42,13 +42,13 @@ env.put(Context.REFERRAL, "throw"); 这将关闭 LDAP 供应器自动发送的控件。 (有关详细信息,请查看 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/referral/index.html)。) -_ 原因 _:如果您尝试执行会产生太多结果或需要服务器检查太多的搜索,某些服务器(尤其是公共服务器)将不会响应(即使是否定答案)条目以生成答案。这些服务器试图限制它们在每个请求的基础上花费的资源量。 +_ 原因*:如果您尝试执行会产生太多结果或需要服务器检查太多的搜索,某些服务器(尤其是公共服务器)将不会响应(即使是否定答案)条目以生成答案。这些服务器试图限制它们在每个请求的基础上花费的资源量。 或者,您尝试对不支持它的服务器/端口使用安全套接字层(SSL),反之亦然(也就是说,您尝试使用普通套接字与 SSL 端口通信)。 最后,由于负载过重或者由于某种原因根本没有响应,服务器要么响应得非常慢。 -_ 解决方案 _:如果您的程序因服务器试图限制其资源的使用而挂起,请使用将返回单个结果或仅返回少量结果的查询重试您的请求。这将帮助您确定服务器是否处于活动状态。如果是,那么您可以扩大初始查询并重新提交。 +_ 解决方案*:如果您的程序因服务器试图限制其资源的使用而挂起,请使用将返回单个结果或仅返回少量结果的查询重试您的请求。这将帮助您确定服务器是否处于活动状态。如果是,那么您可以扩大初始查询并重新提交。 如果您的程序由于 SSL 问题而挂起,那么您需要确定该端口是否为 SSL 端口,然后适当地设置 [`Context.SECURITY_PROTOCOL`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#SECURITY_PROTOCOL)环境属性。如果端口是 SSL 端口,则此属性应设置为`“ssl”`。如果它不是 SSL 端口,则不应设置此属性。 @@ -60,26 +60,26 @@ _ 解决方案 _:如果您的程序因服务器试图限制其资源的使用 。 -_ 原因 _:初始化 LDAP 的初始上下文时,提供了根区别的名称。例如,如果将初始上下文的`Context.PROVIDER_URL`环境属性设置为`“ldap:// ldapserver:389 / o = JNDITutorial”`,并随后提供名称,如`“cn = Joe,c = us”`,然后传递给 LDAP 服务的全名是`“cn = Joe,c = us,o = JNDITutorial”`。如果这确实是您想要的名称,那么您应该检查您的服务器以确保它包含这样的条目。 +_ 原因*:初始化 LDAP 的初始上下文时,提供了根区别的名称。例如,如果将初始上下文的`Context.PROVIDER_URL`环境属性设置为`“ldap:// ldapserver:389 / o = JNDITutorial”`,并随后提供名称,如`“cn = Joe,c = us”`,然后传递给 LDAP 服务的全名是`“cn = Joe,c = us,o = JNDITutorial”`。如果这确实是您想要的名称,那么您应该检查您的服务器以确保它包含这样的条目。 此外,如果您提供不正确的可分辨名称以进行身份​​验证,Oracle Directory Server 将返回此错误。例如,如果将 [`Context.SECURITY_PRINCIPAL`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#SECURITY_PRINCIPAL)环境属性设置为`,则 LDAP 供应器将抛出 [`NameNotFoundException`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameNotFoundException.html)“cn = Admin,o =教程“`和`”cn = Admin,o = Tutorial“`不是 LDAP 服务器上的条目。实际返回的 Oracle Directory Server 的正确错误应该是与身份验证相关的内容,而不是“找不到名称”。 -_ 解决方案 _:验证您提供的名称是服务器上存在的条目的名称。您可以通过列出条目的父上下文或使用其他工具(如目录服务器的管理控制台)来执行此操作。 +_ 解决方案*:验证您提供的名称是服务器上存在的条目的名称。您可以通过列出条目的父上下文或使用其他工具(如目录服务器的管理控制台)来执行此操作。 * * * 以下是尝试部署使用 JNDI 类的 applet 时可能遇到的一些问题。 -_ 原因 _:您的 applet 未签名,因此它只能连接到加载它的机器。或者,如果 applet 已签名,则浏览器尚未授予 applet 连接到目录服务器计算机的权限。 +_ 原因*:您的 applet 未签名,因此它只能连接到加载它的机器。或者,如果 applet 已签名,则浏览器尚未授予 applet 连接到目录服务器计算机的权限。 -_ 解决方案 _:如果你想允许 applet 连接到在任意机器上运行的目录服务器,那么你需要你的 applet _ 和 _ 签署所有 JNDI 您的 applet 将使用的 JAR。有关签名 jar 的信息,请参阅[签名和验证 JAR 文件](../../deployment/jar/signindex.html)。 +_ 解决方案*:如果你想允许 applet 连接到在任意机器上运行的目录服务器,那么你需要你的 applet _ 和*签署所有 JNDI 您的 applet 将使用的 JAR。有关签名 jar 的信息,请参阅[签名和验证 JAR 文件](../../deployment/jar/signindex.html)。 -_ 原因 _:Web 浏览器限制对系统属性的访问,如果您尝试读取它们,则抛出`SecurityException` 。 +_ 原因*:Web 浏览器限制对系统属性的访问,如果您尝试读取它们,则抛出`SecurityException` 。 -_ 解决方案 _:如果您需要获取 applet 的输入,请尝试使用 applet params。 +_ 解决方案*:如果您需要获取 applet 的输入,请尝试使用 applet params。 -_ 原因 _:Firefox 禁止访问`java.security`软件包。 LDAP 供应器使用`java.security.MessageDigest`提供的消息摘要功能来实现 CRAM-MD5。 +_ 原因*:Firefox 禁止访问`java.security`软件包。 LDAP 供应器使用`java.security.MessageDigest`提供的消息摘要功能来实现 CRAM-MD5。 -_ 解决方案 _:使用 Java Plug-in。 +_ 解决方案*:使用 Java Plug-in。 * * * \ No newline at end of file diff --git a/docs/1005.md b/docs/1005.md index 4105e8bec2bf871f45eaa1f4055f1d255e864b8b..cbca58fe279148d09ba289f73fca542996df8fc8 100644 --- a/docs/1005.md +++ b/docs/1005.md @@ -6,9 +6,9 @@ ## LDAP -X.500 是目录服务的 CCITT 标准,是 OSI 服务套件的一部分。 X.500 标准定义了一个协议(以及其他),以便客户端应用程序访问称为 _ 目录访问协议 _(DAP)的 X.500 目录。它位于开放系统互连(OSI)协议栈之上。 +X.500 是目录服务的 CCITT 标准,是 OSI 服务套件的一部分。 X.500 标准定义了一个协议(以及其他),以便客户端应用程序访问称为*目录访问协议*(DAP)的 X.500 目录。它位于开放系统互连(OSI)协议栈之上。 -互联网社区认识到需要类似 X.500 的服务,但面对不同的底层网络基础设施(TCP / IP 而不是 OSI),设计了一种基于 X.500 DAP 协议的新协议,称为 _Lightweight_ DAP 或 LDAP。 [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) 定义了现在称为 _ 版本 3_ 的 LDAP(或 LDAP v3),它是 [RFC 1777](http://www.ietf.org/rfc/rfc1777.txt) 中指定的其前身 LDAP v2 的改进版本。 +互联网社区认识到需要类似 X.500 的服务,但面对不同的底层网络基础设施(TCP / IP 而不是 OSI),设计了一种基于 X.500 DAP 协议的新协议,称为 _Lightweight_ DAP 或 LDAP。 [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) 定义了现在称为*版本 3_ 的 LDAP(或 LDAP v3),它是 [RFC 1777](http://www.ietf.org/rfc/rfc1777.txt) 中指定的其前身 LDAP v2 的改进版本。 LDAP 的目标是一个可以轻松实现的协议,特别注重能够构建小而简单的客户端。它试图实现简化的一种方法是使用大量字符串并尽可能减少结构的使用。例如,DN 在协议中表示为字符串,属性类型名称和许多属性值也是如此。 @@ -16,4 +16,4 @@ LDAP 的目标是一个可以轻松实现的协议,特别注重能够构建小 由于专注于客户端,LDAP 社区还定义了 DN 的字符串表示( [RFC 2553](http://www.ietf.org/rfc/rfc2553.txt) ),搜索过滤器( [RFC 1960](http://www.ietf.org/rfc/rfc1960.txt) )和属性语法([)的标准。 RFC 1778](http://www.ietf.org/rfc/rfc1778.txt) ),用于基于 C 语言的 API( [RFC 1823](http://www.ietf.org/rfc/rfc1823.txt) ),以及用于访问 LDAP 服务的 URL 格式( [RFC 1959](http://www.ietf.org/rfc/rfc1959.txt) )。 -LDAP v3 支持国际化,各种身份验证机制,引用和通用部署机制。它允许将新功能添加到协议中,而无需通过使用 _ 扩展 _ 和 _ 控件 _ 来更改协议。 \ No newline at end of file +LDAP v3 支持国际化,各种身份验证机制,引用和通用部署机制。它允许将新功能添加到协议中,而无需通过使用*扩展*和*控件*来更改协议。 \ No newline at end of file diff --git a/docs/1006.md b/docs/1006.md index fdb6a14160fd23c41612ec98f8ac70e133af4653..fbaa07c71e8e1d6f24a7ea6dd825713edf1bfc60 100644 --- a/docs/1006.md +++ b/docs/1006.md @@ -14,7 +14,7 @@ ## 介绍人 -_ 推荐 _ 是服务器发送回客户端的信息,指示可以在另一个位置(可能在另一个服务器处)找到所请求的信息。在 LDAP v2 中,服务器应该处理引用而不是将它们返回给客户端。这是因为处理引用可能非常复杂,因此会导致更复杂的客户端。在构建和部署服务器时,发现引用很有用,但没有多少服务器支持服务器端引用处理。因此,我们找到了一种方法来改进协议以允许它返回引用。这是通过将引用置于“部分结果”错误响应的错误消息内部来完成的。 +_ 推荐*是服务器发送回客户端的信息,指示可以在另一个位置(可能在另一个服务器处)找到所请求的信息。在 LDAP v2 中,服务器应该处理引用而不是将它们返回给客户端。这是因为处理引用可能非常复杂,因此会导致更复杂的客户端。在构建和部署服务器时,发现引用很有用,但没有多少服务器支持服务器端引用处理。因此,我们找到了一种方法来改进协议以允许它返回引用。这是通过将引用置于“部分结果”错误响应的错误消息内部来完成的。 LDAP v3 明确支持引用,并允许服务器将引用直接返回给客户端。本课不会介绍推荐,但您可以随时参考 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/referral/index.html)来管理应用程序中的推荐。 @@ -22,18 +22,18 @@ LDAP v3 明确支持引用,并允许服务器将引用直接返回给客户端 诸如 LDAP 之类的通用协议对于确保所有目录客户端和服务器“使用相同的语言”非常有用。当在网络中部署许多不同的目录客户端应用程序和目录服务器时,对于所有这些实体来说,讨论相同的对象也非常有用。 -_ 目录模式 _ 指定了目录可能具有的对象类型以及每种类型的对象可能具有的强制和可选属性。 LDAP v3 定义了基于 X.500 标准的模式( [RFC 2252](http://www.ietf.org/rfc/rfc2252.txt) 和 [RFC 2256](http://www.ietf.org/rfc/rfc2256.txt) ),用于网络中的常见对象,例如国家,地区,组织,用户/人员,团体和设备。它还为客户端应用程序定义了一种访问服务器模式的方法,以便它可以找出特定服务器支持的对象类型和属性。 +_ 目录模式*指定了目录可能具有的对象类型以及每种类型的对象可能具有的强制和可选属性。 LDAP v3 定义了基于 X.500 标准的模式( [RFC 2252](http://www.ietf.org/rfc/rfc2252.txt) 和 [RFC 2256](http://www.ietf.org/rfc/rfc2256.txt) ),用于网络中的常见对象,例如国家,地区,组织,用户/人员,团体和设备。它还为客户端应用程序定义了一种访问服务器模式的方法,以便它可以找出特定服务器支持的对象类型和属性。 LDAP v3 进一步定义了一组用于表示属性值的语法( [RFC 2252](http://www.ietf.org/rfc/rfc2252.txt) )。要编写需要访问模式的 Java 应用程序,请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/schema/index.html)。 ## 扩展 -除了预定义操作的所有操作(例如“搜索”和“修改”)之外,LDAP v3 还定义了 _“扩展”操作 _。 “扩展”操作将请求作为参数并返回响应。该请求包含标识请求和请求参数的标识符。响应包含执行请求的结果。这对“扩展”操作请求/响应称为 _ 扩展 _。例如,Start TLS 可以有一个扩展,它是客户端向服务器请求激活 Start TLS 协议的请求。 +除了预定义操作的所有操作(例如“搜索”和“修改”)之外,LDAP v3 还定义了*“扩展”操作*。 “扩展”操作将请求作为参数并返回响应。该请求包含标识请求和请求参数的标识符。响应包含执行请求的结果。这对“扩展”操作请求/响应称为*扩展*。例如,Start TLS 可以有一个扩展,它是客户端向服务器请求激活 Start TLS 协议的请求。 这些扩展可以是标准的(由 LDAP 社区定义)或专有的(由特定目录供应商定义)。有关编写需要使用 Extensions 的应用程序,请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/ext/index.html)。 ## 控制 -添加新功能的另一种方法是使用 _ 控件 _。 LDAP v3 允许通过使用控件修改任何操作的行为。可以与操作一起发送任意数量的控件,并且可以返回任何数量的控件及其结果。例如,您可以发送排序控件以及“搜索”操作,该操作告诉服务器根据`“名称”`属性对搜索结果进行排序。 +添加新功能的另一种方法是使用*控件*。 LDAP v3 允许通过使用控件修改任何操作的行为。可以与操作一起发送任意数量的控件,并且可以返回任何数量的控件及其结果。例如,您可以发送排序控件以及“搜索”操作,该操作告诉服务器根据`“名称”`属性对搜索结果进行排序。 与扩展类似,此类控件可以是标准的或专有的。标准控件在[平台](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/Control.html)中提供。有关编写需要使用控件的应用程序,请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/ext/index.html)。 \ No newline at end of file diff --git a/docs/1007.md b/docs/1007.md index e91e6d6f87e90d7e8fdfb582bb6d0bf7e81da18d..dc97ab77506ea9b2adab1ecea1c904cf206f08b4 100644 --- a/docs/1007.md +++ b/docs/1007.md @@ -26,6 +26,6 @@ cn=Vinnie Ryan, ou=People, o=JNDITutorial ``` -但是,在 JNDI 中,名称始终是 _ 相对 _;也就是说,您总是相对于上下文命名对象。例如,您可以将条目`“cn = Vinnie Ryan”`命名为相对于名为`“ou = People,o = JNDITutorial”`的上下文。或者你可以命名条目`“cn = Vinnie Ryan,ou = People”`相对于名为`“o = JNDITutorial”`的上下文。或者,您可以创建指向 LDAP 服务器命名空间根目录的初始上下文,并将条目命名为`“cn = Vinnie Ryan,ou = People,o = JNDITutorial”`。 +但是,在 JNDI 中,名称始终是*相对 _;也就是说,您总是相对于上下文命名对象。例如,您可以将条目`“cn = Vinnie Ryan”`命名为相对于名为`“ou = People,o = JNDITutorial”`的上下文。或者你可以命名条目`“cn = Vinnie Ryan,ou = People”`相对于名为`“o = JNDITutorial”`的上下文。或者,您可以创建指向 LDAP 服务器命名空间根目录的初始上下文,并将条目命名为`“cn = Vinnie Ryan,ou = People,o = JNDITutorial”`。 在 JNDI 中,您还可以使用 LDAP URL 命名 LDAP 条目。请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/misc/url.html)中的 LDAP URL 讨论。 \ No newline at end of file diff --git a/docs/101.md b/docs/101.md index 57bbbe3e17d74fd76f30ad09549dfa5295353b38..f5045b74d06bd0f675784478cd9a628cfced8735 100644 --- a/docs/101.md +++ b/docs/101.md @@ -11,7 +11,7 @@ byte mask = 0xff; ``` -但是,有理由使用对象代替基元,Java 平台为每种基本数据类型提供 _ 包装器 _ 类。这些类将对象“包装”在对象中。通常,包装是由编译器完成的 - 如果你使用一个需要一个对象的原始,编译器 _ 就会在你的包装类中为 _ 包装原始。类似地,如果在期望基元时使用数字对象,编译器 _ 会为您取消 _ 对象。有关更多信息,请参阅 [Autoboxing 和 Unboxing](autoboxing.html) +但是,有理由使用对象代替基元,Java 平台为每种基本数据类型提供*包装器*类。这些类将对象“包装”在对象中。通常,包装是由编译器完成的 - 如果你使用一个需要一个对象的原始,编译器*就会在你的包装类中为*包装原始。类似地,如果在期望基元时使用数字对象,编译器*会为您取消*对象。有关更多信息,请参阅 [Autoboxing 和 Unboxing](autoboxing.html) 所有数字包装类都是抽象类`Number`的子类: diff --git a/docs/1010.md b/docs/1010.md index 4a8c2d8ab1e52635e39ea8745ee2e6cb3e902e19..60d2f632bcdc0e9c02c7e92b2922549663811167 100644 --- a/docs/1010.md +++ b/docs/1010.md @@ -4,7 +4,7 @@ LDAP 服务提供通用目录服务。它可以用来存储各种信息。所有 LDAP 服务器都有一些系统用于控制谁可以读取和更新目录中的信息。 -要访问 LDAP 服务,LDAP 客户端首先必须 _ 向服务验证 _ 本身。也就是说,它必须告诉 LDAP 服务器谁将访问数据,以便服务器可以决定允许客户端查看和执行的操作。如果客户端成功验证 LDAP 服务器,则当服务器随后从客户端收到请求时,它将检查是否允许客户端执行请求。该过程称为 _ 访问控制 _。 +要访问 LDAP 服务,LDAP 客户端首先必须*向服务验证*本身。也就是说,它必须告诉 LDAP 服务器谁将访问数据,以便服务器可以决定允许客户端查看和执行的操作。如果客户端成功验证 LDAP 服务器,则当服务器随后从客户端收到请求时,它将检查是否允许客户端执行请求。该过程称为*访问控制*。 LDAP 标准提出了 LDAP 客户端可以对 LDAP 服务器进行身份验证的方法( [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) 和 [RFC 2829](http://www.ietf.org/rfc/rfc2829.txt) )。这些在 [LDAP 认证部分](authentication.html)和[认证机制部分](auth_mechs.html)中进行了一般性讨论。本课程还包含如何使用[匿名](anonymous.html),[简单](simple.html)和 [SASL](sasl.html) 认证机制的说明。 diff --git a/docs/1011.md b/docs/1011.md index e88d3c9a3823eab51dbd6464291d3d62bf8233bf..d2211266074756a23f051a1f4a537a0caf822066 100644 --- a/docs/1011.md +++ b/docs/1011.md @@ -4,9 +4,9 @@ 在 LDAP 中,身份验证信息在“绑定”操作中提供。在 LDAP v2 中,客户端通过向服务器发送包含身份验证信息的“绑定”操作来启动与 LDAP 服务器的连接。 -在 LDAP v3 中,此操作用于相同的目的,但它是可选的。发送 LDAP 请求而不执行“绑定”的客户端被视为 _ 匿名 _ 客户端(有关详细信息,请参阅[匿名](anonymous.html)部分)。在 LDAP v3 中,“绑定”操作可以在连接期间的任何时间发送,可能不止一次。客户端可以在连接中间发送“绑定”请求以更改其标识。如果请求成功,则丢弃在连接上使用旧标识的所有未完成请求,并且连接与新标识关联。 +在 LDAP v3 中,此操作用于相同的目的,但它是可选的。发送 LDAP 请求而不执行“绑定”的客户端被视为*匿名*客户端(有关详细信息,请参阅[匿名](anonymous.html)部分)。在 LDAP v3 中,“绑定”操作可以在连接期间的任何时间发送,可能不止一次。客户端可以在连接中间发送“绑定”请求以更改其标识。如果请求成功,则丢弃在连接上使用旧标识的所有未完成请求,并且连接与新标识关联。 -“绑定”操作中提供的认证信息取决于客户端选择的 _ 认证机制 _。有关身份验证机制的讨论,请参阅[身份验证机制](auth_mechs.html)。 +“绑定”操作中提供的认证信息取决于客户端选择的*认证机制*。有关身份验证机制的讨论,请参阅[身份验证机制](auth_mechs.html)。 ## 使用 JNDI 对 LDAP 进行身份验证 diff --git a/docs/1013.md b/docs/1013.md index b3ae4479a8fe9329082403ba3165ee633b5079db..800572e7247014ab5bc25f088f32b99d7c228634 100644 --- a/docs/1013.md +++ b/docs/1013.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/ldap/anonymous.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/anonymous.html) -如上所述,如果未设置认证环境属性,则默认认证机制为`“无”`。如果客户端将 [`Context.SECURITY_AUTHENTICATION`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#SECURITY_AUTHENTICATION)环境属性设置为`“无”`,则认证机制为`“无”`和所有其他身份验证环境属性被忽略。您可能希望仅显式执行此操作,以确保忽略可能已设置的任何其他身份验证属性。在任何一种情况下,客户端都将被视为 _ 匿名 _ 客户端。这意味着服务器不知道或不关心客户端是谁,并且将允许客户端访问(读取和更新)任何已配置为可由任何未经身份验证的客户端访问的数据。 +如上所述,如果未设置认证环境属性,则默认认证机制为`“无”`。如果客户端将 [`Context.SECURITY_AUTHENTICATION`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#SECURITY_AUTHENTICATION)环境属性设置为`“无”`,则认证机制为`“无”`和所有其他身份验证环境属性被忽略。您可能希望仅显式执行此操作,以确保忽略可能已设置的任何其他身份验证属性。在任何一种情况下,客户端都将被视为*匿名*客户端。这意味着服务器不知道或不关心客户端是谁,并且将允许客户端访问(读取和更新)任何已配置为可由任何未经身份验证的客户端访问的数据。 由于[命名和目录操作](../ops/index.html)课程中的任何目录示例都没有设置任何身份验证环境属性,因此所有这些都使用匿名身份验证。 diff --git a/docs/1014.md b/docs/1014.md index bfa84587d76d328ff6117513f59ce49a6902692d..052ef7d48b1f5a035d6cf6978aa2e3a8601b9f88 100644 --- a/docs/1014.md +++ b/docs/1014.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/ldap/simple.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/simple.html) -_ 简单 _ 认证包括向 LDAP 服务器发送客户端(用户)的完全限定 DN 和客户端的明文密码(参见 [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) 和 [RFC 2829](http://www.ietf.org/rfc/rfc2829.txt) )。此机制存在安全问题,因为可以从网络读取密码。为避免以这种方式暴露密码,您可以在加密通道(如 SSL)中使用简单身份验证机制,前提是 LDAP 服务器支持此功能。 +_ 简单*认证包括向 LDAP 服务器发送客户端(用户)的完全限定 DN 和客户端的明文密码(参见 [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) 和 [RFC 2829](http://www.ietf.org/rfc/rfc2829.txt) )。此机制存在安全问题,因为可以从网络读取密码。为避免以这种方式暴露密码,您可以在加密通道(如 SSL)中使用简单身份验证机制,前提是 LDAP 服务器支持此功能。 LDAP v2 和 v3 都支持简单身份验证。 diff --git a/docs/1015.md b/docs/1015.md index a0442d1bd4de9e632765c6e1e3172cee02e31984..ec3c12655aac155afab1158d15fcc0c097ecfbf6 100644 --- a/docs/1015.md +++ b/docs/1015.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/ldap/sasl.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/sasl.html) -LDAP v3 协议使用 [SASL](http://www.ietf.org/rfc/rfc2222.txt) 来支持 _ 可插拔 _ 身份验证。这意味着 LDAP 客户端和服务器可以配置为协商并使用可能的非标准和/或自定义机制进行身份验证,具体取决于客户端和服务器所需的保护级别。 LDAP v2 协议不支持 SASL。 +LDAP v3 协议使用 [SASL](http://www.ietf.org/rfc/rfc2222.txt) 来支持*可插拔*身份验证。这意味着 LDAP 客户端和服务器可以配置为协商并使用可能的非标准和/或自定义机制进行身份验证,具体取决于客户端和服务器所需的保护级别。 LDAP v2 协议不支持 SASL。 目前定义了几种 SASL 机制: @@ -72,4 +72,4 @@ env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5 GSSAPI"); [Digest-MD5 示例](digest.html)显示如何使用`Context.SECURITY_PRINCIPAL`和`Context.SECURITY_CREDENTIALS`属性进行 Digest-MD5 身份验证。 -如果机制需要输入而不是已经描述的那些,那么你需要为要使用的机制定义 _ 回调 _ 对象,你可以查看 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/callback.html)中的回调示例。本课程的下一部分将讨论如何使用 SASL Digest-MD5 身份验证机制。 JNDI 教程中介绍了 [SASL 策略](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/sasl.html), [GSS API(Kerberos v5)](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/gssapi.html)和 [CRAM-MD5](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/crammd5.html) 机制。 \ No newline at end of file +如果机制需要输入而不是已经描述的那些,那么你需要为要使用的机制定义*回调*对象,你可以查看 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/callback.html)中的回调示例。本课程的下一部分将讨论如何使用 SASL Digest-MD5 身份验证机制。 JNDI 教程中介绍了 [SASL 策略](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/sasl.html), [GSS API(Kerberos v5)](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/gssapi.html)和 [CRAM-MD5](https://docs.oracle.com/javase/jndi/tutorial/ldap/security/crammd5.html) 机制。 \ No newline at end of file diff --git a/docs/1016.md b/docs/1016.md index 18fb2c2dde6c525f5291e4139106d08e9f402581..d7b07f7c1b1080089ab2b243d14abc70db796bc2 100644 --- a/docs/1016.md +++ b/docs/1016.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/ldap/digest.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/digest.html) -_Digest-MD5 身份验证 _ 是 LDAP v3 服务器( [RFC 2829](http://www.ietf.org/rfc/rfc2829.txt) )所需的身份验证机制。由于 SASL 的使用是 LDAP v3( [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) )的一部分,因此仅支持 LDAP v2 的服务器不支持 Digest-MD5。 +_Digest-MD5 身份验证*是 LDAP v3 服务器( [RFC 2829](http://www.ietf.org/rfc/rfc2829.txt) )所需的身份验证机制。由于 SASL 的使用是 LDAP v3( [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) )的一部分,因此仅支持 LDAP v2 的服务器不支持 Digest-MD5。 Digest-MD5 机制在 [RFC 2831](http://www.ietf.org/rfc/rfc2831.txt) 中描述。它基于 HTTP 摘要认证( [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) )。在 Digest-MD5 中,LDAP 服务器将包含其愿意支持的各种身份验证选项的数据以及特殊令牌发送到 LDAP 客户端。客户端通过发送加密响应来响应,该响应指示它已选择的身份验证选项。响应以这样的方式加密,以证明客户端知道其密码。然后,LDAP 服务器解密并验证客户端的响应。 @@ -49,7 +49,7 @@ DirContext ctx = new InitialDirContext(env); ## 指定域 -_ 域 _ 定义名称空间,从中选择认证实体( `Context.SECURITY_PRINCIPAL`属性的值))。服务器可能有多个域。例如,大学的服务器可能被配置为具有两个域,一个用于其学生用户,另一个用于教师用户。域配置由目录管理员完成。某些目录具有默认的单个域。例如,Oracle Directory Server v5.2 使用计算机的标准主机名作为默认域。 +_ 域*定义名称空间,从中选择认证实体( `Context.SECURITY_PRINCIPAL`属性的值))。服务器可能有多个域。例如,大学的服务器可能被配置为具有两个域,一个用于其学生用户,另一个用于教师用户。域配置由目录管理员完成。某些目录具有默认的单个域。例如,Oracle Directory Server v5.2 使用计算机的标准主机名作为默认域。 在 Digest-MD5 身份验证中,您必须对特定域进行身份验证。您可以使用以下身份验证环境属性来指定域。如果未指定域,则将使用服务器提供的任何域。 diff --git a/docs/1017.md b/docs/1017.md index 24fec234009c5d25ba79fd842e9aa3056d96607c..2ee7c19a1753c44d2e04584a598a671a08a00ebd 100644 --- a/docs/1017.md +++ b/docs/1017.md @@ -54,7 +54,7 @@ DirContext ctx = new InitialDirContext(env); * * * -**注意:**如果您使用 SSL 连接到 _ 而不是 _ 的端口上的服务器使用 SSL,那么您的程序将挂起。同样,如果您使用普通套接字连接到服务器的 SSL 套接字,那么您的应用程序将挂起。这是 SSL 协议的特征。 +**注意:**如果您使用 SSL 连接到*而不是*的端口上的服务器使用 SSL,那么您的程序将挂起。同样,如果您使用普通套接字连接到服务器的 SSL 套接字,那么您的应用程序将挂起。这是 SSL 协议的特征。 * * * diff --git a/docs/1019.md b/docs/1019.md index aa03d16a69e42a3885d9d3531f3ad8dc6e148c5e..3f693600cf7a0de6ed58a9d0f29724b479552610 100644 --- a/docs/1019.md +++ b/docs/1019.md @@ -9,7 +9,7 @@ LDAP“比较”操作允许客户端询问服务器命名条目是否具有属 * [`搜索(名称,字符串过滤器,SearchControls ctls)`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-javax.naming.Name-java.lang.String-javax.naming.directory.SearchControls-) * [`搜索(名称名称,String filterExpr,Object [] filterArgs,SearchControls ctls)`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-javax.naming.Name-java.lang.String-java.lang.Object:A-javax.naming.directory.SearchControls-) -1. 过滤器必须是“(_ 名称 _ = _ 值 _)”的形式。你不能使用外卡。 +1. 过滤器必须是“(*名称 _ = _ 值*)”的形式。你不能使用外卡。 2. 搜索范围必须是 [`SearchControls.OBJECT_SCOPE`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchControls.html#OBJECT_SCOPE)。 3. 您必须请求不返回任何属性。如果不满足这些条件,则这些方法将使用 LDAP“搜索”操作而不是 LDAP“比较”操作。 diff --git a/docs/102.md b/docs/102.md index 03770b1e2ccce09a167971513e847e4e4a0c1e70..6206a67965aeebdf09150328a6b476b80f9b1290 100644 --- a/docs/102.md +++ b/docs/102.md @@ -29,9 +29,9 @@ System.out.format("The value of " + "the float variable is " + ``` -第一个参数`format`是一个格式字符串,指定如何格式化第二个参数`args`中的对象。格式字符串包含纯文本以及 _ 格式说明符 _,它们是格式化`Object... args`参数的特殊字符。 (符号`Object... args`称为 _varargs_ ,这意味着参数的数量可能会有所不同。) +第一个参数`format`是一个格式字符串,指定如何格式化第二个参数`args`中的对象。格式字符串包含纯文本以及*格式说明符*,它们是格式化`Object... args`参数的特殊字符。 (符号`Object... args`称为 _varargs_ ,这意味着参数的数量可能会有所不同。) -格式说明符以百分号(%)开头,以 _ 转换器 _ 结束。转换器是一个字符,指示要格式化的参数类型。在百分号(%)和转换器之间,您可以使用可选的标志和说明符。有许多转换器,标志和说明符,在 [`java.util.Formatter`](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html) 中有记录 +格式说明符以百分号(%)开头,以*转换器*结束。转换器是一个字符,指示要格式化的参数类型。在百分号(%)和转换器之间,您可以使用可选的标志和说明符。有许多转换器,标志和说明符,在 [`java.util.Formatter`](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html) 中有记录 这是一个基本的例子: diff --git a/docs/1020.md b/docs/1020.md index 36301748b20421942b77ada5c15e6d9e44dd9e48..6bb79d6be2ba935bf3ec0d85e6c1b313d20513c6 100644 --- a/docs/1020.md +++ b/docs/1020.md @@ -9,7 +9,7 @@ * [类名称](#CLASS) * [属性](#ATTRS) -每个`SearchResult`都包含满足搜索过滤器的 LDAP 条目的名称。您可以使用 [`getName()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html#getName--) 获取条目的名称。该方法将[条目 _ 相对 _ 的 [`复合名称`](https://docs.oracle.com/javase/8/docs/api/javax/naming/CompositeName.html) 返回到 _ 目标上下文 _。目标上下文是`名称`参数解析的上下文。在 LDAP 用语中,目标上下文是搜索的 _ 基础对象 _。这是一个例子。 +每个`SearchResult`都包含满足搜索过滤器的 LDAP 条目的名称。您可以使用 [`getName()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html#getName--) 获取条目的名称。该方法将[条目*相对*的 [`复合名称`](https://docs.oracle.com/javase/8/docs/api/javax/naming/CompositeName.html) 返回到*目标上下文*。目标上下文是`名称`参数解析的上下文。在 LDAP 用语中,目标上下文是搜索的*基础对象*。这是一个例子。 ```java NamingEnumeration answer = ctx.search("ou=NewHires", diff --git a/docs/1021.md b/docs/1021.md index 69b410f31079bcaf89e70da75b54363253ae6690..7f68e476ae975d23d5463ffcc7b38149b0a3e6d9 100644 --- a/docs/1021.md +++ b/docs/1021.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/ldap/unsol.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/unsol.html) -LDAP v3( [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) )定义 _ 未经请求的通知 _,该消息由 LDAP 服务器发送到客户端,而不会从客户端进行任何激发。未经请求的通知由 [`UnsolicitedNotification`](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/UnsolicitedNotification.html)接口在 JNDI 中表示。 +LDAP v3( [RFC 2251](http://www.ietf.org/rfc/rfc2251.txt) )定义*未经请求的通知*,该消息由 LDAP 服务器发送到客户端,而不会从客户端进行任何激发。未经请求的通知由 [`UnsolicitedNotification`](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/UnsolicitedNotification.html)接口在 JNDI 中表示。 由于服务器异步发送未经请求的通知,因此您可以使用相同的[事件模型](https://docs.oracle.com/javase/jndi/tutorial/beyond/event/index.html)来接收有关命名空间更改和对象内容更改的通知。您通过注册 [`UnsolicitedNotificationListener`](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/UnsolicitedNotificationListener.html)与 [`EventContext`](https://docs.oracle.com/javase/8/docs/api/javax/naming/event/EventContext.html)或 [`EventDirContext`注册接收未经请求的通知的兴趣 HTG13]。](https://docs.oracle.com/javase/8/docs/api/javax/naming/event/EventDirContext.html) diff --git a/docs/1025.md b/docs/1025.md index f50b68f745d776463ddb99efe96036a66c98d8f5..a2e69f09d63c0d7b890ff94877dd58744c870abd 100644 --- a/docs/1025.md +++ b/docs/1025.md @@ -4,7 +4,7 @@ 创建连接时描述[连接创建](create.html)部分。它描述了几个`Context`实例如何共享同一个连接。 -LDAP 服务提供商支持的另一种连接共享称为 _ 连接池 _。在这种类型的共享中,LDAP 服务提供者维护一个(可能)先前使用的连接池,并根据需要将它们分配给`Context`实例。当`Context`实例完成连接(关闭或垃圾收集)时,连接将返回到池中以供将来使用。请注意,这种共享形式是顺序的:从池中检索连接,使用,返回到池,然后再从池中检索另一个`Context`实例。 +LDAP 服务提供商支持的另一种连接共享称为*连接池*。在这种类型的共享中,LDAP 服务提供者维护一个(可能)先前使用的连接池,并根据需要将它们分配给`Context`实例。当`Context`实例完成连接(关闭或垃圾收集)时,连接将返回到池中以供将来使用。请注意,这种共享形式是顺序的:从池中检索连接,使用,返回到池,然后再从池中检索另一个`Context`实例。 每个 Java 运行时系统都维护连接池。在某些情况下,连接池可以显着提高性能。例如,如果使用连接池,则只需要一个连接来处理包含对同一 LDAP 服务器的四个引用引用的搜索响应。如果没有连接池,这种情况将需要四个单独的连接。 @@ -61,7 +61,7 @@ Release com.sun.jndi.ldap.LdapClient@5d173 ``` -您可以通过包含或省略`“com.sun.jndi.ldap.connect.pool”`属性来决定何时何地使用池,从而控制 _ 每个上下文 _ 的池化基础。在前面的示例中,如果在创建第二个初始上下文之前从环境属性中删除了此属性,则第二个初始上下文将不使用池化连接。 +您可以通过包含或省略`“com.sun.jndi.ldap.connect.pool”`属性来决定何时何地使用池,从而控制*每个上下文*的池化基础。在前面的示例中,如果在创建第二个初始上下文之前从环境属性中删除了此属性,则第二个初始上下文将不使用池化连接。 LDAP 供应器通过应用程序的指示跟踪是否正在使用连接。它假定维护打开的上下文句柄的应用程序正在使用该连接。因此,为了使 LDAP 供应器能够正确管理池化连接,您必须努力在不再需要的上下文中调用`Context.close()`。 diff --git a/docs/1026.md b/docs/1026.md index 2cdcf41600c5caf9137b24f9d216b212d93d1e25..604eecf179027e7fd290ecd34f1bce8dd8264000 100644 --- a/docs/1026.md +++ b/docs/1026.md @@ -4,7 +4,7 @@ 每个 Java 运行时配置和维护连接池。不在不同的运行时间之间共享连接。要使用连接池,不需要进行任何配置。仅当您要自定义池的完成方式时才需要进行配置,例如控制池的大小以及池的连接类型。 -您可以在程序启动时使用许多系统属性来配置连接池。请注意,这些是系统属性,_ 而不是 _ 环境属性,它们会影响所有连接池请求。 +您可以在程序启动时使用许多系统属性来配置连接池。请注意,这些是系统属性,*而不是*环境属性,它们会影响所有连接池请求。 下面是一个命令行示例,它将最大池大小设置为 20,将首选池大小设置为 10,将池空连接的空闲超时设置为分钟。 @@ -36,7 +36,7 @@ ## 如何连接连接 -当`Context`实例请求使用池连接时,LDAP 供应器需要确定现有池连接是否可以满足请求。它通过为每个池化连接分配 _ 连接标识 _ 并检查传入请求是否具有与其池化连接之一相同的连接标识来实现此目的。 +当`Context`实例请求使用池连接时,LDAP 供应器需要确定现有池连接是否可以满足请求。它通过为每个池化连接分配*连接标识*并检查传入请求是否具有与其池化连接之一相同的连接标识来实现此目的。 连接标识是创建可能经过身份验证的 LDAP 连接所需的参数集。其组成取决于请求的身份验证类型,如下表所示。 @@ -97,11 +97,11 @@ LDAP 供应器维护连接池;每个池保存具有相同连接标识的连接(使用中或空闲)。有三种尺寸会影响每个池的管理。这些大小是全局的,会影响所有池。 -_ 初始池大小 _ 是 LDAP 服务供应器在首次创建池时创建的每个连接标识的连接数(对应于应用程序首次请求该连接标识的池连接时)。在使用连接时,按需执行池中每个连接的身份验证。默认情况下,初始池大小为 1,可以使用系统属性`“com.sun.jndi.ldap.connect.pool.initsize”`进行更改。它通常在应用程序启动时使用,以通过与服务器的一定数量的连接来填充池。 +_ 初始池大小*是 LDAP 服务供应器在首次创建池时创建的每个连接标识的连接数(对应于应用程序首次请求该连接标识的池连接时)。在使用连接时,按需执行池中每个连接的身份验证。默认情况下,初始池大小为 1,可以使用系统属性`“com.sun.jndi.ldap.connect.pool.initsize”`进行更改。它通常在应用程序启动时使用,以通过与服务器的一定数量的连接来填充池。 -_ 最大池大小 _ 是 LDAP 服务供应器可以同时维护的每个连接标识的最大连接数。使用中和空闲连接都有助于此数字。当池大小达到该数量时,在删除池中的连接(即,物理连接关闭)之前,不会创建对应连接标识的新连接。当池大小达到最大值并且池中的所有连接都在使用时,应用程序对该池中连接的请求将被阻止,直到池中的连接变为空闲或被删除。最大池大小为 0 表示没有最大大小:池连接请求将使用现有的池空闲连接或新创建的池连接。 +_ 最大池大小*是 LDAP 服务供应器可以同时维护的每个连接标识的最大连接数。使用中和空闲连接都有助于此数字。当池大小达到该数量时,在删除池中的连接(即,物理连接关闭)之前,不会创建对应连接标识的新连接。当池大小达到最大值并且池中的所有连接都在使用时,应用程序对该池中连接的请求将被阻止,直到池中的连接变为空闲或被删除。最大池大小为 0 表示没有最大大小:池连接请求将使用现有的池空闲连接或新创建的池连接。 -_ 首选池大小 _ 是 LDAP 服务提供商应维护的每个连接标识的首选连接数。使用中和空闲连接都有助于此数字。当应用程序请求使用池连接且池大小小于首选大小时,无论空闲连接是否可用,LDAP 供应器都将创建并使用新的池连接。当应用程序完成池化连接(通过在共享连接的所有上下文上调用`Context.close()`)并且池大小大于首选大小时,LDAP 供应器将关闭并删除从游泳池汇集连接。优选的池大小为 0 意味着没有首选大小:只有在没有空闲连接可用时,对池连接的请求才会导致新创建的连接。 +_ 首选池大小*是 LDAP 服务提供商应维护的每个连接标识的首选连接数。使用中和空闲连接都有助于此数字。当应用程序请求使用池连接且池大小小于首选大小时,无论空闲连接是否可用,LDAP 供应器都将创建并使用新的池连接。当应用程序完成池化连接(通过在共享连接的所有上下文上调用`Context.close()`)并且池大小大于首选大小时,LDAP 供应器将关闭并删除从游泳池汇集连接。优选的池大小为 0 意味着没有首选大小:只有在没有空闲连接可用时,对池连接的请求才会导致新创建的连接。 请注意,最大池大小会覆盖初始池大小和首选池大小。例如,将首选池大小设置为大于最大池大小有效地将其设置为最大池大小。 diff --git a/docs/1027.md b/docs/1027.md index 5a102618942d46e92a2e2c54cff754ad5cf7f13b..faf389363269faa5c1b6df5ff704dd4cbc227888 100644 --- a/docs/1027.md +++ b/docs/1027.md @@ -41,7 +41,7 @@ * * * -答案取决于实现。这是因为 [`Context`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html)和 [`DirContext`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html)接口没有指定同步要求。 JDK 中的 LDAP 实现针对单线程访问进行了优化。如果你有多个线程访问相同的`Context`实例,那么每个线程在使用它时需要锁定`Context`实例。这也适用于从同一`Context`实例派生的任何`NamingEnumeration` 。但是,多个线程可以在没有锁的情况下同时访问 _ 不同的 _ `Context`实例(甚至是那些从相同的初始上下文派生的实例)。 +答案取决于实现。这是因为 [`Context`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html)和 [`DirContext`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html)接口没有指定同步要求。 JDK 中的 LDAP 实现针对单线程访问进行了优化。如果你有多个线程访问相同的`Context`实例,那么每个线程在使用它时需要锁定`Context`实例。这也适用于从同一`Context`实例派生的任何`NamingEnumeration` 。但是,多个线程可以在没有锁的情况下同时访问*不同的 _ `Context`实例(甚至是那些从相同的初始上下文派生的实例)。 [`Context.SECURITY_CREDENTIALS` ](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#SECURITY_CREDENTIALS)(`“java.naming.security,为什么 LDAP 供应器会忽略我的安全环境属性。凭证“`)属性还是将其设置为空字符串? @@ -89,7 +89,7 @@ env.put("com.sun.jndi.ldap.trace.ber", System.err); [`SearchResult` ](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchResult.html)中有一个空字符串作为名称? -[`getName()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html#getName--) 总是将 _ 相对 _ 的名称返回到搜索的 _ 目标上下文 _。因此,如果目标上下文满足搜索过滤器,则返回的名称将为“”(空名称),因为这是相对于目标上下文的名称。有关详细信息,请参阅[搜索结果](result.html)部分。 +[`getName()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html#getName--) 总是将*相对*的名称返回到搜索的*目标上下文*。因此,如果目标上下文满足搜索过滤器,则返回的名称将为“”(空名称),因为这是相对于目标上下文的名称。有关详细信息,请参阅[搜索结果](result.html)部分。 [`SearchResult` ](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/SearchResult.html)中有一个 URL 字符串作为名称? diff --git a/docs/1029.md b/docs/1029.md index e8bed23ae21ad8dac8880c5f82e99289e89c8f34..303e1b4be11619d62cda87d3132d97d4606519d5 100644 --- a/docs/1029.md +++ b/docs/1029.md @@ -23,7 +23,7 @@ 本课程介绍了如何在存储对象后将可序列化对象存储在目录中,您只需使用 [`lookup()`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#lookup-javax.naming.Name-) 从目录中获取对象的副本,无论是实际存储了什么类型的信息。 -您不仅可以通过使用`lookup()`来获取对象,还可以在 [`列出`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#list-javax.naming.Name-) 上下文时以及 [`搜索时`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-javax.naming.Name-) 一个上下文或其子树。在所有这些情况下,可能涉及 _ 对象工厂 _。对象工厂在 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/objects/factory/index.html)中有详细讨论。 +您不仅可以通过使用`lookup()`来获取对象,还可以在 [`列出`](https://docs.oracle.com/javase/8/docs/api/javax/naming/Context.html#list-javax.naming.Name-) 上下文时以及 [`搜索时`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#search-javax.naming.Name-) 一个上下文或其子树。在所有这些情况下,可能涉及*对象工厂*。对象工厂在 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/objects/factory/index.html)中有详细讨论。 要存储下面的对象类型,请参阅 JNDI 教程: diff --git a/docs/1030.md b/docs/1030.md index 7219f23e687bf859def7c21c04d68dfe24b00e9c..a17269c3ce712e431e0784ec2627988efa0792f9 100644 --- a/docs/1030.md +++ b/docs/1030.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html](https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html) -对于 _ 序列化 _,对象意味着将其状态转换为字节流,以便可以将字节流还原为对象的副本。 Java 对象是 _serializable_ ,如果它的类或其任何超类实现`java.io.Serializable`接口或其子接口, `java.io.Externalizable` 。 _ 反序列化 _ 是将对象的序列化形式转换回对象副本的过程。 +对于*序列化*,对象意味着将其状态转换为字节流,以便可以将字节流还原为对象的副本。 Java 对象是 _serializable_ ,如果它的类或其任何超类实现`java.io.Serializable`接口或其子接口, `java.io.Externalizable` 。*反序列化*是将对象的序列化形式转换回对象副本的过程。 例如, `java.awt.Button`类实现`Serializable`接口,因此您可以序列化`java.awt.Button`对象并将该序列化状态存储在一份文件。稍后,您可以回读序列化状态并反序列化为`java.awt.Button`对象。 @@ -52,7 +52,7 @@ java.awt.Button[button0,0,0,0x0,invalid,label=Push me] 当序列化对象绑定在目录中时,如上例所示,从目录中读取序列化对象的应用程序必须能够访问反序列化对象所需的类定义。 -或者,您可以在绑定对象时或者通过使用 [`DirContext.modifyAttributes`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#modifyAttributes-javax.naming.Name-int-javax.naming.directory.Attributes-) 添加属性时,在目录中记录带有序列化对象的 _ 代码库 _。您可以使用任何属性来记录此代码库,并让您的应用程序从目录中读取该属性并正确使用它。或者您可以使用指定的`“javaCodebase”`属性。在后一种情况下,Oracle 的 LDAP 服务供应器将根据需要自动使用该属性加载类定义。 `“javaCodebase”`应该包含代码库目录或 JAR 文件的 URL。如果代码库包含多个 URL,则每个 URL 必须用空格字符分隔。 +或者,您可以在绑定对象时或者通过使用 [`DirContext.modifyAttributes`](https://docs.oracle.com/javase/8/docs/api/javax/naming/directory/DirContext.html#modifyAttributes-javax.naming.Name-int-javax.naming.directory.Attributes-) 添加属性时,在目录中记录带有序列化对象的*代码库*。您可以使用任何属性来记录此代码库,并让您的应用程序从目录中读取该属性并正确使用它。或者您可以使用指定的`“javaCodebase”`属性。在后一种情况下,Oracle 的 LDAP 服务供应器将根据需要自动使用该属性加载类定义。 `“javaCodebase”`应该包含代码库目录或 JAR 文件的 URL。如果代码库包含多个 URL,则每个 URL 必须用空格字符分隔。 以下示例类似于绑定`java.awt.Button`的示例。它的不同之处在于它使用了用户定义的`Serializable`类, [``Flower` `](examples/Flower.java),并提供`“javaCodebase”` ]属性包含`Flower`的类定义的位置。这是执行绑定的代码。 diff --git a/docs/1041.md b/docs/1041.md index b139659ae39c1431d7e4a1e6f776ae8590d16eb9..7a7819dd1445d628ea30470bfecb14590e779fad 100644 --- a/docs/1041.md +++ b/docs/1041.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/sdp/sockets/index.html](https://docs.oracle.com/javase/tutorial/sdp/sockets/index.html) -对于高性能计算环境,需要快速有效地在网络上移动数据的能力。这种网络通常被描述为需要高吞吐量和低延迟。 _ 高吞吐量 _ 是指可以长时间提供大量处理能力的环境。 _ 低延迟 _ 是指处理输入和提供输出之间的最小延迟,例如您在实时应用程序中所期望的。 +对于高性能计算环境,需要快速有效地在网络上移动数据的能力。这种网络通常被描述为需要高吞吐量和低延迟。*高吞吐量*是指可以长时间提供大量处理能力的环境。*低延迟*是指处理输入和提供输出之间的最小延迟,例如您在实时应用程序中所期望的。 在这些环境中,使用套接字流的传统网络在移动数据时可能会产生瓶颈。 InfiniBand(IB)于 1999 年由 [InfiniBand 贸易协会](http://www.infinibandta.org/)推出,旨在满足高性能计算的需求。 IB 最重要的特性之一是远程直接内存访问(RDMA)。 RDMA 可以将数据直接从一台计算机的内存移动到另一台计算机,绕过两台计算机的操作系统,从而显着提高性能。 diff --git a/docs/1043.md b/docs/1043.md index 4a8c9233d1fcbd719d6716a8258879a5ee7063b9..ef36a449edf3fce14af1aaecd492aecf7d1f77b7 100644 --- a/docs/1043.md +++ b/docs/1043.md @@ -41,7 +41,7 @@ connect examplecluster.example.com 3306 ``` -示例文件中的第一条规则指定 SDP 用于本地 IP 地址`192.0.2.1`上的任何端口(*)。您将为分配给 InfiniBand 适配器的每个本地地址添加绑定规则。 ( _InfiniBand 适配器 _ 相当于 InfiniBand 的网络接口卡(NIC)。)如果您有多个 IB 适配器,则可以为分配给这些适配器的每个地址使用绑定规则。 +示例文件中的第一条规则指定 SDP 用于本地 IP 地址`192.0.2.1`上的任何端口(*)。您将为分配给 InfiniBand 适配器的每个本地地址添加绑定规则。 ( _InfiniBand 适配器*相当于 InfiniBand 的网络接口卡(NIC)。)如果您有多个 IB 适配器,则可以为分配给这些适配器的每个地址使用绑定规则。 示例文件中的第二条规则指定每当连接到`192.0.2.*`且目标端口为 1024 或更大时,都会使用 SDP。 IP 地址`/24`上的前缀表示 32 位 IP 地址的前 24 位应与指定的地址匹配。 IP 地址的每个部分使用 8 位,因此 24 位表示 IP 地址应与`192.0.2`匹配,最后一个字节可以是任何值。端口令牌上的`-*`表示法指定“及以上”。一系列端口(例如 1024-2056)也是有效的,并且包括指定范围的端点。 diff --git a/docs/1056.md b/docs/1056.md index c52f9401843c1c89d1ccfc335171ea8a86e75bca..92ee2acb428b8042c0700d7449fe6f4e82876641 100644 --- a/docs/1056.md +++ b/docs/1056.md @@ -193,7 +193,7 @@ schemagen [-d path] ``` -`-d` _ 路径 _ 选项指定处理器生成的和`javac`生成的类文件的位置。 +`-d` _ 路径*选项指定处理器生成的和`javac`生成的类文件的位置。 ## 关于 Schema-to-Java 绑定 diff --git a/docs/1058.md b/docs/1058.md index 259489305acf2bc0e35d3e07e53bd7e5a7f11e34..993f0ff71bf5b5926f2c6613595de035bf34a0f1 100644 --- a/docs/1058.md +++ b/docs/1058.md @@ -23,7 +23,7 @@ * 为模式派生的 JAXB 包,类,方法和常量创建 API 文档:通过向模式添加自定义 Javadoc 工具注释,您可以解释特定于实现的概念,指南和规则。 * 为缺省 XML 名称到 Java 标识符映射无法自动处理的情况提供语义上有意义的自定义名称;例如: - * 解决名称冲突(如 _JAXB 规范 _ 的附录 D.2.1 中所述)。请注意,JAXB 绑定编译器会检测并报告所有名称冲突。 + * 解决名称冲突(如 _JAXB 规范*的附录 D.2.1 中所述)。请注意,JAXB 绑定编译器会检测并报告所有名称冲突。 * 为非有效 Java 标识符的类型安全枚举常量提供名称;例如,枚举整数值。 * 为绑定到 Java 属性或类的未命名模型组的 Java 表示提供更好的名称。 * 提供比默认情况下从目标命名空间 URI 派生的更有意义的包名。 @@ -60,7 +60,7 @@ ### 内联自定义 -通过 XML 模式文件中的内联**绑定声明**进行的 JAXB 绑定的自定义采用`< xsd:appinfo>的形式。嵌入在模式`< xsd:annotation>中的`元素`元素( `xsd:`是 XML 模式名称空间前缀,如 W3C _XML 模式第 1 部分:结构 _ 中所定义)。以下示例显示了内联自定义的一般形式: +通过 XML 模式文件中的内联**绑定声明**进行的 JAXB 绑定的自定义采用`< xsd:appinfo>的形式。嵌入在模式`< xsd:annotation>中的`元素`元素( `xsd:`是 XML 模式名称空间前缀,如 W3C _XML 模式第 1 部分:结构*中所定义)。以下示例显示了内联自定义的一般形式: ```java @@ -121,7 +121,7 @@ xjc -b file schema ``` -其中 _ 文件 _ 是绑定自定义文件的名称,_ 模式 _ 是您要传递给绑定编译器的模式的名称。 +其中*文件*是绑定自定义文件的名称,*模式*是您要传递给绑定编译器的模式的名称。 您可以拥有一个包含多个模式自定义的绑定文件,也可以将自定义分隔为多个绑定文件;例如: @@ -403,7 +403,7 @@ xjc schema1.xsd schema2.xsd schema3.xsd \ 对于内联注释,`< typesafeEnumClass>必须在`< simpleType>的注释元素中指定`声明。`元素。 `< typesafeEnumMember>必须在枚举成员的注释元素中指定`。这使得枚举成员可以独立于枚举类进行定制。 -有关类型安全枚举设计模式的信息,请参阅 Oracle 技术网上 Joshua Bloch _ 有效 Java 编程 _ 的[示例章节。](http://www.oracle.com/technetwork/java/page1-139488.html) 。 +有关类型安全枚举设计模式的信息,请参阅 Oracle 技术网上 Joshua Bloch _ 有效 Java 编程*的[示例章节。](http://www.oracle.com/technetwork/java/page1-139488.html) 。 ### javadoc 绑定声明 diff --git a/docs/106.md b/docs/106.md index bccde121d17f0695089ce389a5273b1e7cb65178..7797b7e6f88a67dc7964ba7eab38b0faa8a990ce 100644 --- a/docs/106.md +++ b/docs/106.md @@ -13,7 +13,7 @@ char[] charArray = { 'a', 'b', 'c', 'd', 'e' }; ``` -但是,有时候需要使用 char 作为对象 - 例如,作为期望对象的方法参数。 Java 编程语言提供了一个 _ 包装器 _ 类,为此目的“包装”`Character`对象中的`char`。 `Character`类型的对象包含单个字段,其类型为`char`。这个 [Character](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html) 类还提供了许多用于操作字符的有用类(即静态)方法。 +但是,有时候需要使用 char 作为对象 - 例如,作为期望对象的方法参数。 Java 编程语言提供了一个*包装器*类,为此目的“包装”`Character`对象中的`char`。 `Character`类型的对象包含单个字段,其类型为`char`。这个 [Character](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html) 类还提供了许多用于操作字符的有用类(即静态)方法。 您可以使用`Character`构造器创建`Character`对象: @@ -22,7 +22,7 @@ Character ch = new Character('a'); ``` -在某些情况下,Java 编译器还会为您创建一个`Character`对象。例如,如果将原始`char`传递给需要对象的方法,编译器会自动将`char`转换为`Character`。如果转换采用另一种方式,此功能称为 _ 自动装箱 _ - 或 _ 拆箱 _。有关自动装箱和拆箱的详细信息,请参阅[自动装箱和拆箱](autoboxing.html)。 +在某些情况下,Java 编译器还会为您创建一个`Character`对象。例如,如果将原始`char`传递给需要对象的方法,编译器会自动将`char`转换为`Character`。如果转换采用另一种方式,此功能称为*自动装箱 _ - 或*拆箱*。有关自动装箱和拆箱的详细信息,请参阅[自动装箱和拆箱](autoboxing.html)。 * * * @@ -46,7 +46,7 @@ char toLowerCase(char ch)` | 返回指定 char 值的大写或小写形式 ## 转义序列 -前面带有反斜杠(\)的字符是 _ 转义序列 _,对编译器有特殊含义。下表显示了 Java 转义序列: +前面带有反斜杠(\)的字符是*转义序列*,对编译器有特殊含义。下表显示了 Java 转义序列: Escape Sequences | 逃脱序列 | 描述 | diff --git a/docs/107.md b/docs/107.md index d24ff81cda8aeea6341e9ec5b373675548709667..74b255a73e605d41376283a3a2d3bb410489cc3b 100644 --- a/docs/107.md +++ b/docs/107.md @@ -15,7 +15,7 @@ String greeting = "Hello world!"; ``` -在这种情况下,“Hello world!”是 _ 字符串文字 _ - 代码中的一系列字符,用双引号括起来。每当它在代码中遇到字符串文字时,编译器就会创建一个`String`对象及其值 - 在本例中为`Hello world!`。 +在这种情况下,“Hello world!”是*字符串文字 _ - 代码中的一系列字符,用双引号括起来。每当它在代码中遇到字符串文字时,编译器就会创建一个`String`对象及其值 - 在本例中为`Hello world!`。 与任何其他对象一样,您可以使用`new`关键字和构造器创建`String`对象。 `String`类有 13 个构造器,允许您使用不同的源提供字符串的初始值,例如字符数组: @@ -36,7 +36,7 @@ System.out.println(helloString); ## 字符串长度 -用于获取对象信息的方法称为 _ 存取方法 _。可以与字符串一起使用的一种访问器方法是`length()`方法,它返回字符串对象中包含的字符数。执行以下两行代码后,`len`等于 17: +用于获取对象信息的方法称为*存取方法*。可以与字符串一起使用的一种访问器方法是`length()`方法,它返回字符串对象中包含的字符数。执行以下两行代码后,`len`等于 17: ```java String palindrome = "Dot saw I was Tod"; @@ -44,7 +44,7 @@ int len = palindrome.length(); ``` -_ 回文 _ 是一个对称的单词或句子 - 它拼写相同的向前和向后,忽略大小写和标点符号。这是一个简短而低效的程序来反转回文串。它调用`String`方法`charAt(i)`,它返回字符串中的 i <sup>th</sup> 字符,从 0 开始计数。 +_ 回文*是一个对称的单词或句子 - 它拼写相同的向前和向后,忽略大小写和标点符号。这是一个简短而低效的程序来反转回文串。它调用`String`方法`charAt(i)`,它返回字符串中的 i <sup>th</sup> 字符,从 0 开始计数。 ```java public class StringDemo { diff --git a/docs/109.md b/docs/109.md index 54094681aa615abd456a4898e7b2a536b87b662d..a43d860d58e33032ed8b9b211550bea34b1d5a90 100644 --- a/docs/109.md +++ b/docs/109.md @@ -81,7 +81,7 @@ int lastIndexOf(String str,int fromIndex)` | 返回指定子字符串的 `String`类只有很少的方法可以将字符或子串插入到字符串中。通常,它们不是必需的:您可以通过连接从中删除的子字符串来创建一个新字符串,该字符串包含您要插入的子字符串。 -然而,`String`类确实有四种 _ 替换 _ 找到的字符或子串的方法。他们是: +然而,`String`类确实有四种*替换*找到的字符或子串的方法。他们是: Methods in the `String` Class for Manipulating Strings | 方法 | 描述 | diff --git a/docs/11.md b/docs/11.md index d89db09dc1ef3fb50ce1ecaaaa6558788863bdc1..e40502d46b103044bd270867d0eba79ecfe09abe 100644 --- a/docs/11.md +++ b/docs/11.md @@ -6,7 +6,7 @@ **问题 1** :编译用 Java 编程语言编写的程序时,编译器会将人类可读的源文件转换为 Java 虚拟机可以理解的与平台无关的代码。这个与平台无关的代码叫什么? -**问题 2** :以下哪一项是 _ 而不是 _ 的有效评论: +**问题 2** :以下哪一项是*而不是*的有效评论: 一个。 `/** comment */` b。 `/* comment */` diff --git a/docs/111.md b/docs/111.md index 86236a5853c3f52e16baa466f7f046eb5b9abd8a..d44e48a9a6736fd229adc083652062b6d33fb56c 100644 --- a/docs/111.md +++ b/docs/111.md @@ -10,7 +10,7 @@ 与`String`类一样,`StringBuilder`类具有`length()`方法,该方法返回构建器中字符序列的长度。 -与字符串不同,每个字符串构建器还具有 _ 容量 _,即已分配的字符空间数。由`capacity()`方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加。 +与字符串不同,每个字符串构建器还具有*容量*,即已分配的字符空间数。由`capacity()`方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加。 `StringBuilder` Constructors | 构造器 | 描述 | diff --git a/docs/112.md b/docs/112.md index 6240378c19bd1e3cfd4470775624d0ae2908c657..2adddfcfd8cc5bb43eda93b0a0e6ee36c5fccd75 100644 --- a/docs/112.md +++ b/docs/112.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/data/stringsummary.html](https://docs.oracle.com/javase/tutorial/java/data/stringsummary.html) -大多数情况下,如果使用单个字符值,则将使用原始`char`类型。但是,有时候需要使用 char 作为对象 - 例如,作为期望对象的方法参数。 Java 编程语言提供了一个 _ 包装器 _ 类,为此目的“包装”`Character`对象中的`char`。 `Character`类型的对象包含单个字段,其类型为`char`。该 [`Character`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html) 类还提供了许多用于操纵字符的有用类(即静态)方法。 +大多数情况下,如果使用单个字符值,则将使用原始`char`类型。但是,有时候需要使用 char 作为对象 - 例如,作为期望对象的方法参数。 Java 编程语言提供了一个*包装器*类,为此目的“包装”`Character`对象中的`char`。 `Character`类型的对象包含单个字段,其类型为`char`。该 [`Character`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html) 类还提供了许多用于操纵字符的有用类(即静态)方法。 字符串是一系列字符,广泛用于 Java 编程。在 Java 编程语言中,字符串是对象。 [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 类有 60 多种方法和 13 种构造器。 diff --git a/docs/113.md b/docs/113.md index 4d3abd84d437206d98d9a9c6f99afc4420f32ccb..b92920bd2bee5aac45760b3bd42fcb2b821a9a29 100644 --- a/docs/113.md +++ b/docs/113.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html](https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html) -_Autoboxing_ 是 Java 编译器在原始类型和相应的对象包装类之间进行的自动转换。例如,将`int`转换为`整数`,`双`转换为`Double` ,依此类推。如果转换是另一种方式,则称为 _ 拆箱 _。 +_Autoboxing_ 是 Java 编译器在原始类型和相应的对象包装类之间进行的自动转换。例如,将`int`转换为`整数`,`双`转换为`Double` ,依此类推。如果转换是另一种方式,则称为*拆箱*。 以下是自动装箱的最简单示例: diff --git a/docs/116.md b/docs/116.md index dfd40d5f38e1294fcac1a0cefcb355513f610e9c..01d50b03fde110d203d2621fdea8c6a0b8b282c9 100644 --- a/docs/116.md +++ b/docs/116.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/why.html](https://docs.oracle.com/javase/tutorial/java/generics/why.html) -简而言之,泛型使 _ 类型 _(类和接口)在定义类,接口和方法时成为参数。与方法声明中使用的更熟悉的 _ 形式参数 _ 非常相似,类型参数提供了一种方法,您可以使用不同的输入重用相同的代码。不同之处在于形式参数的输入是值,而类型参数的输入是类型。 +简而言之,泛型使*类型*(类和接口)在定义类,接口和方法时成为参数。与方法声明中使用的更熟悉的*形式参数*非常相似,类型参数提供了一种方法,您可以使用不同的输入重用相同的代码。不同之处在于形式参数的输入是值,而类型参数的输入是类型。 使用泛型的代码比非泛型代码有许多好处: diff --git a/docs/117.md b/docs/117.md index 4ac3f5bfd6a06c49663499fe673eb38decac76ff..2e7a033a679d7955a26b2298cf5a54619175d9ad 100644 --- a/docs/117.md +++ b/docs/117.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/types.html](https://docs.oracle.com/javase/tutorial/java/generics/types.html) -_ 泛型类型 _ 是通过类型参数化的泛型类或接口。以下`Box`类将被修改以演示该概念。 +_ 泛型类型*是通过类型参数化的泛型类或接口。以下`Box`类将被修改以演示该概念。 ## 一个简单的盒子类 @@ -22,16 +22,16 @@ public class Box { ## Box 类的通用版本 -_ 泛型类 _ 使用以下格式定义: +_ 泛型类*使用以下格式定义: ```java class name { /* ... */ } ``` -由尖括号(`<>` )分隔的类型参数部分遵循类名。它指定 _ 类型参数 _(也称为 _ 类型变量 _) `T1` , `T2` ,......和`Tn` ]。 +由尖括号(`<>` )分隔的类型参数部分遵循类名。它指定*类型参数*(也称为*类型变量*) `T1` , `T2` ,......和`Tn` ]。 -要更新`Box`类以使用泛型,您可以通过将代码“ `public class Box` ”更改为“ `public class Box<”来创建 _ 泛型类型声明 _ ; T>` “。这引入了类型变量`T` ,可以在类中的任何地方使用。 +要更新`Box`类以使用泛型,您可以通过将代码“ `public class Box` ”更改为“ `public class Box<”来创建*泛型类型声明 _ ; T>` “。这引入了类型变量`T` ,可以在类中的任何地方使用。 通过此更改, `Box`类变为: @@ -69,14 +69,14 @@ public class Box { 您将在整个 Java SE API 和本课程的其余部分中看到这些名称。 -要从代码中引用通用`Box`类,必须执行 _ 泛型类型调用 _,它将`T`替换为某些具体值,例如`整数`: +要从代码中引用通用`Box`类,必须执行*泛型类型调用*,它将`T`替换为某些具体值,例如`整数`: ```java Box integerBox; ``` -您可以将泛型类型调用视为与普通方法调用类似,但不是将参数传递给方法,而是在这种情况下传递 _ 类型参数 _ - `Integer` - 到`Box`类本身。 +您可以将泛型类型调用视为与普通方法调用类似,但不是将参数传递给方法,而是在这种情况下传递*类型参数 _ - `Integer` - 到`Box`类本身。 * * * @@ -86,7 +86,7 @@ Box integerBox; 与任何其他变量声明一样,此代码实际上不会创建新的`Box`对象。它简单地声明`integerBox`将保持对`Integer`的“ `Box` ”的引用,这是`Box< Integer>`被阅读。 -泛型类型的调用通常称为 _ 参数化类型 _。 +泛型类型的调用通常称为*参数化类型*。 要实例化此类,像往常一样使用`new`关键字,但放置`< Integer>类名和括号之间的`: @@ -95,7 +95,7 @@ Box integerBox = new Box(); ``` -在 Java SE 7 及更高版本中,只要编译器可以确定或推断类型参数,就可以用一组空的类型参数(<>)替换调用泛型类的构造器所需的类型参数。上下文。这对尖括号<>非正式地称为 _ 钻石 _。例如,您可以创建`Box< Integer>的实例。` ,声明如下: +在 Java SE 7 及更高版本中,只要编译器可以确定或推断类型参数,就可以用一组空的类型参数(<>)替换调用泛型类的构造器所需的类型参数。上下文。这对尖括号<>非正式地称为*钻石*。例如,您可以创建`Box< Integer>的实例。` ,声明如下: ```java Box integerBox = new Box<>(); diff --git a/docs/118.md b/docs/118.md index bb1529fa69f5492c82fb91a6de5e9a27c0131659..e57a35bf6a39d9d9535dba4329d4b26d54ef960d 100644 --- a/docs/118.md +++ b/docs/118.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html](https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html) -_ 原始类型 _ 是没有任何类型参数的泛型类或接口的名称。例如,给定通用`Box`类: +_ 原始类型*是没有任何类型参数的泛型类或接口的名称。例如,给定通用`Box`类: ```java public class Box { @@ -26,7 +26,7 @@ Box rawBox = new Box(); ``` -因此, `Box`是泛型类型`Box< T>的原始类型。` 。但是,非泛型类或接口类型是 _ 而不是 _ 原始类型。 +因此, `Box`是泛型类型`Box< T>的原始类型。` 。但是,非泛型类或接口类型是*而不是*原始类型。 原始类型显示在遗留代码中,因为许多 API 类(例如`集合`类)在 JDK 5.0 之前不是通用的。当使用原始类型时,你基本上得到了前仿制行为 - `Box`给你`对象`。为了向后兼容,允许将参数化类型分配给其原始类型: diff --git a/docs/119.md b/docs/119.md index aff3f2a428def4fecb937c1e2b29b710057418db..17bd1047b7d794742ae7ac74da86f974e80a178e 100644 --- a/docs/119.md +++ b/docs/119.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/methods.html](https://docs.oracle.com/javase/tutorial/java/generics/methods.html) -_ 通用方法 _ 是引入自己的类型参数的方法。这类似于声明泛型类型,但类型参数的范围仅限于声明它的方法。允许使用静态和非静态泛型方法,以及泛型类构造器。 +_ 通用方法*是引入自己的类型参数的方法。这类似于声明泛型类型,但类型参数的范围仅限于声明它的方法。允许使用静态和非静态泛型方法,以及泛型类构造器。 泛型方法的语法包括一个类型参数列表,在尖括号内,它出现在方法的返回类型之前。对于静态泛型方法,类型参数部分必须出现在方法的返回类型之前。 @@ -52,4 +52,4 @@ boolean same = Util.compare(p1, p2); ``` -此功能称为 _ 类型推断 _,允许您将普通方法作为普通方法调用,而无需在尖括号之间指定类型。本主题将在下一节[类型推断](genTypeInference.html)中进一步讨论。 \ No newline at end of file +此功能称为*类型推断*,允许您将普通方法作为普通方法调用,而无需在尖括号之间指定类型。本主题将在下一节[类型推断](genTypeInference.html)中进一步讨论。 \ No newline at end of file diff --git a/docs/12.md b/docs/12.md index cab15b5b0f725852c1bd91a19bf00f5eede062a1..ec1436b800885eacd715c2b4248798cecbdc34e7 100644 --- a/docs/12.md +++ b/docs/12.md @@ -42,7 +42,7 @@ C:\jdk1.8.0\bin\javac HelloWorldApp.java **语法错误(所有平台)** -如果您错误地键入了程序的一部分,编译器可能会发出 _ 语法 _ 错误。该消息通常显示错误的类型,检测到错误的行号,该行上的代码以及代码中错误的位置。这是在语句末尾省略分号(`;`)导致的错误: +如果您错误地键入了程序的一部分,编译器可能会发出*语法*错误。该消息通常显示错误的类型,检测到错误的行号,该行上的代码以及代码中错误的位置。这是在语句末尾省略分号(`;`)导致的错误: ```java testing.java:14: `;' expected. @@ -121,7 +121,7 @@ set CLASSPATH= `**无法找到或加载主类 HelloWorldApp.class**` -初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的 _ 名称,_ 而不是 _ 文件名。_ +初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的*名称,*而不是*文件名。_ **`Exception in thread "main" java.lang.NoSuchMethodError: main`** @@ -153,7 +153,7 @@ unset CLASSPATH `**线程“main”中的异常 java.lang.NoClassDefFoundError:HelloWorldApp / class**` -初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的 _ 名称,_ 而不是 _ 文件名。_ +初学者程序员常犯的一个错误就是尝试在编译器创建的`.class`文件上运行`java`启动程序。例如,如果您尝试使用`java HelloWorldApp.class`而不是`java HelloWorldApp`运行程序,则会出现此错误。请记住,参数是您要使用的类的*名称,*而不是*文件名。_ **`Exception in thread "main" java.lang.NoSuchMethodError: main`** diff --git a/docs/120.md b/docs/120.md index 21ad0a57eac40246a817c644bc3dcf131a503fff..6542aa096409161bf404b08387ef658bff1eb9f7 100644 --- a/docs/120.md +++ b/docs/120.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/bounded.html](https://docs.oracle.com/javase/tutorial/java/generics/bounded.html) -有时您可能希望限制可在参数化类型中用作类型参数的类型。例如,对数字进行操作的方法可能只想接受`Number`或其子类的实例。这是 _ 有界类型参数 _ 的用途。 +有时您可能希望限制可在参数化类型中用作类型参数的类型。例如,对数字进行操作的方法可能只想接受`Number`或其子类的实例。这是*有界类型参数*的用途。 -要声明有界类型参数,请列出类型参数的名称,后跟`extends`关键字,然后是 _ 上限 _,在此示例中为`Number`。请注意,在此上下文中,`extends`在一般意义上用于表示“扩展”(如在类中)或“实现”(如在接口中)。 +要声明有界类型参数,请列出类型参数的名称,后跟`extends`关键字,然后是*上限*,在此示例中为`Number`。请注意,在此上下文中,`extends`在一般意义上用于表示“扩展”(如在类中)或“实现”(如在接口中)。 ```java public class Box { @@ -66,7 +66,7 @@ public class NaturalNumber { ## 多个边界 -前面的示例说明了使用带有单个边界的类型参数,但是类型参数可以具有 _ 多个边界 _: +前面的示例说明了使用带有单个边界的类型参数,但是类型参数可以具有*多个边界*: ```java diff --git a/docs/122.md b/docs/122.md index 302671e59a423170d0f5638c4628db0f350af49b..d071f744b5361675134fe4c0477edde9ac520934 100644 --- a/docs/122.md +++ b/docs/122.md @@ -11,7 +11,7 @@ someObject = someInteger; // OK ``` -在面向对象的术语中,这被称为“是一种”关系。由于`整数` _ 是 _ 种`对象`,因此允许分配。但是`Integer`也是一种`Number` ,所以下面的代码也是有效的: +在面向对象的术语中,这被称为“是一种”关系。由于`整数` _ 是*种`对象`,因此允许分配。但是`Integer`也是一种`Number` ,所以下面的代码也是有效的: ```java public void someMethod(Number n) { /* ... */ } diff --git a/docs/123.md b/docs/123.md index 135248ee10a1907fd1b9497d29b20bdd6e71040e..aa21b057782b61539471e452f10185a645dffd45 100644 --- a/docs/123.md +++ b/docs/123.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html](https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html) -_ 类型推断 _ 是 Java 编译器查看每个方法调用和相应声明以确定使调用适用的类型参数(或参数)的能力。推理算法确定参数的类型,如果可用,还确定分配或返回结果的类型。最后,推理算法试图找到适用于所有参数的 _ 最具体 _ 类型。 +_ 类型推断*是 Java 编译器查看每个方法调用和相应声明以确定使调用适用的类型参数(或参数)的能力。推理算法确定参数的类型,如果可用,还确定分配或返回结果的类型。最后,推理算法试图找到适用于所有参数的*最具体*类型。 为了说明最后一点,在下面的例子中,推断确定传递给`pick`方法的第二个参数是`Serializable`类型: @@ -55,7 +55,7 @@ Box #2 contains [30] ``` -泛型方法`addBox`定义了一个名为`U`的类型参数。通常,Java 编译器可以推断泛型方法调用的类型参数。因此,在大多数情况下,您不必指定它们。例如,要调用泛型方法`addBox`,可以使用 _ 类型见证 _ 指定类型参数,如下所示: +泛型方法`addBox`定义了一个名为`U`的类型参数。通常,Java 编译器可以推断泛型方法调用的类型参数。因此,在大多数情况下,您不必指定它们。例如,要调用泛型方法`addBox`,可以使用*类型见证*指定类型参数,如下所示: ```java BoxDemo.addBox(Integer.valueOf(10), listOfIntegerBoxes); @@ -127,7 +127,7 @@ MyClass myObject = new MyClass<>(""); * * * -Java 编译器利用目标类型来推断泛型方法调用的类型参数。表达式的 _ 目标类型 _ 是 Java 编译器所期望的数据类型,具体取决于表达式的显示位置。考虑方法`Collections.emptyList`,声明如下: +Java 编译器利用目标类型来推断泛型方法调用的类型参数。表达式的*目标类型*是 Java 编译器所期望的数据类型,具体取决于表达式的显示位置。考虑方法`Collections.emptyList`,声明如下: ```java static List emptyList(); diff --git a/docs/124.md b/docs/124.md index b3a0174c6c3f8c10a1fe5bd68f1d64ef57528c69..6fe1fa32e19281f0565332c9f6d487c954f9cb9e 100644 --- a/docs/124.md +++ b/docs/124.md @@ -2,6 +2,6 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/wildcards.html](https://docs.oracle.com/javase/tutorial/java/generics/wildcards.html) -在通用代码中,问号(`?`),称为 _ 通配符 _,表示未知类型。通配符可用于各种情况:作为参数,字段或局部变量的类型;有时作为返回类型(虽然更好的编程实践更具体)。通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数。 +在通用代码中,问号(`?`),称为*通配符*,表示未知类型。通配符可用于各种情况:作为参数,字段或局部变量的类型;有时作为返回类型(虽然更好的编程实践更具体)。通配符从不用作泛型方法调用,泛型类实例创建或超类型的类型参数。 以下部分更详细地讨论通配符,包括上限有界通配符,下限有界通配符和通配符捕获。 \ No newline at end of file diff --git a/docs/125.md b/docs/125.md index a860d6391ef104aaef5d85f37ecbaa27a53c4258..0aad6ceab4941af7d5a9de954e4851a2c964013a 100644 --- a/docs/125.md +++ b/docs/125.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html](https://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html) -您可以使用上限通配符来放宽对变量的限制。例如,假设您要编写一个适用于`List< Integer>的方法。` ,`列表< Double>` ,_ 和 _ `列表< Number>` ;你可以通过使用上限的通配符来实现这一点。 +您可以使用上限通配符来放宽对变量的限制。例如,假设您要编写一个适用于`List< Integer>的方法。` ,`列表< Double>` ,*和 _ `列表< Number>` ;你可以通过使用上限的通配符来实现这一点。 -要声明一个上限通配符,使用通配符('`?`'),然后是`extends`关键字,然后是 _ 上限 _。注意,在这种情况下,`扩展`在一般意义上用于表示“扩展”(如在类中)或“实现”(如在接口中)。 +要声明一个上限通配符,使用通配符('`?`'),然后是`extends`关键字,然后是*上限*。注意,在这种情况下,`扩展`在一般意义上用于表示“扩展”(如在类中)或“实现”(如在接口中)。 编写适用于`编号`列表和`编号`的子类型的方法,如`整数`, `Double`和`浮动`,你要指定`List<? extends Number>` 。术语`列表<数字>`比`List<?更具限制性 extends Number>`因为前者仅匹配类型`号`的列表,而后者匹配类型`号`或其任何子类的列表。 diff --git a/docs/126.md b/docs/126.md index 3714ba1ee7de03af7ce53cbc3d4991873aac8883..366648ae35154741bf5107c54c270bba2c0f0c1d 100644 --- a/docs/126.md +++ b/docs/126.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/unboundedWildcards.html](https://docs.oracle.com/javase/tutorial/java/generics/unboundedWildcards.html) -使用通配符(`?`)指定无界通配符类型,例如, `List<?>` 。这被称为未知类型的 _ 列表 _。有两种情况,无界通配符是一种有用的方法: +使用通配符(`?`)指定无界通配符类型,例如, `List<?>` 。这被称为未知类型的*列表*。有两种情况,无界通配符是一种有用的方法: * 如果您正在编写可以使用`Object`类中提供的功能实现的方法。 * 当代码使用泛型类中不依赖于类型参数的方法时。例如, `List.size`或`List.clear` 。事实上, `Class<?>`经常被使用,因为`Class< T>中的大部分方法都是如此。`不依赖于`T` 。 diff --git a/docs/127.md b/docs/127.md index 684546535c15acd4a65fbaa1fc1be76b7b923850..870fd1dbd3c4e052562dc32ace5e916645e35872 100644 --- a/docs/127.md +++ b/docs/127.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/lowerBounded.html](https://docs.oracle.com/javase/tutorial/java/generics/lowerBounded.html) -[上限有界通配符](upperBounded.html)部分显示上限有界通配符将未知类型限制为该类型的特定类型或子类型,并使用`extends`关键字表示。以类似的方式,_ 下限 _ 通配符将未知类型限制为该类型的特定类型或 _ 超类型 _。 +[上限有界通配符](upperBounded.html)部分显示上限有界通配符将未知类型限制为该类型的特定类型或子类型,并使用`extends`关键字表示。以类似的方式,*下限*通配符将未知类型限制为该类型的特定类型或*超类型*。 -使用通配符('`?`')表示下限通配符,后跟`super`关键字,然后是 _ 下限 _:`< ;?超级 A>` 。 +使用通配符('`?`')表示下限通配符,后跟`super`关键字,然后是*下限*:`< ;?超级 A>` 。 * * * diff --git a/docs/129.md b/docs/129.md index 5c24020cd27a7f171709d7c5120fdff898c964cc..bba9c41169157a4790a6d2646aef7fd9674691ce 100644 --- a/docs/129.md +++ b/docs/129.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/generics/capture.html](https://docs.oracle.com/javase/tutorial/java/generics/capture.html) -在某些情况下,编译器会推断出通配符的类型。例如,列表可以被定义为`List<?>。`但是,在评估表达式时,编译器会从代码中推断出特定的类型。这种情况称为 _ 通配符捕获 _。 +在某些情况下,编译器会推断出通配符的类型。例如,列表可以被定义为`List<?>。`但是,在评估表达式时,编译器会从代码中推断出特定的类型。这种情况称为*通配符捕获*。 在大多数情况下,您不必担心通配符捕获,除非您看到包含短语“capture of”的错误消息。 @@ -39,7 +39,7 @@ WildcardError.java:6: error: method set in interface List cannot be applied t ``` -在此示例中,代码尝试执行安全操作,那么如何解决编译器错误?您可以通过编写捕获通配符的 _ 私有帮助程序方法 _ 来修复它。在这种情况下,您可以通过创建私有帮助方法`fooHelper`来解决问题,如 [`WildcardFixed`](examples/WildcardFixed.java) 所示: +在此示例中,代码尝试执行安全操作,那么如何解决编译器错误?您可以通过编写捕获通配符的*私有帮助程序方法*来修复它。在这种情况下,您可以通过创建私有帮助方法`fooHelper`来解决问题,如 [`WildcardFixed`](examples/WildcardFixed.java) 所示: ```java public class WildcardFixed { diff --git a/docs/13.md b/docs/13.md index d169057c0b47c594739fa5f0a6d3af2a10cbf88b..f6cd502e7c82461041cc445498a9bb031c668eed 100644 --- a/docs/13.md +++ b/docs/13.md @@ -12,7 +12,7 @@ [![trail icon](img/6701b9a7baaf24d8cc41f70c529f43f8.jpg) **注释**](annotations/index.html) 是元数据的一种形式,为编译器提供信息。本课程描述了在程序中有效使用注释的位置和方法。 -[![trail icon](img/6701b9a7baaf24d8cc41f70c529f43f8.jpg) **接口和继承**](IandI/index.html) 描述了接口 - 它们是什么,为什么要写一个,以及如何写一个。本节还介绍了从另一个类派生一个类的方法。也就是说,_ 子类 _ 如何从 _ 超类 _ 继承字段和方法。您将了解到所有类都派生自`Object`类,以及如何修改子类从超类继承的方法。 +[![trail icon](img/6701b9a7baaf24d8cc41f70c529f43f8.jpg) **接口和继承**](IandI/index.html) 描述了接口 - 它们是什么,为什么要写一个,以及如何写一个。本节还介绍了从另一个类派生一个类的方法。也就是说,*子类*如何从*超类*继承字段和方法。您将了解到所有类都派生自`Object`类,以及如何修改子类从超类继承的方法。 [![trail icon](img/6701b9a7baaf24d8cc41f70c529f43f8.jpg) **数字和字符串**](data/index.html) 本课程介绍如何使用`Number`和`String`对象本课程还介绍如何格式化输出数据。 diff --git a/docs/134.md b/docs/134.md index b4a08cbb3f903b74ec07a3f89a80c1e0d75c8daa..d3db447464f98418c959b44a7c65b30f39c108f4 100644 --- a/docs/134.md +++ b/docs/134.md @@ -57,7 +57,7 @@ Integer x = (String)mn.data; // Causes a ClassCastException to be thrown. * 通过`mn`引用的同一对象的数据字段可以被访问并且预期是整数(因为`mn`是`MyNode` ,它是`节点<整数>` 。 * 尝试将`字符串`分配给`整数`会导致`ClassCastException`来自 Java 编译器在赋值时插入的强制转换。 -在编译扩展参数化类或实现参数化接口的类或接口时,编译器可能需要创建一个称为 _ 桥接方法 _ 的合成​​方法,作为类型擦除过程的一部分。您通常不需要担心桥接方法,但如果出现在堆栈跟踪中,您可能会感到困惑。 +在编译扩展参数化类或实现参数化接口的类或接口时,编译器可能需要创建一个称为*桥接方法*的合成​​方法,作为类型擦除过程的一部分。您通常不需要担心桥接方法,但如果出现在堆栈跟踪中,您可能会感到困惑。 在类型擦除之后,`节点`和`MyNode`类变为: diff --git a/docs/135.md b/docs/135.md index 8a4d1dfa291113309ea5268b3b5cea8a218fb3ac..9b1c15cfc77d682fb354ee5e87dbd5cb85f2170f 100644 --- a/docs/135.md +++ b/docs/135.md @@ -11,11 +11,11 @@ * [具有不可恢复形式参数的 Varargs 方法的潜在漏洞](#vulnerabilities) * [使用不可恢复的形式参数防止 Varargs 方法出现警告](#suppressing) -_ 可再生 _ 类型是一种类型信息在运行时完全可用的类型。这包括基元,非泛型类型,原始类型和未绑定通配符的调用。 +_ 可再生*类型是一种类型信息在运行时完全可用的类型。这包括基元,非泛型类型,原始类型和未绑定通配符的调用。 -_ 不可再生类型 _ 是在编译时通过类型擦除删除信息的类型 - 未定义为无界通配符的泛型类型的调用。不可重新生成的类型在运行时没有提供所有信息。不可再生类型的示例是`List< String>。`和`列表< Number>` ; JVM 无法在运行时区分这些类型。如[对泛型的限制](restrictions.html)所示,在某些情况下不能使用不可再生类型:例如,在`表达式`表达式中,或作为数组中的元素。 +_ 不可再生类型*是在编译时通过类型擦除删除信息的类型 - 未定义为无界通配符的泛型类型的调用。不可重新生成的类型在运行时没有提供所有信息。不可再生类型的示例是`List< String>。`和`列表< Number>` ; JVM 无法在运行时区分这些类型。如[对泛型的限制](restrictions.html)所示,在某些情况下不能使用不可再生类型:例如,在`表达式`表达式中,或作为数组中的元素。 -_ 当参数化类型的变量引用不是该参数化类型的对象时,会发生堆污染 _。如果程序执行某些操作,在编译时产生未经检查的警告,则会出现这种情况。如果在编译时(在编译时类型检查规则的限制范围内)或在运行时,生成 _ 未检查警告 _,则涉及参数化类型的操作的正确性(例如,强制转换)或方法调用)无法验证。例如,在混合原始类型和参数化类型时,或者在执行未经检查的强制转换时,会发生堆污染。 +_ 当参数化类型的变量引用不是该参数化类型的对象时,会发生堆污染*。如果程序执行某些操作,在编译时产生未经检查的警告,则会出现这种情况。如果在编译时(在编译时类型检查规则的限制范围内)或在运行时,生成*未检查警告*,则涉及参数化类型的操作的正确性(例如,强制转换)或方法调用)无法验证。例如,在混合原始类型和参数化类型时,或者在执行未经检查的强制转换时,会发生堆污染。 在正常情况下,当所有代码同时编译时,编译器会发出未经检查的警告,以引起您对潜在堆污染的注意。如果单独编译代码的各个部分,则很难检测到堆污染的潜在风险。如果确保代码在没有警告的情况下编译,则不会发生堆污染。 diff --git a/docs/140.md b/docs/140.md index 8c1e4d2720c672150e5d9ba976171ccc351aa730..43fb0c685fc8407b2013f42404b66dd7e3eafd08 100644 --- a/docs/140.md +++ b/docs/140.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/package/createpkgs.html](https://docs.oracle.com/javase/tutorial/java/package/createpkgs.html) -要创建包,请选择包的名称(命名约定将在下一节中讨论),并在 _ 顶部放置一个带有该名称的`package`语句,每个包含类型的源文件 _(要包含在包中的类,接口,枚举和注释类型。 +要创建包,请选择包的名称(命名约定将在下一节中讨论),并在*顶部放置一个带有该名称的`package`语句,每个包含类型的源文件*(要包含在包中的类,接口,枚举和注释类型。 package 语句(例如,`package graphics;`)必须是源文件中的第一行。每个源文件中只能有一个 package 语句,它适用于文件中的所有类型。 diff --git a/docs/142.md b/docs/142.md index 3560314b9dec3f7bd2ada88f1ff46374b3b4436d..9b5eab20ed2b03a4155e6a80bce2424aebe4d0cb 100644 --- a/docs/142.md +++ b/docs/142.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/package/usepkgs.html](https://docs.oracle.com/javase/tutorial/java/package/usepkgs.html) -组成包的类型称为 _ 包成员 _。 +组成包的类型称为*包成员*。 要从包外部使用`public`包成员,您必须执行以下操作之一: @@ -30,7 +30,7 @@ graphics.Rectangle myRect = new graphics.Rectangle(); ``` -合格的名称可以不经常使用。但是,当重复使用名称时,重复键入名称会变得乏味,并且代码变得难以阅读。作为替代方案,您可以 _ 导入 _ 成员或其包,然后使用其简单名称。 +合格的名称可以不经常使用。但是,当重复使用名称时,重复键入名称会变得乏味,并且代码变得难以阅读。作为替代方案,您可以*导入*成员或其包,然后使用其简单名称。 ## 导入包成员 @@ -97,9 +97,9 @@ Another less common form of `import`, the _static import statement_, will be dis ## 包的表观层次结构 -首先,包似乎是分层的,但它们不是。例如,Java API 包括`java.awt`包,`java.awt.color`包,`java.awt.font`包以及以`java.awt`开头的许多其他包。但是,`java.awt.color`封装,`java.awt.font`封装和其他`java.awt.xxxx`封装 _ 不包含在`java.awt`封装中的 _ 中。前缀`java.awt`(Java 抽象窗口工具包)用于许多相关的包,以使关系明显,但不显示包含。 +首先,包似乎是分层的,但它们不是。例如,Java API 包括`java.awt`包,`java.awt.color`包,`java.awt.font`包以及以`java.awt`开头的许多其他包。但是,`java.awt.color`封装,`java.awt.font`封装和其他`java.awt.xxxx`封装*不包含在`java.awt`封装中的*中。前缀`java.awt`(Java 抽象窗口工具包)用于许多相关的包,以使关系明显,但不显示包含。 -导入`java.awt.*`会导入`java.awt`包中的所有类型,但 _ 不会导入 _ `java.awt.color`,`java.awt.font`或任何其他`java.awt.xxxx`包。如果您计划使用`java.awt.color`中的类和其他类型以及`java.awt`中的类,则必须导入包含所有文件的包: +导入`java.awt.*`会导入`java.awt`包中的所有类型,但*不会导入 _ `java.awt.color`,`java.awt.font`或任何其他`java.awt.xxxx`包。如果您计划使用`java.awt.color`中的类和其他类型以及`java.awt`中的类,则必须导入包含所有文件的包: ```java import java.awt.*; @@ -123,7 +123,7 @@ graphics.Rectangle rect; ``` -在某些情况下,您需要经常访问静态最终字段(常量)和来自一个或两个类的静态方法。反复对这些类的名称进行前缀可能会导致代码混乱。 _ 静态导入 _ 语句为您提供了一种导入要使用的常量和静态方法的方法,这样您就不需要为其类的名称添加前缀。 +在某些情况下,您需要经常访问静态最终字段(常量)和来自一个或两个类的静态方法。反复对这些类的名称进行前缀可能会导致代码混乱。*静态导入*语句为您提供了一种导入要使用的常量和静态方法的方法,这样您就不需要为其类的名称添加前缀。 `java.lang.Math`类定义`PI`常量和许多静态方法,包括计算正弦,余弦,切线,平方根,最大值,最小值,指数等的方法。例如, diff --git a/docs/143.md b/docs/143.md index 8b2e7e64180e205fdae58028a7a66468a33caec1..4a21b9b34b4d30ada1676239dba2f59e8a52d92b 100644 --- a/docs/143.md +++ b/docs/143.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/package/managingfiles.html](https://docs.oracle.com/javase/tutorial/java/package/managingfiles.html) -Java 平台的许多实现依赖于分层文件系统来管理源文件和类文件,尽管 _Java 语言规范 _ 不要求这样做。策略如下。 +Java 平台的许多实现依赖于分层文件系统来管理源文件和类文件,尽管 _Java 语言规范*不要求这样做。策略如下。 将类,接口,枚举或注释类型的源代码放在文本文件中,该文件的名称是类型的简单名称,其扩展名为`.java`。例如: @@ -68,7 +68,7 @@ class Helper{ 通过这样做,您可以将`classes`目录提供给其他程序员而不会泄露您的来源。您还需要以这种方式管理源文件和类文件,以便编译器和 Java 虚拟机(JVM)可以找到程序使用的所有类型。 -`classes`目录的完整路径`\classes diff --git a/docs/145.md b/docs/145.md index 455e26af66126c38597d0a4362d5052b41e33f5c..94959e80a197a0537dc8eb90aa4426bdee21a214 100644 --- a/docs/145.md +++ b/docs/145.md @@ -26,6 +26,6 @@ Destination Packages * [`Utilities`](question/Utilities.java) 1. 使用刚刚下载的源文件实现您在问题 1 到 3 中提出的更改。 -2. 编译修改后的源文件。 (_ 提示:_ 如果从命令行调用编译器(而不是使用构建器),请从包含刚刚创建的`mygame`目录的目录中调用编译器。) +2. 编译修改后的源文件。 (*提示:*如果从命令行调用编译器(而不是使用构建器),请从包含刚刚创建的`mygame`目录的目录中调用编译器。) [Check your answers.](packages-answers.html) \ No newline at end of file diff --git a/docs/146.md b/docs/146.md index 91da016a417efd632e0510dcf2e8865cac1cef74..64348990c42b2b3b2db988d132c840433017eb11 100644 --- a/docs/146.md +++ b/docs/146.md @@ -6,7 +6,7 @@ [![Trail icon](img/0689397fa9cc4e369d63fc92b3bb6f38.jpg) **例外**](exceptions/index.html) 解释了异常机制以及它如何用于处理错误和其他异常情况。本课程描述了异常是什么,如何抛出和捕获异常,一旦捕获异常后如何处理异常,以及如何使用异常类层次结构。 -[![Trail icon](img/0689397fa9cc4e369d63fc92b3bb6f38.jpg) **基本 I / O **](io/index.html) 涵盖用于基本输入和输出的 Java 平台类。它主要关注 _I / O 流 _,这是一个强大的概念,可以大大简化 I / O 操作。本课程还介绍了序列化,它允许程序将整个对象写入流并再次读回。然后,本课程将介绍一些文件系统操作,包括随机访问文件。最后,它简要介绍了新 I / O API 的高级功能。 +[![Trail icon](img/0689397fa9cc4e369d63fc92b3bb6f38.jpg) **基本 I / O **](io/index.html) 涵盖用于基本输入和输出的 Java 平台类。它主要关注 _I / O 流*,这是一个强大的概念,可以大大简化 I / O 操作。本课程还介绍了序列化,它允许程序将整个对象写入流并再次读回。然后,本课程将介绍一些文件系统操作,包括随机访问文件。最后,它简要介绍了新 I / O API 的高级功能。 [![Trail icon](img/0689397fa9cc4e369d63fc92b3bb6f38.jpg) **并发**](concurrency/index.html) 解释了如何编写同时执行多个任务的应用程序。 Java 平台的设计初衷是为了支持并发编程,在 Java 编程语言和 Java 类库中提供基本的并发支持。从 5.0 版开始,Java 平台还包含高级并发 API。本课程介绍了平台的基本并发支持,并总结了`java.util.concurrent`包中的一些高级 API。 diff --git a/docs/147.md b/docs/147.md index 79dedef54cf610e67bffb59f71826d66c7e4a288..4be4c1f70740d4da41b5eea5544a0f5d512bec80 100644 --- a/docs/147.md +++ b/docs/147.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html) -Java 编程语言使用 _ 异常 _ 来处理错误和其他异常事件。本课程介绍何时以及如何使用异常。 +Java 编程语言使用*异常*来处理错误和其他异常事件。本课程介绍何时以及如何使用异常。 ## [什么是例外?](definition.html) diff --git a/docs/148.md b/docs/148.md index 4f81eaf44cd677ab668fac07c366de2a68f8e87a..1349ae448693786addae8c0c1d4bf87478b43dae 100644 --- a/docs/148.md +++ b/docs/148.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html) -术语 _ 异常 _ 是短语“异常事件”的简写。 +术语*异常*是短语“异常事件”的简写。 * * * @@ -10,9 +10,9 @@ * * * -当方法中发生错误时,该方法会创建一个对象并将其交给运行时系统。该对象称为 _ 异常对象 _,包含有关错误的信息,包括错误发生时的类型和程序状态。创建异常对象并将其交给运行时系统称为 _ 抛出异常 _。 +当方法中发生错误时,该方法会创建一个对象并将其交给运行时系统。该对象称为*异常对象*,包含有关错误的信息,包括错误发生时的类型和程序状态。创建异常对象并将其交给运行时系统称为*抛出异常*。 -在方法抛出异常后,运行时系统会尝试查找要处理它的内容。处理异常的可能“某事”的集合是已被调用以获取发生错误的方法的有序方法列表。方法列表称为 _ 调用堆栈 _(参见下一个图)。 +在方法抛出异常后,运行时系统会尝试查找要处理它的内容。处理异常的可能“某事”的集合是已被调用以获取发生错误的方法的有序方法列表。方法列表称为*调用堆栈*(参见下一个图)。 ![The call stack showing three method calls, where the first method called has the exception handler.](img/a3ada6aaec8cd7196e8ac704d5f246c3.jpg) @@ -20,9 +20,9 @@ -运行时系统在调用堆栈中搜索包含可处理异常的代码块的方法。这段代码称为 _ 异常处理器 _。搜索从发生错误的方法开始,并按照调用方法的相反顺序继续通过调用堆栈。找到适当的处理器后,运行时系统会将异常传递给处理器。如果抛出的异常对象的类型与处理器可以处理的类型匹配,则认为异常处理器是合适的。 +运行时系统在调用堆栈中搜索包含可处理异常的代码块的方法。这段代码称为*异常处理器*。搜索从发生错误的方法开始,并按照调用方法的相反顺序继续通过调用堆栈。找到适当的处理器后,运行时系统会将异常传递给处理器。如果抛出的异常对象的类型与处理器可以处理的类型匹配,则认为异常处理器是合适的。 -选择的异常处理器称 _ 捕获异常 _。如果运行时系统穷举搜索调用堆栈上的所有方法而没有找到适当的异常处理器,如下图所示,则运行时系统(以及程序)终止。 +选择的异常处理器称*捕获异常*。如果运行时系统穷举搜索调用堆栈上的所有方法而没有找到适当的异常处理器,如下图所示,则运行时系统(以及程序)终止。 ![The call stack showing three method calls, where the first method called has the exception handler.](img/0d275d710fa7beac49efa736d9ad13f5.jpg) diff --git a/docs/149.md b/docs/149.md index 9b4613be6807dd863f3898fb715acf464ce19f9a..120e4c03bd0437c903103d49c7dba9add7d8bfac 100644 --- a/docs/149.md +++ b/docs/149.md @@ -13,19 +13,19 @@ ## 三种例外 -第一种例外是 _ 检查异常 _。这些是编写良好的应用程序应该预期和恢复的特殊条件。例如,假设应用程序提示用户输入文件名,然后通过将名称传递给`java.io.FileReader`的构造器来打开文件。通常,用户提供现有可读文件的名称,因此`FileReader`对象的构造成功,并且应用程序的执行正常进行。但有时用户提供不存在的文件的名称,构造器抛出`java.io.FileNotFoundException`。一个编写良好的程序将捕获此异常并通知用户该错误,可能提示更正的文件名。 +第一种例外是*检查异常*。这些是编写良好的应用程序应该预期和恢复的特殊条件。例如,假设应用程序提示用户输入文件名,然后通过将名称传递给`java.io.FileReader`的构造器来打开文件。通常,用户提供现有可读文件的名称,因此`FileReader`对象的构造成功,并且应用程序的执行正常进行。但有时用户提供不存在的文件的名称,构造器抛出`java.io.FileNotFoundException`。一个编写良好的程序将捕获此异常并通知用户该错误,可能提示更正的文件名。 -已检查的异常 _ 将 _ 置于“捕获”或“指定要求”中。除`Error`,`RuntimeException`及其子类指示的异常外,所有异常都是经过检查的异常。 +已检查的异常*将*置于“捕获”或“指定要求”中。除`Error`,`RuntimeException`及其子类指示的异常外,所有异常都是经过检查的异常。 -第二种例外是 _ 错误 _。这些是应用程序外部的特殊条件,应用程序通常无法预测或恢复。例如,假设应用程序成功打开文件以进行输入,但由于硬件或系统故障而无法读取文件。不成功的读取将抛出`java.io.IOError`。应用程序可能会选择捕获此异常,以便通知用户该问题 - 但它也可能有助于程序打印堆栈跟踪并退出。 +第二种例外是*错误*。这些是应用程序外部的特殊条件,应用程序通常无法预测或恢复。例如,假设应用程序成功打开文件以进行输入,但由于硬件或系统故障而无法读取文件。不成功的读取将抛出`java.io.IOError`。应用程序可能会选择捕获此异常,以便通知用户该问题 - 但它也可能有助于程序打印堆栈跟踪并退出。 -错误 _ 不受[捕获或指定要求]_ 的影响。错误是`Error`及其子类指示的异常。 +错误*不受[捕获或指定要求]_ 的影响。错误是`Error`及其子类指示的异常。 -第三种例外是 _ 运行时异常 _。这些是应用程序内部的异常条件,应用程序通常无法预测或恢复。这些通常表示编程错误,例如逻辑错误或 API 的不当使用。例如,考虑前面描述的应用程序将文件名传递给`FileReader`的构造器。如果逻辑错误导致`null`传递给构造器,构造器将抛出`NullPointerException`。应用程序可以捕获此异常,但消除导致异常发生的错误可能更有意义。 +第三种例外是*运行时异常*。这些是应用程序内部的异常条件,应用程序通常无法预测或恢复。这些通常表示编程错误,例如逻辑错误或 API 的不当使用。例如,考虑前面描述的应用程序将文件名传递给`FileReader`的构造器。如果逻辑错误导致`null`传递给构造器,构造器将抛出`NullPointerException`。应用程序可以捕获此异常,但消除导致异常发生的错误可能更有意义。 -运行时异常 _ 不受[捕获或指定要求]_ 的约束。运行时异常是`RuntimeException`及其子类指示的异常。 +运行时异常*不受[捕获或指定要求]_ 的约束。运行时异常是`RuntimeException`及其子类指示的异常。 -错误和运行时异常统称为 _ 未经检查的异常 _。 +错误和运行时异常统称为*未经检查的异常*。 ## 绕过 Catch 或指定 diff --git a/docs/15.md b/docs/15.md index a1bb130bf8e7b0b3e698bde7b4fd52c6601f2c3f..50d071352acf822c0ce6fd881beecc87609364be 100644 --- a/docs/15.md +++ b/docs/15.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/concepts/object.html](https://docs.oracle.com/javase/tutorial/java/concepts/object.html) -对象是理解 _ 面向对象 _ 技术的关键。现在环顾四周,你会发现许多真实物体的例子:你的狗,你的桌子,你的电视机,你的自行车。 +对象是理解*面向对象*技术的关键。现在环顾四周,你会发现许多真实物体的例子:你的狗,你的桌子,你的电视机,你的自行车。 -真实世界的物体共有两个特征:它们都具有 _ 状态 _ 和 _ 行为 _。狗有状态(名称,颜色,品种,饥饿)和行为(吠叫,取出,摇尾)。自行车还具有状态(当前档位,当前踏板节奏,当前速度)和行为(改变档位,改变踏板节奏,应用制动器)。识别真实世界对象的状态和行为是开始思考面向对象编程的好方法。 +真实世界的物体共有两个特征:它们都具有*状态*和*行为*。狗有状态(名称,颜色,品种,饥饿)和行为(吠叫,取出,摇尾)。自行车还具有状态(当前档位,当前踏板节奏,当前速度)和行为(改变档位,改变踏板节奏,应用制动器)。识别真实世界对象的状态和行为是开始思考面向对象编程的好方法。 现在花点时间观察您附近区域的真实物体。对于您看到的每个对象,请问自己两个问题:“这个对象可能存在哪些状态?”和“这个对象可以执行什么样的行为?”。一定要记下你的观察结果。和你一样,你会发现现实世界的物体的复杂程度各不相同;您的桌面灯可能只有两种可能的状态(打开和关闭)和两种可能的行为(打开,关闭),但您的桌面电台可能有其他状态(开,关,当前音量,当前电台)和行为(打开) ,关闭,增加音量,减少音量,搜索,扫描和调整)。您可能还会注意到,某些对象反过来也会包含其他对象。这些现实世界的观察都转化为面向对象编程的世界。 @@ -14,7 +14,7 @@ -软件对象在概念上类似于现实世界的对象:它们也包括状态和相关行为。对象将其状态存储在 _ 字段 _(某些编程语言中的变量)中,并通过 _ 方法 _(某些编程语言中的函数)公开其行为。方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制。隐藏内部状态并要求通过对象的方法执行所有交互被称为 _ 数据封装 _ - 面向对象编程的基本原则。 +软件对象在概念上类似于现实世界的对象:它们也包括状态和相关行为。对象将其状态存储在*字段*(某些编程语言中的变量)中,并通过*方法*(某些编程语言中的函数)公开其行为。方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制。隐藏内部状态并要求通过对象的方法执行所有交互被称为*数据封装 _ - 面向对象编程的基本原则。 考虑一下自行车,例如: @@ -31,4 +31,4 @@ 1. 模块化:可以独立于其他对象的源代码编写和维护对象的源代码。一旦创建,对象就可以轻松地在系统内部传递。 2. 信息隐藏:通过仅与对象的方法交互,其内部实现的细节仍然隐藏在外部世界之外。 3. 代码重用:如果对象已存在(可能由其他软件开发人员编写),则可以在程序中使用该对象。这允许专家实现/测试/调试复杂的,特定于任务的对象,然后您可以信任这些对象在您自己的代码中运行。 -4. 可插拔性和调试简便性:如果某个特定对象有问题,您只需将其从应用程序中删除,然后插入另一个对象作为替代对象。这类似于解决现实世界中的机械问题。如果螺栓断裂,则将 _ 替换为 _,而不是整个机器。 \ No newline at end of file +4. 可插拔性和调试简便性:如果某个特定对象有问题,您只需将其从应用程序中删除,然后插入另一个对象作为替代对象。这类似于解决现实世界中的机械问题。如果螺栓断裂,则将*替换为*,而不是整个机器。 \ No newline at end of file diff --git a/docs/153.md b/docs/153.md index d73cdbd8a2cb320d9b255bc9e7e4ddd266a74b3f..2cd47bc24e9c9dc92074f30370537b218d92029f 100644 --- a/docs/153.md +++ b/docs/153.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html) -当`try`程序段退出时,`finally`程序段 _ 始终 _ 执行。这确保即使发生意外异常也会执行`finally`块。但是`finally`不仅仅用于异常处理 - 它允许程序员避免被`return`,`continue`或`break`意外绕过清理代码。将清理代码放在`finally`块中始终是一种很好的做法,即使没有预期的例外情况也是如此。 +当`try`程序段退出时,`finally`程序段*始终*执行。这确保即使发生意外异常也会执行`finally`块。但是`finally`不仅仅用于异常处理 - 它允许程序员避免被`return`,`continue`或`break`意外绕过清理代码。将清理代码放在`finally`块中始终是一种很好的做法,即使没有预期的例外情况也是如此。 * * * diff --git a/docs/154.md b/docs/154.md index 08157ba5f694525498999602ab9cf0898c139288..d979238f3ed9a57afb66f5fdd2b3da88debf714c 100644 --- a/docs/154.md +++ b/docs/154.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) -`try` -with-resources 语句是声明一个或多个资源的`try`语句。 _ 资源 _ 是一个在程序完成后必须关闭的对象。 `try` -with-resources 语句确保在语句结束时关闭每个资源。实现`java.lang.AutoCloseable`的任何对象(包括实现`java.io.Closeable`的所有对象)都可以用作资源。 +`try` -with-resources 语句是声明一个或多个资源的`try`语句。*资源*是一个在程序完成后必须关闭的对象。 `try` -with-resources 语句确保在语句结束时关闭每个资源。实现`java.lang.AutoCloseable`的任何对象(包括实现`java.io.Closeable`的所有对象)都可以用作资源。 以下示例从文件中读取第一行。它使用`BufferedReader`实例从文件中读取数据。 `BufferedReader`是程序完成后必须关闭的资源: @@ -71,7 +71,7 @@ public static void writeToFileZipFileContents(String zipFileName, ``` -在此示例中,`try` -with-resources 语句包含两个以分号分隔的声明:`ZipFile`和`BufferedWriter`。当直接跟随它的代码块正常或由于异常终止时,`BufferedWriter`和`ZipFile`对象的`close`方法将按此顺序自动调用。请注意,资源的`close`方法在它们创建的 _ 相反 _ 顺序中调用。 +在此示例中,`try` -with-resources 语句包含两个以分号分隔的声明:`ZipFile`和`BufferedWriter`。当直接跟随它的代码块正常或由于异常终止时,`BufferedWriter`和`ZipFile`对象的`close`方法将按此顺序自动调用。请注意,资源的`close`方法在它们创建的*相反*顺序中调用。 以下示例使用`try` -with-resources 语句自动关闭`java.sql.Statement`对象: diff --git a/docs/156.md b/docs/156.md index fea0b6378ef53b6b9a0f9921b1ef8609387fa10d..bd00e93aef05e3e903665ffea34d33db7a62ebac 100644 --- a/docs/156.md +++ b/docs/156.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html) -上一节介绍了如何为`ListOfNumbers`类中的`writeList`方法编写异常处理器。有时,代码可以捕获可能在其中发生的异常。但是,在其他情况下,最好让调用堆栈中的方法进一步处理异常。例如,如果您将`ListOfNumbers`类作为类包的一部分提供,则可能无法预测包的所有用户的需求。在这种情况下,最好 _ 而不是 _ 捕获异常并允许进一步调用堆栈的方法来处理它。 +上一节介绍了如何为`ListOfNumbers`类中的`writeList`方法编写异常处理器。有时,代码可以捕获可能在其中发生的异常。但是,在其他情况下,最好让调用堆栈中的方法进一步处理异常。例如,如果您将`ListOfNumbers`类作为类包的一部分提供,则可能无法预测包的所有用户的需求。在这种情况下,最好*而不是*捕获异常并允许进一步调用堆栈的方法来处理它。 如果`writeList`方法没有捕获可能在其中发生的已检查异常,则`writeList`方法必须指定它可以抛出这些异常。让我们修改原始的`writeList`方法来指定它可以抛出而不是捕获它们的异常。提醒您,这是无法编译的`writeList`方法的原始版本。 diff --git a/docs/157.md b/docs/157.md index bdd7beaf8f1649644f0a188e1338ba5123a4c2fd..d6799f710cb2297273cde27ca74731dd31016233 100644 --- a/docs/157.md +++ b/docs/157.md @@ -8,7 +8,7 @@ 您还可以创建自己的异常类来表示您编写的类中可能出现的问题。实际上,如果您是程序包开发人员,则可能必须创建自己的一组异常类,以允许用户将程序包中可能发生的错误与 Java 平台或其他程序包中发生的错误区分开来。 -您还可以创建 _ 链式 _ 例外。有关更多信息,请参阅[链式异常](../../essential/exceptions/chained.html)部分。 +您还可以创建*链式*例外。有关更多信息,请参阅[链式异常](../../essential/exceptions/chained.html)部分。 ## 抛出声明 @@ -53,7 +53,7 @@ Throwable 类。 ## 错误类 -当发生 Java 虚拟机中的动态链接故障或其他硬故障时,虚拟机将抛出`Error`。简单的程序通常会 _ 而不是 _ 捕获或抛出`Error`。 +当发生 Java 虚拟机中的动态链接故障或其他硬故障时,虚拟机将抛出`Error`。简单的程序通常会*而不是*捕获或抛出`Error`。 ## 例外类 diff --git a/docs/158.md b/docs/158.md index 5fd7bd9065ba1cf13dc5e82c168e6565ee791b25..bb219a26e044a01133ab870f736d8e4e4a40a40d 100644 --- a/docs/158.md +++ b/docs/158.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/exceptions/chained.html](https://docs.oracle.com/javase/tutorial/essential/exceptions/chained.html) -应用程序通常会通过抛出另一个异常来响应异常。实际上,第一个例外 _ 导致 _ 第二个例外。了解一个异常何时导致另一个异常非常有用。 _ 链式异常 _ 帮助程序员做到这一点。 +应用程序通常会通过抛出另一个异常来响应异常。实际上,第一个例外*导致*第二个例外。了解一个异常何时导致另一个异常非常有用。*链式异常*帮助程序员做到这一点。 以下是`Throwable`中支持链式异常的方法和构造器。 diff --git a/docs/16.md b/docs/16.md index 902bebc5155afcf43abbbb8b61f58e752be11aa4..8a3e389bcf7f557d5ece76f151d1cd47e35765f3 100644 --- a/docs/16.md +++ b/docs/16.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/concepts/class.html](https://docs.oracle.com/javase/tutorial/java/concepts/class.html) -在现实世界中,您经常会发现许多相同类型的单个对象。可能存在数千种其他自行车,所有相同的品牌和型号。每辆自行车都是使用相同的蓝图构建的,因此包含相同的组件。在面向对象的术语中,我们说你的自行车是类物体的 _ 实例 _,被称为自行车。 _ 类 _ 是创建单个对象的蓝图。 +在现实世界中,您经常会发现许多相同类型的单个对象。可能存在数千种其他自行车,所有相同的品牌和型号。每辆自行车都是使用相同的蓝图构建的,因此包含相同的组件。在面向对象的术语中,我们说你的自行车是类物体的*实例*,被称为自行车。*类*是创建单个对象的蓝图。 以下 [`Bicycle`](examples/Bicycle.java) 类是自行车的一种可能实现方式: @@ -40,7 +40,7 @@ class Bicycle { Java 编程语言的语法对您来说很新,但这个类的设计基于之前对自行车对象的讨论。字段`cadence`,`speed`和`gear`表示对象的状态,方法(`changeCadence`,`changeGear`,`speedUp`等)定义其与外部世界的交互。 -您可能已经注意到`Bicycle`类不包含`main`方法。那是因为它不是一个完整的应用程序;它只是自行车的蓝图,可能是 _ 在应用程序中使用 _。创建和使用新`Bicycle`对象的责任属于应用程序中的其他类。 +您可能已经注意到`Bicycle`类不包含`main`方法。那是因为它不是一个完整的应用程序;它只是自行车的蓝图,可能是*在应用程序中使用*。创建和使用新`Bicycle`对象的责任属于应用程序中的其他类。 这是一个 [`BicycleDemo`](examples/BicycleDemo.java) 类,它创建两个独立的`Bicycle`对象并调用它们的方法: diff --git a/docs/160.md b/docs/160.md index 989287f324743561b5ce8dd5dcea8691167648cc..c4516873ce1e65c6314668c7840f4ccd6d92a430 100644 --- a/docs/160.md +++ b/docs/160.md @@ -10,7 +10,7 @@ 运行时异常可以在程序中的任何地方发生,而在典型的程序中,它们可以非常多。必须在每个方法声明中添加运行时异常会降低程序的清晰度。因此,编译器不要求您捕获或指定运行时异常(尽管您可以)。 -抛出`RuntimeException`的常见做法的一种情况是当用户错误地调用方法时。例如,一个方法可以检查其中一个参数是否错误`null`。如果参数是`null`,则该方法可能抛出`NullPointerException`,这是 _ 未检查 _ 异常。 +抛出`RuntimeException`的常见做法的一种情况是当用户错误地调用方法时。例如,一个方法可以检查其中一个参数是否错误`null`。如果参数是`null`,则该方法可能抛出`NullPointerException`,这是*未检查*异常。 一般来说,不要抛出`RuntimeException`或创建`RuntimeException`的子类,因为你不想被指定你的方法可以抛出的异常所困扰。 diff --git a/docs/162.md b/docs/162.md index 139b42f305653f4bf2afb7bae69b35cd618e8771..c80d843f01266981ec439e86670b586bc2e21420 100644 --- a/docs/162.md +++ b/docs/162.md @@ -12,4 +12,4 @@ `try`语句应包含至少一个`catch`块或`finally`块,并且可能包含多个`catch`块。 -异常对象的类指示抛出的异常类型。异常对象可以包含有关错误的更多信息,包括错误消息。对于异常链接,异常可以指向导致它的异常,这可以反过来指向导致 _ 它 _ 的异常,依此类推。 \ No newline at end of file +异常对象的类指示抛出的异常类型。异常对象可以包含有关错误的更多信息,包括错误消息。对于异常链接,异常可以指向导致它的异常,这可以反过来指向导致*它*的异常,依此类推。 \ No newline at end of file diff --git a/docs/164.md b/docs/164.md index aaece2315dc2a78102c7335dc88251f6a81b1afe..e1a92bc06d664ea6d2d06b7f1bcce3cdf52a9deb 100644 --- a/docs/164.md +++ b/docs/164.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/index.html](https://docs.oracle.com/javase/tutorial/essential/io/index.html) -本课程介绍用于基本 I / O 的 Java 平台类。它首先关注 _I / O 流 _,这是一个强大的概念,可以大大简化 I / O 操作。本课程还介绍了序列化,它允许程序将整个对象写入流并再次读回。然后,本课将介绍文件 I / O 和文件系统操作,包括随机访问文件。 +本课程介绍用于基本 I / O 的 Java 平台类。它首先关注 _I / O 流*,这是一个强大的概念,可以大大简化 I / O 操作。本课程还介绍了序列化,它允许程序将整个对象写入流并再次读回。然后,本课将介绍文件 I / O 和文件系统操作,包括随机访问文件。 `I/O Streams`部分涵盖的大多数类都在`java.io`包中。 `File I/O`部分涵盖的大多数类都在`java.nio.file`包中。 diff --git a/docs/165.md b/docs/165.md index ed901364f8448bdbd25f81908b4688519c8166a9..7ae10240778a546e309ff5ed19e78f721450267f 100644 --- a/docs/165.md +++ b/docs/165.md @@ -2,11 +2,11 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/streams.html](https://docs.oracle.com/javase/tutorial/essential/io/streams.html) -_I / O 流 _ 表示输入源或输出目的地。流可以表示许多不同类型的源和目标,包括磁盘文件,设备,其他程序和内存阵列。 +_I / O 流*表示输入源或输出目的地。流可以表示许多不同类型的源和目标,包括磁盘文件,设备,其他程序和内存阵列。 Streams 支持许多不同类型的数据,包括简单字节,原始数据类型,本地化字符和对象。有些流只传递数据;其他人以有用的方式操纵和转换数据。 -无论它们如何在内部工作,所有流都为使用它们的程序提供相同的简单模型:流是一系列数据。程序使用 _ 输入流 _ 从源读取数据,一次一个项目: +无论它们如何在内部工作,所有流都为使用它们的程序提供相同的简单模型:流是一系列数据。程序使用*输入流*从源读取数据,一次一个项目: ![Reading information into a program.](img/8be93be95ea565ddec4a549d20ec976c.jpg) @@ -14,7 +14,7 @@ Streams 支持许多不同类型的数据,包括简单字节,原始数据类 -程序使用 _ 输出流 _ 将数据写入目标,一次一个项目: +程序使用*输出流*将数据写入目标,一次一个项目: ![Writing information from a program.](img/f76b8c03f1edd2f06496f57fa7bbb906.jpg) diff --git a/docs/166.md b/docs/166.md index 3f711189b679f90feeaed3ea09690ea3c437770f..279ebda817275ed3bc17eada0ab2915404fa2bb2 100644 --- a/docs/166.md +++ b/docs/166.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html](https://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html) -程序使用 _ 字节流 _ 执行 8 位字节的输入和输出。所有字节流类都来自 [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html) 和 [`OutputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html) 。 +程序使用*字节流*执行 8 位字节的输入和输出。所有字节流类都来自 [`InputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html) 和 [`OutputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html) 。 有许多字节流类。为了演示字节流的工作原理,我们将重点关注文件 I / O 字节流, [`FileInputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/FileInputStream.html) 和 [`FileOutputStream`](https://docs.oracle.com/javase/8/docs/api/java/io/FileOutputStream.html) 。其他种类的字节流的使用方式大致相同;它们的不同之处主要在于它们的构造方式。 diff --git a/docs/168.md b/docs/168.md index 45ab6a423cdb619500781fed69c6c9a3d7288481..c45a3e6462d401ae12ccb121c51b64d0589369aa 100644 --- a/docs/168.md +++ b/docs/168.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/buffers.html](https://docs.oracle.com/javase/tutorial/essential/io/buffers.html) -到目前为止,我们看到的大多数示例都使用 _ 无缓冲 _ I / O.这意味着每个读取或写入请求都由底层操作系统直接处理。这可以使程序效率低得多,因为每个这样的请求经常触发磁盘访问,网络活动或一些相对昂贵的其他操作。 +到目前为止,我们看到的大多数示例都使用*无缓冲 _ I / O.这意味着每个读取或写入请求都由底层操作系统直接处理。这可以使程序效率低得多,因为每个这样的请求经常触发磁盘访问,网络活动或一些相对昂贵的其他操作。 -为了减少这种开销,Java 平台实现了 _ 缓冲的 _ I / O 流。缓冲输入流从称为 _ 缓冲区 _ 的存储区读取数据;仅当缓冲区为空时才调用本机输入 API。类似地,缓冲输出流将数据写入缓冲区,并且仅在缓冲区已满时才调用本机输出 API。 +为了减少这种开销,Java 平台实现了*缓冲的 _ I / O 流。缓冲输入流从称为*缓冲区*的存储区读取数据;仅当缓冲区为空时才调用本机输入 API。类似地,缓冲输出流将数据写入缓冲区,并且仅在缓冲区已满时才调用本机输出 API。 程序可以使用我们现在多次使用的包装习惯用法将无缓冲的流转换为缓冲流,其中无缓冲的流对象被传递给缓冲流类的构造器。以下是如何修改`CopyCharacters`示例中的构造器调用以使用缓冲 I / O: @@ -18,7 +18,7 @@ outputStream = new BufferedWriter(new FileWriter("characteroutput.txt")); ## 刷新缓冲流 -在关键点写出缓冲区通常是有意义的,而无需等待它填充。这被称为 _ 冲洗 _ 缓冲液。 +在关键点写出缓冲区通常是有意义的,而无需等待它填充。这被称为*冲洗*缓冲液。 一些缓冲输出类支持 _autoflush_ ,由可选的构造器参数指定。启用 autoflush 时,某些键事件会导致刷新缓冲区。例如,autoflush `PrintWriter`对象在`println`或`format`的每次调用时刷新缓冲区。有关这些方法的更多信息,请参见[格式化](formatting.html)。 diff --git a/docs/17.md b/docs/17.md index 453d1ca0f52e875c3eb828e553ee7288a2beca01..5fd38529050ec975acc25b397f7d83a65b4290f4 100644 --- a/docs/17.md +++ b/docs/17.md @@ -4,7 +4,7 @@ 不同种类的物体通常彼此具有一定的共同量。例如,山地自行车,公路自行车和双人自行车都具有自行车的特性(当前速度,当前踏板节奏,当前档位)。然而,每个还定义了使它们与众不同的其他功能:双人自行车有两个座位和两套车把;公路自行车有把手下降;一些山地自行车有一个额外的链环,使它们的齿轮比更低。 -面向对象编程允许类 _ 继承 _ 常用的其他类的状态和行为。在这个例子中,`Bicycle`现在变成`MountainBike`,`RoadBike`和`TandemBike`的 _ 超类 _。在 Java 编程语言中,每个类都允许有一个直接的超类,每个超类都有可能存在无限数量的 _ 子类 _: +面向对象编程允许类*继承*常用的其他类的状态和行为。在这个例子中,`Bicycle`现在变成`MountainBike`,`RoadBike`和`TandemBike`的*超类*。在 Java 编程语言中,每个类都允许有一个直接的超类,每个超类都有可能存在无限数量的*子类*: ![A diagram of classes in a hierarchy.](img/a3b4c6e8955f9562ddc1a464806476e7.jpg) diff --git a/docs/171.md b/docs/171.md index cc8e177908f4b458bea15692f457ebc50aeb5935..0a4372918710acf6cc087373e8a75d1ea8901ce3 100644 --- a/docs/171.md +++ b/docs/171.md @@ -51,7 +51,7 @@ The square root of 5 is 2.23606797749979. ## `format`方法 -`format`方法基于 _ 格式字符串 _ 格式化多个参数。格式字符串由嵌入 _ 格式说明符 _ 的静态文本组成;除格式说明符外,格式字符串输出不变。 +`format`方法基于*格式字符串*格式化多个参数。格式字符串由嵌入*格式说明符*的静态文本组成;除格式说明符外,格式字符串输出不变。 格式字符串支持许多功能。在本教程中,我们将介绍一些基础知识。有关完整说明,请参阅 API 规范中的 [`format string syntax`](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#syntax) 。 @@ -76,7 +76,7 @@ The square root of 2 is 1.414214. ``` -与本例中使用的三个一样,所有格式说明符都以`%`开头,以 1 或 2 字符 _ 转换 _ 结束,指定生成的格式化输出的种类。这里使用的三个转换是: +与本例中使用的三个一样,所有格式说明符都以`%`开头,以 1 或 2 字符*转换*结束,指定生成的格式化输出的种类。这里使用的三个转换是: * `d`将整数值格式化为十进制值。 * `f`将浮点值格式化为十进制值。 diff --git a/docs/172.md b/docs/172.md index ebe5162ac43c5ddf693fe4323268c650858086c2..257f4f4e2c84718951d6739ce45249f7885078f2 100644 --- a/docs/172.md +++ b/docs/172.md @@ -8,7 +8,7 @@ 标准流是许多操作系统的一个特性。默认情况下,他们从键盘读取输入并将输出写入显示器。它们还支持文件和程序之间的 I / O,但该功能由命令行解释器控制,而不是程序。 -Java 平台支持三种标准流:_ 标准输入 _,通过`System.in`访问; _ 标准输出 _,通过`System.out`访问;和 _ 标准错误 _,通过`System.err`访问。这些对象是自动定义的,不需要打开。标准输出和标准误差均用于输出;单独具有错误输出允许用户将常规输出转移到文件并仍然能够读取错误消息。有关更多信息,请参阅命令行解释程序的文档。 +Java 平台支持三种标准流:*标准输入*,通过`System.in`访问; _ 标准输出*,通过`System.out`访问;和*标准错误*,通过`System.err`访问。这些对象是自动定义的,不需要打开。标准输出和标准误差均用于输出;单独具有错误输出允许用户将常规输出转移到文件并仍然能够读取错误消息。有关更多信息,请参阅命令行解释程序的文档。 您可能希望标准流是字符流,但由于历史原因,它们是字节流。 `System.out`和`System.err`定义为 [`PrintStream`](https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html) 对象。虽然它在技术上是字节流,但`PrintStream`利用内部字符流对象来模拟字符流的许多功能。 diff --git a/docs/173.md b/docs/173.md index 076ff865c00e90cacb8e1844bfae16f895670853..a8c025a0234fcaa1490bc5f72148064391e93511 100644 --- a/docs/173.md +++ b/docs/173.md @@ -86,4 +86,4 @@ try { `DataStreams`使用一种非常糟糕的编程技术:它使用浮点数来表示货币值。通常,浮点对于精确值是不利的。对于小数部分尤其如此,因为常见值(例如`0.1`)没有二进制表示。 -用于货币值的正确类型是 [`java.math.BigDecimal`](https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html) 。不幸的是,`BigDecimal`是一种对象类型,因此它不适用于数据流。但是,`BigDecimal` _ 将 _ 与对象流一起使用,这将在下一节中介绍。 \ No newline at end of file +用于货币值的正确类型是 [`java.math.BigDecimal`](https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html) 。不幸的是,`BigDecimal`是一种对象类型,因此它不适用于数据流。但是,`BigDecimal` _ 将*与对象流一起使用,这将在下一节中介绍。 \ No newline at end of file diff --git a/docs/176.md b/docs/176.md index 6699c3f5087e289da8eada15f8f80b678fc34553..fc9e6e4de5a287d22c0ce20379b88a7849c3c39a 100644 --- a/docs/176.md +++ b/docs/176.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/path.html](https://docs.oracle.com/javase/tutorial/essential/io/path.html) -文件系统以某种形式存储和组织某种形式的媒体上的文件,通常是一个或多个硬盘驱动器,以便可以容易地检索它们。目前使用的大多数文件系统都将文件存储在树(或 _ 分层 _)结构中。在树的顶部是一个(或多个)根节点。在根节点下,有文件和目录(Microsoft Windows 中的 _ 文件夹 _)。每个目录都可以包含文件和子目录,而这些文件和子目录又可以包含文件和子目录,等等,可能达到几乎无限的深度。 +文件系统以某种形式存储和组织某种形式的媒体上的文件,通常是一个或多个硬盘驱动器,以便可以容易地检索它们。目前使用的大多数文件系统都将文件存储在树(或*分层*)结构中。在树的顶部是一个(或多个)根节点。在根节点下,有文件和目录(Microsoft Windows 中的*文件夹*)。每个目录都可以包含文件和子目录,而这些文件和子目录又可以包含文件和子目录,等等,可能达到几乎无限的深度。 本节包括以下内容: @@ -32,15 +32,15 @@ C:\home\sally\statusReport ``` -用于分隔目录名称的字符(也称为 _ 分隔符 _)特定于文件系统:Solaris OS 使用正斜杠(`/`),Microsoft Windows 使用反斜杠斜杠(`\` ])。 +用于分隔目录名称的字符(也称为*分隔符*)特定于文件系统:Solaris OS 使用正斜杠(`/`),Microsoft Windows 使用反斜杠斜杠(`\` ])。 -路径是 _ 相对 _ 或 _ 绝对 _。绝对路径始终包含查找文件所需的根元素和完整目录列表。例如,`/home/sally/statusReport`是绝对路径。查找文件所需的所有信息都包含在路径字符串中。 +路径是*相对*或*绝对*。绝对路径始终包含查找文件所需的根元素和完整目录列表。例如,`/home/sally/statusReport`是绝对路径。查找文件所需的所有信息都包含在路径字符串中。 相对路径需要与另一个路径组合才能访问文件。例如,`joe/foo`是相对路径。如果没有更多信息,程序将无法在文件系统中可靠地找到`joe/foo`目录。 -文件系统对象通常是目录或文件。每个人都熟悉这些对象。但是一些文件系统也支持符号链接的概念。符号链接也称为 _ 符号链接 _ 或 _ 软链接 _。 +文件系统对象通常是目录或文件。每个人都熟悉这些对象。但是一些文件系统也支持符号链接的概念。符号链接也称为*符号链接*或*软链接*。 -_ 符号链接 _ 是一个特殊文件,用作对另一个文件的引用。在大多数情况下,符号链接对应用程序是透明的,符号链接上的操作会自动重定向到链接的目标。 (指向的文件或目录称为链接的 _ 目标 _。)例外情况是删除符号链接或重命名,在这种情况下链接本身被删除,或重命名而不是目标链接。 +_ 符号链接*是一个特殊文件,用作对另一个文件的引用。在大多数情况下,符号链接对应用程序是透明的,符号链接上的操作会自动重定向到链接的目标。 (指向的文件或目录称为链接的*目标*。)例外情况是删除符号链接或重命名,在这种情况下链接本身被删除,或重命名而不是目标链接。 在下图中,`logFile`似乎是用户的常规文件,但它实际上是`dir/logs/HomeLogFile`的符号链接。 `HomeLogFile`是链接的目标。 @@ -52,7 +52,7 @@ Example of a Symbolic Link. 符号链接通常对用户是透明的。读取或写入符号链接与读取或写入任何其他文件或目录相同。 -解析链接的短语 _ 意味着用文件系统中的实际位置替换符号链接。在该示例中,解析`logFile`产生`dir/logs/HomeLogFile`。_ +解析链接的短语*意味着用文件系统中的实际位置替换符号链接。在该示例中,解析`logFile`产生`dir/logs/HomeLogFile`。_ 在实际场景中,大多数文件系统都可以自由使用符号链接。偶尔,粗心创建的符号链接可能会导致循环引用。当链接的目标指向原始链接时,会发生循环引用。循环引用可能是间接引用:目录`a`指向目录`b`,它指向目录`c`,其中包含指向目录`a`的子目录。当程序递归地遍历目录结构时,循环引用可能会导致严重破坏。但是,此方案已被考虑,并且不会导致程序无限循环。 diff --git a/docs/178.md b/docs/178.md index b3224fe2bc126f74b0fff1925fcc39ec1c74e66d..7d329461a1fb2d8d4da12c58eea8ecb47a34a7ec 100644 --- a/docs/178.md +++ b/docs/178.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html](https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html) -[`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html) 类包括各种方法,可用于获取有关路径,访问路径元素,将路径转换为其他形式或提取路径部分的信息。还存在用于匹配路径字符串的方法和用于去除路径中的冗余的方法。本课程介绍了这些`Path`方法,有时称为 _ 语法 _ 操作,因为它们在路径上运行,不访问文件系统。 +[`Path`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html) 类包括各种方法,可用于获取有关路径,访问路径元素,将路径转换为其他形式或提取路径部分的信息。还存在用于匹配路径字符串的方法和用于去除路径中的冗余的方法。本课程介绍了这些`Path`方法,有时称为*语法*操作,因为它们在路径上运行,不访问文件系统。 本节包括以下内容: @@ -186,7 +186,7 @@ try { ``` -您可以使用`resolve`方法组合路径。传入 _ 部分路径 _,该路径不包含根元素,并且该部分路径将附加到原始路径。 +您可以使用`resolve`方法组合路径。传入*部分路径*,该路径不包含根元素,并且该部分路径将附加到原始路径。 例如,请考虑以下代码段: @@ -213,7 +213,7 @@ Paths.get("foo").resolve("/home/joe"); ``` -编写文件 I / O 代码时的一个常见要求是能够构建从文件系统中的一个位置到另一个位置的路径。您可以使用`relativize`方法来满足此要求。此方法构造一个源自原始路径并在传入路径指定的位置结束的路径。新路径是 _ 相对于原始路径的 _。 +编写文件 I / O 代码时的一个常见要求是能够构建从文件系统中的一个位置到另一个位置的路径。您可以使用`relativize`方法来满足此要求。此方法构造一个源自原始路径并在传入路径指定的位置结束的路径。新路径是*相对于原始路径的*。 例如,考虑定义为`joe`和`sally`的两个相对路径: diff --git a/docs/179.md b/docs/179.md index f73c2d766333794d10d53e37a9bbb2b3494f42b3..3da2238651fe73bb185a96d940baa0b75549f1be 100644 --- a/docs/179.md +++ b/docs/179.md @@ -92,11 +92,11 @@ Files.move(source, 多个`Files`方法(如`move`)可以在某些文件系统中以原子方式执行某些操作。 -_ 原子文件操作 _ 是不能被中断或“部分”执行的操作。执行整个操作或操作失败。当您在文件系统的同一区域上运行多个进程时,这很重要,并且您需要保证每个进程都访问一个完整的文件。 +_ 原子文件操作*是不能被中断或“部分”执行的操作。执行整个操作或操作失败。当您在文件系统的同一区域上运行多个进程时,这很重要,并且您需要保证每个进程都访问一个完整的文件。 -许多文件 I / O 方法支持 _ 方法链 _ 的概念。 +许多文件 I / O 方法支持*方法链*的概念。 -您首先调用返回对象的方法。然后,您立即在 _ 上调用 _ 对象的方法,该对象返回另一个对象,依此类推。许多 I / O 示例使用以下技术: +您首先调用返回对象的方法。然后,您立即在*上调用*对象的方法,该对象返回另一个对象,依此类推。许多 I / O 示例使用以下技术: ```java String value = Charset.defaultCharset().decode(buf).toString(); diff --git a/docs/18.md b/docs/18.md index 946c538e1986b77ce4bd6c46cb7273e524dfcb04..8fa4ae7487231290ab7de5966cc0b448510164a3 100644 --- a/docs/18.md +++ b/docs/18.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/concepts/interface.html](https://docs.oracle.com/javase/tutorial/java/concepts/interface.html) -正如您已经了解的那样,对象通过它们公开的方法定义它们与外部世界的交互。方法与外界形成对象的 _ 接口 _;例如,电视机正面的按钮是您与塑料外壳另一侧电线之间的接口。按“电源”按钮打开和关闭电视。 +正如您已经了解的那样,对象通过它们公开的方法定义它们与外部世界的交互。方法与外界形成对象的*接口 _;例如,电视机正面的按钮是您与塑料外壳另一侧电线之间的接口。按“电源”按钮打开和关闭电视。 在最常见的形式中,接口是一组具有空体的相关方法。自行车的行为(如果指定为接口)可能如下所示: diff --git a/docs/184.md b/docs/184.md index 6f01a4e0ceb3a5c3b23070b68f00109b929ae5ba..368d315ce2e6d070247816ac238e4d7873086044 100644 --- a/docs/184.md +++ b/docs/184.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html](https://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html) -_ 元数据 _ 的定义是“关于其他数据的数据”。使用文件系统,数据包含在其文件和目录中,元数据跟踪有关每个对象的信息:它是常规文件,目录还是链接?它的大小,创建日期,上次修改日期,文件所有者,组所有者和访问权限是什么? +_ 元数据*的定义是“关于其他数据的数据”。使用文件系统,数据包含在其文件和目录中,元数据跟踪有关每个对象的信息:它是常规文件,目录还是链接?它的大小,创建日期,上次修改日期,文件所有者,组所有者和访问权限是什么? -文件系统的元数据通常称为其 _ 文件属性 _。 `Files`类包括可用于获取文件的单个属性或设置属性的方法。 +文件系统的元数据通常称为其*文件属性*。 `Files`类包括可用于获取文件的单个属性或设置属性的方法。 | 方法 | 评论 | | --- | --- | @@ -29,7 +29,7 @@ _ 元数据 _ 的定义是“关于其他数据的数据”。使用文件系统 | [`readAttributes(Path, String, LinkOption...)`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAttributes-java.nio.file.Path-java.lang.String-java.nio.file.LinkOption...-) | 将文件的属性读取为批量操作。 `String`参数标识要读取的属性。 | | [`readAttributes(Path, Class<A>, LinkOption...)`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAttributes-java.nio.file.Path-java.lang.Class-java.nio.file.LinkOption...-) | 将文件的属性读取为批量操作。 `Class<A>`参数是请求的属性类型,该方法返回该类的对象。 | -在显示`readAttributes`方法的示例之前,应该提到的是,不同的文件系统对于应该跟踪哪些属性有不同的概念。因此,相关文件属性被组合在一起成为视图。 _ 视图 _ 映射到特定的文件系统实现,例如 POSIX 或 DOS,或者映射到常用功能,例如文件所有权。 +在显示`readAttributes`方法的示例之前,应该提到的是,不同的文件系统对于应该跟踪哪些属性有不同的概念。因此,相关文件属性被组合在一起成为视图。*视图*映射到特定的文件系统实现,例如 POSIX 或 DOS,或者映射到常用功能,例如文件所有权。 支持的视图如下: diff --git a/docs/186.md b/docs/186.md index 0ccb35586b6342c5a485e921a09a72c140b5149b..ad1caafe1b3c3fc3477838cacdc466e551f1c200 100644 --- a/docs/186.md +++ b/docs/186.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/rafs.html](https://docs.oracle.com/javase/tutorial/essential/io/rafs.html) -_ 随机存取文件 _ 允许对文件内容进行非顺序或随机访问。要随机访问文件,请打开文件,查找特定位置,以及读取或写入该文件。 +_ 随机存取文件*允许对文件内容进行非顺序或随机访问。要随机访问文件,请打开文件,查找特定位置,以及读取或写入该文件。 使用 [`SeekableByteChannel`](https://docs.oracle.com/javase/8/docs/api/java/nio/channels/SeekableByteChannel.html) 接口可以实现此功能。 `SeekableByteChannel`接口使用当前位置的概念扩展通道 I / O.使用方法可以设置或查询位置,然后可以从该位置读取数据或将数据写入该位置。 API 由一些易于使用的方法组成: diff --git a/docs/187.md b/docs/187.md index 213772a8770cacbfa8909e781a252bbe1fe60e1e..3ec746eacaba9290fc09b60f056fcd24ed616762 100644 --- a/docs/187.md +++ b/docs/187.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/io/dirs.html](https://docs.oracle.com/javase/tutorial/essential/io/dirs.html) -前面讨论过的一些方法,如`delete`,适用于文件,链接 _ 和 _ 目录。但是如何列出文件系统顶部的所有目录?如何列出目录的内容或创建目录? +前面讨论过的一些方法,如`delete`,适用于文件,链接*和*目录。但是如何列出文件系统顶部的所有目录?如何列出目录的内容或创建目录? 本节介绍以下特定于目录的功能: diff --git a/docs/188.md b/docs/188.md index 969b1bd41190773e8ac61c506e60409b90ca13b6..49786d19dbcd7fa44d8e5fc8bb5c21344c15daa5 100644 --- a/docs/188.md +++ b/docs/188.md @@ -4,7 +4,7 @@ 如前所述,`java.nio.file`包,特别是`Path`类是“链路感知”。每个`Path`方法都会检测遇到符号链接时要执行的操作,或者它提供了一个选项,使您可以在遇到符号链接时配置行为。 -到目前为止的讨论一直是[符号或 _ 软 _ 链接](path.html#symlink),但有些文件系统也支持硬链接。 _ 硬链接 _ 比符号链接更具限制性,如下所示: +到目前为止的讨论一直是[符号或*软*链接](path.html#symlink),但有些文件系统也支持硬链接。*硬链接*比符号链接更具限制性,如下所示: * 链接的目标必须存在。 * 目录上通常不允许使用硬链接。 @@ -39,7 +39,7 @@ try { `FileAttributes` vararg 使您可以指定在创建链接时以原子方式设置的初始文件属性。但是,此参数仅供将来使用,目前尚未实现。 -您可以使用 [`createLink(Path, Path)`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createLink-java.nio.file.Path-java.nio.file.Path-) 方法创建到现有文件的硬(或 _ 常规 _)链接。第二个`Path`参数定位现有文件,它必须存在或抛出`NoSuchFileException`。以下代码段显示了如何创建链接: +您可以使用 [`createLink(Path, Path)`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#createLink-java.nio.file.Path-java.nio.file.Path-) 方法创建到现有文件的硬(或*常规*)链接。第二个`Path`参数定位现有文件,它必须存在或抛出`NoSuchFileException`。以下代码段显示了如何创建链接: ```java Path newLink = ...; diff --git a/docs/189.md b/docs/189.md index 85c690e9013691f3b24699298e6c523f5e1f101c..2806521cf1037cc9e889303e325a4734a5498cf0 100644 --- a/docs/189.md +++ b/docs/189.md @@ -108,7 +108,7 @@ Files.walkFileTree(startingDir, opts, Integer.MAX_VALUE, finder); 例如,如果您正在编写递归删除,则首先删除目录中的文件,然后再删除目录本身。在这种情况下,您删除`postVisitDirectory`中的目录。 -如果您正在编写递归副本,则在尝试将文件复制到`visitFiles`之前,在`preVisitDirectory`中创建新目录(在`visitFiles`中)。如果要保留源目录的属性(类似于 UNIX `cp -p`命令),则需要在复制文件后在`postVisitDirectory`中执行 _。 [``Copy`` ](examples/Copy.java)示例显示了如何执行此操作。_ +如果您正在编写递归副本,则在尝试将文件复制到`visitFiles`之前,在`preVisitDirectory`中创建新目录(在`visitFiles`中)。如果要保留源目录的属性(类似于 UNIX `cp -p`命令),则需要在复制文件后在`postVisitDirectory`中执行*。 [``Copy`` ](examples/Copy.java)示例显示了如何执行此操作。_ 如果您正在编写文件搜索,则在`visitFile`方法中执行比较。此方法查找符合条件的所有文件,但找不到目录。如果要查找文件和目录,还必须在`preVisitDirectory`或`postVisitDirectory`方法中执行比较。 [``Find`` ](examples/Find.java)示例显示了如何执行此操作。 diff --git a/docs/19.md b/docs/19.md index 5363619bde19efa56c34ef9728159391f209c466..d7da430e7a0691fd94fab1c2a0d1c01bee81fe2c 100644 --- a/docs/19.md +++ b/docs/19.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/concepts/package.html](https://docs.oracle.com/javase/tutorial/java/concepts/package.html) -包是一个命名空间,用于组织一组相关的类和接口。从概念上讲,您可以将包视为与计算机上的不同文件夹类似。您可以将 HTML 页面保留在一个文件夹中,将图像保存在另一个文件夹中,将脚本或应因为用 Java 编程语言编写的软件可以由数百个或 _ 数千 _ 的各个类组成,所以通过将相关的类和接口放入包来保持组织是有意义的。 +包是一个命名空间,用于组织一组相关的类和接口。从概念上讲,您可以将包视为与计算机上的不同文件夹类似。您可以将 HTML 页面保留在一个文件夹中,将图像保存在另一个文件夹中,将脚本或应因为用 Java 编程语言编写的软件可以由数百个或*数千*的各个类组成,所以通过将相关的类和接口放入包来保持组织是有意义的。 Java 平台提供了一个适合在您自己的应用程序中使用的庞大的类库(一组包)。该库称为“应用程序编程接口”,简称“API”。它的包代表了最常用于通用编程的任务。例如,`String`对象包含字符串的状态和行为; `File`对象允许程序员轻松创建,删除,检查,比较或修改文件系统上的文件; `Socket`对象允许创建和使用网络套接字;各种 GUI 对象控制按钮和复选框以及与图形用户界面相关的任何其他内容。有数以千计的课程可供选择。这使程序员可以专注于特定应用程序的设计,而不是使其工作所需的基础结构。 diff --git a/docs/191.md b/docs/191.md index 88b71b086c1ab4f4f068296e02beb1f988d70527..f2bdda4bf331879b267bf1085b35ec2c96ad4655 100644 --- a/docs/191.md +++ b/docs/191.md @@ -10,7 +10,7 @@ jEdit Dialog Box Showing That a Modified File Is Detected -要实现此功能,称为 _ 文件更改通知 _,程序必须能够检测文件系统上相关目录的内容。一种方法是轮询文件系统以查找更改,但这种方法效率低下。它不能扩展到具有数百个要监视的打开文件或目录的应用程序。 +要实现此功能,称为*文件更改通知*,程序必须能够检测文件系统上相关目录的内容。一种方法是轮询文件系统以查找更改,但这种方法效率低下。它不能扩展到具有数百个要监视的打开文件或目录的应用程序。 `java.nio.file`包提供文件更改通知 API,称为 Watch Service API。此 API 使您可以使用监视服务注册目录(或多个目录)。注册时,您告诉服务您感兴趣的事件类型:文件创建,文件删除或文件修改。当服务检测到感兴趣的事件时,它将被转发到注册的进程。已注册的进程有一个线程(或一个线程池),专门用于监视它已注册的任何事件。当一个事件进入时,它会根据需要进行处理。 @@ -199,4 +199,4 @@ static WatchEvent cast(WatchEvent event) { Watch Service API 专为需要通知文件更改事件的应用程序而设计。它非常适合任何应用程序,如编辑器或 IDE,可能有许多打开的文件,需要确保文件与文件系统同步。它也非常适合监视目录的应用程序服务器,可能等待`.jsp`或`.jar`文件丢弃,以便部署它们。 -此 API 是 _ 而非 _,用于索引硬盘驱动器。大多数文件系统实现都具有文件更改通知的本机支持。 Watch Service API 在可用的情况下利用此支持。但是,当文件系统不支持此机制时,Watch Service 将轮询文件系统,等待事件。 \ No newline at end of file +此 API 是*而非*,用于索引硬盘驱动器。大多数文件系统实现都具有文件更改通知的本机支持。 Watch Service API 在可用的情况下利用此支持。但是,当文件系统不支持此机制时,Watch Service 将轮询文件系统,等待事件。 \ No newline at end of file diff --git a/docs/192.md b/docs/192.md index f93acc379fa3ecc00872e712596b9c8afb1edf53..19f1e0d16efabc181281607a595bc8049fa146c1 100644 --- a/docs/192.md +++ b/docs/192.md @@ -52,7 +52,7 @@ String separator = FileSystems.getDefault().getSeparator(); [`getSeparator`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html#getSeparator--) 方法还用于检索任何可用文件系统的路径分隔符。 -文件系统具有一个或多个文件存储来保存其文件和目录。 _ 文件存储 _ 表示底层存储设备。在 UNIX 操作系统中,每个安装的文件系统都由文件存储表示。在 Microsoft Windows 中,每个卷都由文件存储表示:`C:`,`D:`,依此类推。 +文件系统具有一个或多个文件存储来保存其文件和目录。*文件存储*表示底层存储设备。在 UNIX 操作系统中,每个安装的文件系统都由文件存储表示。在 Microsoft Windows 中,每个卷都由文件存储表示:`C:`,`D:`,依此类推。 要检索文件系统的所有文件存储列表,可以使用 [`getFileStores`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html#getFileStores--) 方法。此方法返回`Iterable`,允许您使用增强的语句迭代所有根目录。 diff --git a/docs/196.md b/docs/196.md index d51eec906ca2e391a02802f2ea96c1fd28af4528..c06b0e2573d418aca75dc473c98f0c6057741cd5 100644 --- a/docs/196.md +++ b/docs/196.md @@ -2,6 +2,6 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html) -计算机用户理所当然地认为他们的系统一次可以做多件事。他们假设他们可以继续在文字处理器中工作,而其他应用程序则下载文件,管理打印队列和流式传输音频。即使是单个应用程序通常也希望一次完成多个任务。例如,流式音频应用程序必须同时从网络读取数字音频,解压缩,管理播放和更新其显示。即使文字处理器应始终准备好响应键盘和鼠标事件,无论重新格式化文本或更新显示有多繁忙。可以执行此类操作的软件称为 _ 并发 _ 软件。 +计算机用户理所当然地认为他们的系统一次可以做多件事。他们假设他们可以继续在文字处理器中工作,而其他应用程序则下载文件,管理打印队列和流式传输音频。即使是单个应用程序通常也希望一次完成多个任务。例如,流式音频应用程序必须同时从网络读取数字音频,解压缩,管理播放和更新其显示。即使文字处理器应始终准备好响应键盘和鼠标事件,无论重新格式化文本或更新显示有多繁忙。可以执行此类操作的软件称为*并发*软件。 Java 平台的设计初衷是为了支持并发编程,在 Java 编程语言和 Java 类库中提供基本的并发支持。从 5.0 版开始,Java 平台还包含高级并发 API。本课程介绍了平台的基本并发支持,并总结了`java.util.concurrent`包中的一些高级 API。 \ No newline at end of file diff --git a/docs/197.md b/docs/197.md index 572b2057ebf24d24898dc5f4e7f4965099e311a1..34d83cbb50081e4b96459ef1e9b8d9a4f966f465 100644 --- a/docs/197.md +++ b/docs/197.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html) -在并发编程中,有两个基本执行单元:_ 处理 _ 和 _ 线程 _。在 Java 编程语言中,并发编程主要涉及线程。但是,流程也很重要。 +在并发编程中,有两个基本执行单元:*处理*和*线程*。在 Java 编程语言中,并发编程主要涉及线程。但是,流程也很重要。 计算机系统通常具有许多活动进程和线程。即使在只有一个执行核心的系统中也是如此,因此在任何给定时刻只有一个线程实际执行。通过称为时间切片的 OS 功能,在进程和线程之间共享单个核的处理时间。 @@ -12,14 +12,14 @@ 进程具有自包含的执行环境。进程通常具有完整的私有基本运行时资源集;特别是,每个进程都有自己的内存空间。 -流程通常被视为程序或应用程序的同义词。但是,用户看到的单个应用程序实际上可能是一组协作进程。为了促进进程之间的通信,大多数操作系统都支持 _ 进程间通信 _(IPC)资源,例如管道和套接字。 IPC 不仅用于同一系统上的进程之间的通信,而且还用于不同系统上的进程。 +流程通常被视为程序或应用程序的同义词。但是,用户看到的单个应用程序实际上可能是一组协作进程。为了促进进程之间的通信,大多数操作系统都支持*进程间通信*(IPC)资源,例如管道和套接字。 IPC 不仅用于同一系统上的进程之间的通信,而且还用于不同系统上的进程。 Java 虚拟机的大多数实现都作为单个进程运行。 Java 应用程序可以使用 [`ProcessBuilder`](https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) 对象创建其他进程。多进程应用程序超出了本课程的范围。 ## 主题 -线程有时被称为 _ 轻量级进程 _。进程和线程都提供执行环境,但创建新线程所需的资源比创建新进程要少。 +线程有时被称为*轻量级进程*。进程和线程都提供执行环境,但创建新线程所需的资源比创建新进程要少。 线程存在于进程中 - 每个进程至少有一个进程。线程共享进程的资源,包括内存和打开文件。这使得有效但可能有问题的通信成为可能。 -多线程执行是 Java 平台的基本特性。每个应用程序至少有一个线程 - 或几个,如果你计算“系统”线程,它们执行内存管理和信号处理等操作。但是从应用程序员的角度来看,你只需要一个线程,称为 _ 主线程 _。该线程具有创建其他线程的能力,我们将在下一节中进行演示。 \ No newline at end of file +多线程执行是 Java 平台的基本特性。每个应用程序至少有一个线程 - 或几个,如果你计算“系统”线程,它们执行内存管理和信号处理等操作。但是从应用程序员的角度来看,你只需要一个线程,称为*主线程*。该线程具有创建其他线程的能力,我们将在下一节中进行演示。 \ No newline at end of file diff --git a/docs/198.md b/docs/198.md index 8da9020c72ec9e19d3f4f113417865f9a2a62f19..fdd45ffaa7f9a58580674b6787e8dee26a815bf5 100644 --- a/docs/198.md +++ b/docs/198.md @@ -5,6 +5,6 @@ 每个线程与类 [`Thread`](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html) 的实例相关联。使用`Thread`对象创建并发应用程序有两种基本策略。 * 要直接控制线程创建和管理,只需在每次应用程序需要启动异步任务时实例化`Thread`。 -* 要从应用程序的其余部分抽象线程管理,请将应用程序的任务传递给 _ 执行程序 _。 +* 要从应用程序的其余部分抽象线程管理,请将应用程序的任务传递给*执行程序*。 本节介绍`Thread`对象的使用。执行器与其他[高级并发对象](highlevel.html)讨论。 \ No newline at end of file diff --git a/docs/201.md b/docs/201.md index 1a8bc0dd89f5991a9a42398428a5666ede8d647c..6e6ed12f10ee5bf257558b9ef44ed00dc97d208f 100644 --- a/docs/201.md +++ b/docs/201.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html) -_ 中断 _ 表示线程应该停止正在进行的操作并执行其他操作。由程序员决定线程如何响应中断,但线程终止是很常见的。这是本课程中强调的用法。 +_ 中断*表示线程应该停止正在进行的操作并执行其他操作。由程序员决定线程如何响应中断,但线程终止是很常见的。这是本课程中强调的用法。 线程通过调用`Thread`对象上的 [`interrupt`](https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#interrupt--) 来发送中断,以便中断线程。为使中断机制正常工作,被中断的线程必须支持自己的中断。 @@ -53,6 +53,6 @@ if (Thread.interrupted()) { ## 中断状态标志 -中断机制使用称为 _ 中断状态 _ 的内部标志来实现。调用`Thread.interrupt`设置此标志。当线程通过调用静态方法`Thread.interrupted`检查中断时,中断状态被清除。非静态`isInterrupted`方法(由一个线程用于查询另一个线程的中断状态)不会更改中断状态标志。 +中断机制使用称为*中断状态*的内部标志来实现。调用`Thread.interrupt`设置此标志。当线程通过调用静态方法`Thread.interrupted`检查中断时,中断状态被清除。非静态`isInterrupted`方法(由一个线程用于查询另一个线程的中断状态)不会更改中断状态标志。 按照惯例,任何通过抛出`InterruptedException`退出的方法都会清除中断状态。但是,通过调用`interrupt`的另一个线程,总是可以立即再次设置中断状态。 \ No newline at end of file diff --git a/docs/204.md b/docs/204.md index f29a42d6a1d1d60c2790e1b99f9a658fb09ee620..0ee538d7ef6915735a68158cd8295919b0d8513d 100644 --- a/docs/204.md +++ b/docs/204.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html) -线程主要通过共享对字段的访问和参考字段引用的对象进行通信。这种通信形式非常有效,但可能出现两种错误:_ 线程干扰 _ 和 _ 内存一致性错误 _。防止这些错误所需的工具是 _ 同步 _。 +线程主要通过共享对字段的访问和参考字段引用的对象进行通信。这种通信形式非常有效,但可能出现两种错误:*线程干扰*和*内存一致性错误*。防止这些错误所需的工具是*同步*。 -但是,同步会引入 ,当两个或多个线程同时尝试访问同一资源时 _ 和 _ 会导致 Java 运行时执行一个或多个线程更慢,甚至暂停执行。 [饥饿和活锁](../../essential/concurrency/starvelive.html)是线程争用的形式。有关详细信息,请参阅[活力](../../essential/concurrency/liveness.html)部分。 +但是,同步会引入 ,当两个或多个线程同时尝试访问同一资源时*和*会导致 Java 运行时执行一个或多个线程更慢,甚至暂停执行。 [饥饿和活锁](../../essential/concurrency/starvelive.html)是线程争用的形式。有关详细信息,请参阅[活力](../../essential/concurrency/liveness.html)部分。 本节包括以下主题: diff --git a/docs/206.md b/docs/206.md index 30ea8b194e56ee9022f240c87ab364db75340afd..cc8687bf63ff9a055217722d680092e11cfe3620 100644 --- a/docs/206.md +++ b/docs/206.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html) -_ 当不同的线程具有应该是相同数据的不一致视图时,会发生内存一致性错误 _。内存一致性错误的原因很复杂,超出了本教程的范围。幸运的是,程序员不需要详细了解这些原因。所需要的只是避免它们的策略。 +_ 当不同的线程具有应该是相同数据的不一致视图时,会发生内存一致性错误*。内存一致性错误的原因很复杂,超出了本教程的范围。幸运的是,程序员不需要详细了解这些原因。所需要的只是避免它们的策略。 -避免内存一致性错误的关键是理解 _ 发生在 _ 关系之前。这种关系只是保证一个特定语句的内存写入对另一个特定语句可见。要查看此内容,请考虑以下示例。假设定义并初始化了一个简单的`int`字段: +避免内存一致性错误的关键是理解*发生在*关系之前。这种关系只是保证一个特定语句的内存写入对另一个特定语句可见。要查看此内容,请考虑以下示例。假设定义并初始化了一个简单的`int`字段: ```java int counter = 0; diff --git a/docs/207.md b/docs/207.md index 5a531144b065ff51636ad10c672ab604951b7a92..4184d2882099574700590749cda6fda1afe796fb 100644 --- a/docs/207.md +++ b/docs/207.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html) -Java 编程语言提供两种基本同步习语:_ 同步方法 _ 和 _ 同步语句 _。下两节将介绍两个同步语句中较为复杂的语句。本节介绍同步方法。 +Java 编程语言提供两种基本同步习语:*同步方法*和*同步语句*。下两节将介绍两个同步语句中较为复杂的语句。本节介绍同步方法。 要使方法同步,只需将`synchronized`关键字添加到其声明中: @@ -28,7 +28,7 @@ public class SynchronizedCounter { 如果`count`是`SynchronizedCounter`的实例,那么使这些方法同步有两个影响: * 首先,对同一对象的两个同步方法的调用不可能进行交错。当一个线程正在为对象执行同步方法时,所有其他线程调用同一对象的同步方法(暂停执行)直到第一个线程完成对象。 -* 其次,当同步方法退出时,它会自动与 _ 建立与同一对象的同步方法的任何后续调用 _ 之前发生的关系。这可以保证对所有线程都可以看到对象状态的更改。 +* 其次,当同步方法退出时,它会自动与*建立与同一对象的同步方法的任何后续调用*之前发生的关系。这可以保证对所有线程都可以看到对象状态的更改。 请注意,构造器无法同步 - 将`synchronized`关键字与构造器一起使用是语法错误。同步构造器没有意义,因为只有创建对象的线程在构造时才能访问它。 diff --git a/docs/208.md b/docs/208.md index 0699e0a2afe6a71cf1f3ed418857cd87231824a3..4d1daa7383f8a42b7aec1963a67cafe2862d3a10 100644 --- a/docs/208.md +++ b/docs/208.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html) -同步是围绕一个称为 _ 内在锁 _ 或 _ 监视器锁 _ 的内部实体构建的。 (API 规范通常将此实体简称为“监视器”。)内部锁在同步的两个方面都发挥作用:强制对对象状态进行独占访问,并建立对可见性至关重要的先发生关系。 +同步是围绕一个称为*内在锁*或*监视器锁*的内部实体构建的。 (API 规范通常将此实体简称为“监视器”。)内部锁在同步的两个方面都发挥作用:强制对对象状态进行独占访问,并建立对可见性至关重要的先发生关系。 -每个对象都有一个与之关联的内在锁。按照惯例,需要对对象字段进行独占和一致访问的线程必须 _ 在访问对象之前获取 _ 对象的内部锁定,然后 _ 释放 _ 内部锁定时使用它们。一个线程被认为 _ 拥有 _ 它获得锁定和释放锁定之间的内在锁定。只要一个线程拥有一个内部锁,没有其他线程可以获得相同的锁。另一个线程在尝试获取锁时将阻塞。 +每个对象都有一个与之关联的内在锁。按照惯例,需要对对象字段进行独占和一致访问的线程必须*在访问对象之前获取*对象的内部锁定,然后*释放*内部锁定时使用它们。一个线程被认为*拥有*它获得锁定和释放锁定之间的内在锁定。只要一个线程拥有一个内部锁,没有其他线程可以获得相同的锁。另一个线程在尝试获取锁时将阻塞。 当线程释放内部锁时,在该操作与同一锁的任何后续获取之间建立先发生关系。 @@ -16,7 +16,7 @@ ## 同步语句 -创建同步代码的另一种方法是使用 _ 同步语句 _。与 synchronized 方法不同,synchronized 语句必须指定提供内部锁的对象: +创建同步代码的另一种方法是使用*同步语句*。与 synchronized 方法不同,synchronized 语句必须指定提供内部锁的对象: ```java public void addName(String name) { @@ -59,4 +59,4 @@ public class MsLunch { ## 可重入同步 -回想一下,线程无法获取另一个线程拥有的锁。但是线程 _ 可以 _ 获得它已经拥有的锁。允许线程多次获取相同的锁定会启用 _ 可重入同步 _。这描述了一种情况,其中同步代码直接或间接地调用也包含同步代码的方法,并且两组代码使用相同的锁。在没有可重入同步的情况下,同步代码必须采取许多额外的预防措施,以避免线程导致自身阻塞。 \ No newline at end of file +回想一下,线程无法获取另一个线程拥有的锁。但是线程*可以*获得它已经拥有的锁。允许线程多次获取相同的锁定会启用*可重入同步*。这描述了一种情况,其中同步代码直接或间接地调用也包含同步代码的方法,并且两组代码使用相同的锁。在没有可重入同步的情况下,同步代码必须采取许多额外的预防措施,以避免线程导致自身阻塞。 \ No newline at end of file diff --git a/docs/209.md b/docs/209.md index 69836416fd05168c180276c142962a7463863ddb..c75d5c109d55528cd7f684bad9839432c18aeffa 100644 --- a/docs/209.md +++ b/docs/209.md @@ -2,12 +2,12 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html) -在编程中,_ 原子 _ 动作是一次有效发生的动作。原子动作不能在中间停止:它要么完全发生,要么根本不发生。在动作完成之前,原子动作的副作用是不可见的。 +在编程中,*原子*动作是一次有效发生的动作。原子动作不能在中间停止:它要么完全发生,要么根本不发生。在动作完成之前,原子动作的副作用是不可见的。 我们已经看到增量表达式,例如`c++`,不描述原子动作。即使非常简单的表达式也可以定义可以分解为其他操作的复杂操作。但是,您可以指定原子操作: * 读取和写入对于引用变量和大多数原始变量(除`long`和`double`之外的所有类型)都是原子的。 -* 读取和写入对于 _ 所有 _ 变量都是原子的`volatile`(_ 包括 _ `long`和`double`变量)。 +* 读取和写入对于*所有*变量都是原子的`volatile`(*包括 _ `long`和`double`变量)。 原子动作不能交错,因此可以使用它们而不必担心线程干扰。但是,这并不能消除所有同步原子操作的需要,因为仍然可能存在内存一致性错误。使用`volatile`变量可降低内存一致性错误的风险,因为对`volatile`变量的任何写入都会建立与之后读取同一变量的先发生关系。这意味着对`volatile`变量的更改始终对其他线程可见。更重要的是,它还意味着当线程读取`volatile`变量时,它不仅会看到`volatile`的最新更改,还会看到导致更改的代码的副作用。 diff --git a/docs/210.md b/docs/210.md index 487df56cc1c7dddb6e0e22eec4170efd6b97f69b..9f683b2503938b85720e7714b9dc5d29af798819 100644 --- a/docs/210.md +++ b/docs/210.md @@ -2,4 +2,4 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/liveness.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/liveness.html) -并发应用程序及时执行的能力称为 _ 活跃度 _。本节描述了最常见的活体问题,[死锁](deadlock.html),并继续简要介绍另外两个活体问题,[饥饿和活锁](starvelive.html)。 \ No newline at end of file +并发应用程序及时执行的能力称为*活跃度*。本节描述了最常见的活体问题,[死锁](deadlock.html),并继续简要介绍另外两个活体问题,[饥饿和活锁](starvelive.html)。 \ No newline at end of file diff --git a/docs/211.md b/docs/211.md index 4d9b57eed09735db08feabf00c7042c6abd60fef..0a1f15f8d5dec7f38687823599eede03e8191a3d 100644 --- a/docs/211.md +++ b/docs/211.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html) -_ 死锁 _ 描述了两个或多个线程永远被阻塞,等待彼此的情况。这是一个例子。 +_ 死锁*描述了两个或多个线程永远被阻塞,等待彼此的情况。这是一个例子。 阿方斯和加斯顿是朋友,也很有礼貌的信徒。严格的礼貌规则是,当你向朋友鞠躬时,你必须保持鞠躬,直到你的朋友有机会归还弓箭。不幸的是,这条规则没有考虑到两个朋友可能同时互相鞠躬的可能性。这个示例应用程序 [``Deadlock``](examples/Deadlock.java)模拟了这种可能性: diff --git a/docs/212.md b/docs/212.md index 8f06322c1c4739eea32d31a9d5fb010c3eebc825..c83e510cb50419bb49f9c500660abcf12ed5c2a9 100644 --- a/docs/212.md +++ b/docs/212.md @@ -10,4 +10,4 @@ _Starvation_ 描述了线程无法获得对共享资源的定期访问而无法 ## 活锁 -线程通常用于响应另一个线程的操作。如果另一个线程的动作也是对另一个线程的动作的响应,则可能导致 _ 活锁 _。与死锁一样,活锁线程无法取得进一步进展。但是,线程没有被阻塞 - 他们只是太忙于相互回应以恢复工作。这相当于两个试图在走廊里互相通过的人:Alphonse 向左移动让 Gaston 通过,而 Gaston 向右移动让 Alphonse 通过。看到他们仍然互相阻挡,Alphone 向右移动,而 Gaston 向左移动。他们还在互相阻挡,所以...... \ No newline at end of file +线程通常用于响应另一个线程的操作。如果另一个线程的动作也是对另一个线程的动作的响应,则可能导致*活锁*。与死锁一样,活锁线程无法取得进一步进展。但是,线程没有被阻塞 - 他们只是太忙于相互回应以恢复工作。这相当于两个试图在走廊里互相通过的人:Alphonse 向左移动让 Gaston 通过,而 Gaston 向右移动让 Alphonse 通过。看到他们仍然互相阻挡,Alphone 向右移动,而 Gaston 向左移动。他们还在互相阻挡,所以...... \ No newline at end of file diff --git a/docs/213.md b/docs/213.md index 83c330741da81fe94acedcb07366f55359651a3b..4e9b0c272b8c64269f158dc2be2200c60451f218 100644 --- a/docs/213.md +++ b/docs/213.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html) -线程通常必须协调他们的行为。最常见的协调习语是 _ 防护块 _。这样的块开始于在块可以继续之前轮询必须为真的条件。要正确执行此操作,需要执行许多步骤。 +线程通常必须协调他们的行为。最常见的协调习语是*防护块*。这样的块开始于在块可以继续之前轮询必须为真的条件。要正确执行此操作,需要执行许多步骤。 例如,假设`guardedJoy`是在另一个线程设置共享变量`joy`之前不能继续的方法。理论上,这种方法可以简单地循环直到满足条件,但是该循环是浪费的,因为它在等待时连续执行。 @@ -60,7 +60,7 @@ public synchronized notifyJoy() { * * * -让我们使用受保护的块来创建 _Producer-Consumer_ 应用程序。这种应用程序在两个线程之间共享数据:创建数据的 _ 生成器 _ 和用它做某事的 _ 消费者 _。两个线程使用共享对象进行通信。协调是必不可少的:消费者线程不得在生产者线程交付之前尝试检索数据,并且如果消费者未检索旧数据,则生产者线程不得尝试传递新数据。 +让我们使用受保护的块来创建 _Producer-Consumer_ 应用程序。这种应用程序在两个线程之间共享数据:创建数据的*生成器*和用它做某事的*消费者*。两个线程使用共享对象进行通信。协调是必不可少的:消费者线程不得在生产者线程交付之前尝试检索数据,并且如果消费者未检索旧数据,则生产者线程不得尝试传递新数据。 在此示例中,数据是一系列文本消息,通过 [``Drop``](examples/Drop.java)类型的对象共享: diff --git a/docs/214.md b/docs/214.md index d44c29452deb807c6c295e3b6b8c80aa726b98bc..1c1aeaa10b38aed9f57d6795d2889959a6ef9b67 100644 --- a/docs/214.md +++ b/docs/214.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html) -如果一个对象的状态在构造之后不能改变,则该对象被认为是 _ 不可变的 _。最大程度上依赖不可变对象被广泛接受为创建简单,可靠代码的合理策略。 +如果一个对象的状态在构造之后不能改变,则该对象被认为是*不可变的*。最大程度上依赖不可变对象被广泛接受为创建简单,可靠代码的合理策略。 不可变对象在并发应用程序中特别有用。由于它们不能改变状态,因此它们不会被线程干扰破坏或在不一致状态下被观察到。 diff --git a/docs/219.md b/docs/219.md index 2bba34949e94cf46fc0b53ebd3a3826b6d729272..b2dfa443cc9c7467993573dee0128308fea46fe5 100644 --- a/docs/219.md +++ b/docs/219.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/executors.html) -在前面的所有示例中,由`Runnable`对象定义的新线程和由`Thread`对象定义的线程本身完成的任务之间存在紧密联系。这适用于小型应用程序,但在大型应用程序中,将线程管理和创建与应用程序的其余部分分开是有意义的。封装这些函数的对象称为 _ 执行程序 _。以下小节详细描述了执行程序。 +在前面的所有示例中,由`Runnable`对象定义的新线程和由`Thread`对象定义的线程本身完成的任务之间存在紧密联系。这适用于小型应用程序,但在大型应用程序中,将线程管理和创建与应用程序的其余部分分开是有意义的。封装这些函数的对象称为*执行程序*。以下小节详细描述了执行程序。 * [执行器接口](exinter.html)定义三个执行器对象类型。 * [线程池](pools.html)是最常见的执行器实现类型。 diff --git a/docs/22.md b/docs/22.md index 7450552cd9ca1e25458bb5a5d3f1395fec606f02..c4795bf0a2aaab6b42649e401cb43f6c56dd237c 100644 --- a/docs/22.md +++ b/docs/22.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html) -正如您在上一课中所了解到的,对象将其状态存储在 _ 字段 _ 中。 +正如您在上一课中所了解到的,对象将其状态存储在*字段*中。 ```java int cadence = 0; @@ -15,12 +15,12 @@ int gear = 1; Java 编程语言定义了以下几种变量: -* **实例变量(非静态字段)**从技术上讲,对象将它们各自的状态存储在“非静态字段”中,即没有`static`关键字声明的字段。非静态字段也称为 _ 实例变量 _,因为它们的值对于类的每个 _ 实例 _ 是唯一的(换句话说,对于每个对象);一辆自行车的`currentSpeed`独立于另一辆自行车的`currentSpeed`。 -* **类变量(静态字段)** _ 类变量 _ 是使用`static`修饰符声明的任何字段;这告诉编译器这个变量只有一个副本存在,无论该类被实例化多少次。定义特定种类自行车的齿轮数的字段可以标记为`static`,因为从概念上讲,相同数量的齿轮将适用于所有情况。代码`static int numGears = 6;`将创建这样的静态字段。此外,可以添加关键字`final`以指示齿轮的数量永远不会改变。 -* **局部变量**类似于对象如何在字段中存储其状态,方法通常会将其临时状态存储在 _ 局部变量 _ 中。声明局部变量的语法类似于声明字段(例如,`int count = 0;`)。没有特殊的关键字将变量指定为本地变量;该决定完全来自声明变量的位置 - 它位于方法的开始和结束括号之间。因此,局部变量只对声明它们的方法可见;他们无法从班上其他人那里获得。 +* **实例变量(非静态字段)**从技术上讲,对象将它们各自的状态存储在“非静态字段”中,即没有`static`关键字声明的字段。非静态字段也称为*实例变量*,因为它们的值对于类的每个*实例*是唯一的(换句话说,对于每个对象);一辆自行车的`currentSpeed`独立于另一辆自行车的`currentSpeed`。 +* **类变量(静态字段)** _ 类变量*是使用`static`修饰符声明的任何字段;这告诉编译器这个变量只有一个副本存在,无论该类被实例化多少次。定义特定种类自行车的齿轮数的字段可以标记为`static`,因为从概念上讲,相同数量的齿轮将适用于所有情况。代码`static int numGears = 6;`将创建这样的静态字段。此外,可以添加关键字`final`以指示齿轮的数量永远不会改变。 +* **局部变量**类似于对象如何在字段中存储其状态,方法通常会将其临时状态存储在*局部变量*中。声明局部变量的语法类似于声明字段(例如,`int count = 0;`)。没有特殊的关键字将变量指定为本地变量;该决定完全来自声明变量的位置 - 它位于方法的开始和结束括号之间。因此,局部变量只对声明它们的方法可见;他们无法从班上其他人那里获得。 * **参数**您已经在`Bicycle`类和“Hello World!”的`main`方法中看到了参数示例。应用。回想一下`main`方法的签名是`public static void main(String[] args)`。这里,`args`变量是此方法的参数。要记住的重要一点是参数总是被分类为“变量”而不是“字段”。这也适用于其他参数接受构造(例如构造器和异常处理器),您将在本教程后面学习。 -话虽如此,本教程的其余部分在讨论字段和变量时使用以下一般准则。如果我们谈论的是“一般的字段”(不包括局部变量和参数),我们可以简单地说“字段”。如果讨论适用于“以上所有”,我们可以简单地说“变量”。如果上下文要求区分,我们将酌情使用特定术语(静态字段,局部变量等)。您也可能偶尔会看到使用“成员”一词。类型的字段,方法和嵌套类型统称为 _ 成员 _。 +话虽如此,本教程的其余部分在讨论字段和变量时使用以下一般准则。如果我们谈论的是“一般的字段”(不包括局部变量和参数),我们可以简单地说“字段”。如果讨论适用于“以上所有”,我们可以简单地说“变量”。如果上下文要求区分,我们将酌情使用特定术语(静态字段,局部变量等)。您也可能偶尔会看到使用“成员”一词。类型的字段,方法和嵌套类型统称为*成员*。 * 变量名称区分大小写。变量的名称可以是任何合法标识符 - 无限长度的 Unicode 字母和数字序列,以字母开头,美元符号“`$`”或下划线字符“`_`”。但是,惯例是始终用字母开始变量名,而不是“`$`”或“`_`”。此外,按照惯例,美元符号字符根本不会被使用。您可能会发现某些情况,其中自动生成的名称将包含美元符号,但您的变量名称应始终避免使用它。对于下划线字符存在类似的约定;虽然用“`_`”开始你的变量名称在技术上是合法的,但这种做法是不鼓励的。不允许有空白区域。 * 后续字符可以是字母,数字,美元符号或下划线字符。约定(和常识)也适用于此规则。为变量选择名称时,请使用完整单词而不是隐藏缩写。这样做可以使您的代码更易于阅读和理解。在许多情况下,它还会使您的代码自我记录;例如,名为`cadence`,`speed`和`gear`的字段比缩写版本更直观,例如`s`,`c`和`g`。另请注意,您选择的名称不能是[关键字或保留字](_keywords.html)。 diff --git a/docs/221.md b/docs/221.md index 25922d649016292b7af5c35f3b02f68a7758be92..a1307c6d918ebba22f411ae38b1e69189531169b 100644 --- a/docs/221.md +++ b/docs/221.md @@ -2,13 +2,13 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html) -`java.util.concurrent`中的大多数执行程序实现使用 _ 线程池 _,它由 _ 工作线程 _ 组成。这种线程与它执行的`Runnable`和`Callable`任务分开存在,通常用于执行多个任务。 +`java.util.concurrent`中的大多数执行程序实现使用*线程池*,它由*工作线程*组成。这种线程与它执行的`Runnable`和`Callable`任务分开存在,通常用于执行多个任务。 使用工作线程可以最大限度地减少由于创建线程而产生线程对象使用大量内存,而在大型应用程序中,分配和释放许多线程对象会产生大量的内存管理开销。 -一种常见类型的线程池是 _ 固定线程池 _。这种类型的池始终具有指定数量的线程运行;如果某个线程在仍在使用时以某种方式终止,它将自动替换为新线程。任务通过内部队列提交到池中,只要有多个活动任务而不是线程,该队列就会保存额外的任务。 +一种常见类型的线程池是*固定线程池*。这种类型的池始终具有指定数量的线程运行;如果某个线程在仍在使用时以某种方式终止,它将自动替换为新线程。任务通过内部队列提交到池中,只要有多个活动任务而不是线程,该队列就会保存额外的任务。 -固定线程池的一个重要优点是使用它 _ 的应用程序正常降级 _。要理解这一点,请考虑一个 Web 服务器应用程序,其中每个 HTTP 请求都由一个单独的线程处理。如果应用程序只是为每个新的 HTTP 请求创建一个新线程,并且系统接收到的请求数超过了它可以立即处理的数量,那么当所有这些线程的开销超过时,应用程序将突然停止响应 _ 所有 _ 请求。系统的容量。由于可以创建的线程数量有限制,应用程序不会像它们进入时那样快速地为 HTTP 请求提供服务,但它将在系统可以维持的时间内尽快为它们提供服务。 +固定线程池的一个重要优点是使用它*的应用程序正常降级*。要理解这一点,请考虑一个 Web 服务器应用程序,其中每个 HTTP 请求都由一个单独的线程处理。如果应用程序只是为每个新的 HTTP 请求创建一个新线程,并且系统接收到的请求数超过了它可以立即处理的数量,那么当所有这些线程的开销超过时,应用程序将突然停止响应*所有*请求。系统的容量。由于可以创建的线程数量有限制,应用程序不会像它们进入时那样快速地为 HTTP 请求提供服务,但它将在系统可以维持的时间内尽快为它们提供服务。 创建使用固定线程池的执行程序的一种简单方法是在 [`java.util.concurrent.Executors`](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html) 中调用 [`newFixedThreadPool`](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int-) 工厂方法此类还提供以下工厂方法: diff --git a/docs/222.md b/docs/222.md index 4313dabea9e348862630cd7da91b61a6bbec1a2e..6e8da71fdb252916f0ffda9ceef37e01f8fb6a00 100644 --- a/docs/222.md +++ b/docs/222.md @@ -4,7 +4,7 @@ fork / join 框架是`ExecutorService`接口的实现,可帮助您利用多个处理器。它专为可以递归分解成小块的工作而设计。目标是使用所有可用的处理能力来提高应用程序的性能。 -与任何`ExecutorService`实现一样,fork / join 框架将任务分配给线程池中的工作线程。 fork / join 框架是不同的,因为它使用 _ 工作窃取 _ 算法。用尽要做的事情的工作线程可以从仍然忙碌的其他线程中窃取任务。 +与任何`ExecutorService`实现一样,fork / join 框架将任务分配给线程池中的工作线程。 fork / join 框架是不同的,因为它使用*工作窃取*算法。用尽要做的事情的工作线程可以从仍然忙碌的其他线程中窃取任务。 fork / join 框架的中心是 [`ForkJoinPool`](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html) 类,它是`AbstractExecutorService`类的扩展。 `ForkJoinPool`实现核心工作窃取算法,可以执行 [`ForkJoinTask`](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinTask.html) 进程。 @@ -27,7 +27,7 @@ else ## 模糊为 Clarity -为了帮助您了解 fork / join 框架的工作原理,请考虑以下示例。假设您想模糊图像。原始 _ 源 _ 图像由整数数组表示,其中每个整数包含单个像素的颜色值。模糊的 _ 目的地 _ 图像也由与源相同大小的整数数组表示。 +为了帮助您了解 fork / join 框架的工作原理,请考虑以下示例。假设您想模糊图像。原始*源*图像由整数数组表示,其中每个整数包含单个像素的颜色值。模糊的*目的地*图像也由与源相同大小的整数数组表示。 通过一次一个像素地处理源阵列来完成模糊。每个像素的平均周围像素(红色,绿色和蓝色分量被平均),结果放在目标数组中。由于图像是大型数组,因此此过程可能需要很长时间。通过使用 fork / join 框架实现算法,您可以利用多处理器系统上的并发处理。这是一个可能的实现: diff --git a/docs/226.md b/docs/226.md index 45b8d671d23efd708864942c0f247faa8ccd665a..29c60952d8298b255b7687156e16130cd825ad44 100644 --- a/docs/226.md +++ b/docs/226.md @@ -2,8 +2,8 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/further.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/further.html) -* _Java 中的并发编程:设计原理和模式(第 2 版)_ 作者:Doug Lea。由领先专家提供的全面工作,他也是 Java 平台并发框架的架构师。 +* _Java 中的并发编程:设计原理和模式(第 2 版)*作者:Doug Lea。由领先专家提供的全面工作,他也是 Java 平台并发框架的架构师。 * _Java Concurrency in Practice_ 由 Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes 和 Doug Lea 撰写。旨在为新手提供的实用指南。 -* _ 有效的 Java 编程语言指南(第 2 版)_ 作者:Joshua Bloch。虽然这是一个通用的编程指南,但它的线程章节包含并发编程的基本“最佳实践”。 -* _ 并发:状态模型& Java 程序(第 2 版)_,作者:Jeff Magee 和 Jeff Kramer。通过建模和实际示例的组合介绍并发编程。 -* _[Java Concurrent Animated](http://sourceforge.net/projects/javaconcurrenta/) :_ 显示并发功能用法的动画。 \ No newline at end of file +* _ 有效的 Java 编程语言指南(第 2 版)*作者:Joshua Bloch。虽然这是一个通用的编程指南,但它的线程章节包含并发编程的基本“最佳实践”。 +* _ 并发:状态模型& Java 程序(第 2 版)*,作者:Jeff Magee 和 Jeff Kramer。通过建模和实际示例的组合介绍并发编程。 +* _[Java Concurrent Animated](http://sourceforge.net/projects/javaconcurrenta/) :*显示并发功能用法的动画。 \ No newline at end of file diff --git a/docs/228.md b/docs/228.md index 51ae85f686f5c0317e5b335c3781dc15293eaa56..3adcb04029f5917af914c265591d28c099425e18 100644 --- a/docs/228.md +++ b/docs/228.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/environment/index.html](https://docs.oracle.com/javase/tutorial/essential/environment/index.html) -应用程序在 _ 平台环境 _ 中运行,该环境由底层操作系统,Java 虚拟机,类库以及启动应用程序时提供的各种配置数据定义。本课程描述了应用程序用于检查和配置其平台环境的一些 API。该课程包括三个部分: +应用程序在*平台环境*中运行,该环境由底层操作系统,Java 虚拟机,类库以及启动应用程序时提供的各种配置数据定义。本课程描述了应用程序用于检查和配置其平台环境的一些 API。该课程包括三个部分: * [配置实用程序](config.html)描述了用于访问部署应用程序时提供的配置数据的 API,或者用于应用程序用户的 API。 * [System Utilities](system.html) 描述了`System`和`Runtime`类中定义的各种 API。 diff --git a/docs/23.md b/docs/23.md index 25587d8d1b2a13f9064423735a97765c33c6bc86..9bca22a04ca300631cca4fd0a5689e0d34cce200 100644 --- a/docs/23.md +++ b/docs/23.md @@ -9,7 +9,7 @@ int gear = 1; ``` -这样做会告诉程序一个名为“gear”的字段存在,保存数字数据,初始值为“1”。变量的数据类型确定它可能包含的值,以及可能对其执行的操作。除`int`外,Java 编程语言还支持其他七种 _ 原始数据类型 _。基本类型由语言预定义,并由保留关键字命名。原始值不与其他原始值共享状态。 Java 编程语言支持的八种原始数据类型是: +这样做会告诉程序一个名为“gear”的字段存在,保存数字数据,初始值为“1”。变量的数据类型确定它可能包含的值,以及可能对其执行的操作。除`int`外,Java 编程语言还支持其他七种*原始数据类型*。基本类型由语言预定义,并由保留关键字命名。原始值不与其他原始值共享状态。 Java 编程语言支持的八种原始数据类型是: * **byte** :`byte`数据类型是一个 8 位带符号的二进制补码整数。它的最小值为-128,最大值为 127(含)。 `byte`数据类型可用于在大型[阵列](arrays.html)中保存内存,其中节省的内存实际上很重要。它们也可用于代替`int`,其限制有助于澄清您的代码;变量范围有限的事实可以作为一种文档形式。 @@ -27,7 +27,7 @@ int gear = 1; * **char** :`char`数据类型是一个 16 位 Unicode 字符。它的最小值为`'\u0000'`(或 0),最大值为`'\uffff'`(或 65,535(含))。 -除了上面列出的八种原始数据类型之外,Java 编程语言还通过 [java.lang.String](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 类为字符串提供特殊支持。将字符串括在双引号内将自动创建一个新的`String`对象;例如,`String s = "this is a string";`。 `String`对象是 _ 不可变 _,这意味着一旦创建,它们的值就无法更改。 `String`类在技术上不是原始数据类型,但考虑到语言给予它的特殊支持,您可能倾向于将其视为这样。您将在[简单数据对象](../data/index.html)中了解有关`String`类的更多信息 +除了上面列出的八种原始数据类型之外,Java 编程语言还通过 [java.lang.String](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 类为字符串提供特殊支持。将字符串括在双引号内将自动创建一个新的`String`对象;例如,`String s = "this is a string";`。 `String`对象是*不可变*,这意味着一旦创建,它们的值就无法更改。 `String`类在技术上不是原始数据类型,但考虑到语言给予它的特殊支持,您可能倾向于将其视为这样。您将在[简单数据对象](../data/index.html)中了解有关`String`类的更多信息 ## 默认值 @@ -51,7 +51,7 @@ int gear = 1; ### 字面 -您可能已经注意到在初始化基本类型的变量时不使用`new`关键字。原始类型是语言中内置的特殊数据类型;它们不是从类创建的对象。 _ 文字 _ 是固定值的源代码表示;文字直接在代码中表示,无需计算。如下所示,可以将文字分配给基本类型的变量: +您可能已经注意到在初始化基本类型的变量时不使用`new`关键字。原始类型是语言中内置的特殊数据类型;它们不是从类创建的对象。*文字*是固定值的源代码表示;文字直接在代码中表示,无需计算。如下所示,可以将文字分配给基本类型的变量: ```java boolean result = true; @@ -106,7 +106,7 @@ Java 编程语言还支持`char`和`String`文字的一些特殊转义序列:` 还有一个特殊的`null`文字,可以用作任何参考类型的值。除了基本类型的变量之外,`null`可以分配给任何变量。除了测试其存在外,您无法使用`null`值。因此,`null`通常在程序中用作标记,以指示某些对象不可用。 -最后,还有一种称为 _ 类文字 _ 的特殊文字,通过获取类型名称并附加“`.class"`;例如,`String.class`。这是指对象(类型为`Class`) ])代表类型本身。 +最后,还有一种称为*类文字*的特殊文字,通过获取类型名称并附加“`.class"`;例如,`String.class`。这是指对象(类型为`Class`) ])代表类型本身。 ## 在数字文字中使用下划线字符 diff --git a/docs/230.md b/docs/230.md index 9e2ffc9bd45d9e7c2255b8ebcd4351b2414a3db5..e3981db422ecd32a1425ac040079dd70b36df1e8 100644 --- a/docs/230.md +++ b/docs/230.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/environment/properties.html](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) -_ 属性 _ 是作为 _ 键/值对 _ 管理的配置值。在每对中,键和值都是 [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 值。密钥标识并用于检索值,就像变量名用于检索变量的值一样。例如,能够下载文件的应用程序可能使用名为“download.lastDirectory”的属性来跟踪上次下载所使用的目录。 +_ 属性*是作为*键/值对*管理的配置值。在每对中,键和值都是 [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 值。密钥标识并用于检索值,就像变量名用于检索变量的值一样。例如,能够下载文件的应用程序可能使用名为“download.lastDirectory”的属性来跟踪上次下载所使用的目录。 要管理属性,请创建 [`java.util.Properties`](https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html) 的实例。此类提供以下方法: diff --git a/docs/232.md b/docs/232.md index 2a0bcbba6f0724e722f3f2025ecaa45400f7d4d0..61bb91c76a8f5750120bef761ccd67b8f956955f 100644 --- a/docs/232.md +++ b/docs/232.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/environment/env.html](https://docs.oracle.com/javase/tutorial/essential/environment/env.html) -许多操作系统使用 _ 环境变量 _ 将配置信息传递给应用程序。与 Java 平台中的属性一样,环境变量是键/值对,其中键和值都是字符串。设置和使用环境变量的约定因操作系统和命令行解释器之间而异。要了解如何将环境变量传递给系统上的应用程序,请参阅系统文档。 +许多操作系统使用*环境变量*将配置信息传递给应用程序。与 Java 平台中的属性一样,环境变量是键/值对,其中键和值都是字符串。设置和使用环境变量的约定因操作系统和命令行解释器之间而异。要了解如何将环境变量传递给系统上的应用程序,请参阅系统文档。 ## 查询环境变量 diff --git a/docs/233.md b/docs/233.md index d3ceef126e285465ef7b48141a53f21fdbf4b72f..ebacb87a79340b24dc6cb70e407c70f4a306d6e2 100644 --- a/docs/233.md +++ b/docs/233.md @@ -6,10 +6,10 @@ _ 首选项 API_ 允许应用程序在依赖于实现的后备存储中存储和检索配置数据。支持异步更新,并且多个线程甚至多个应用程序可以安全地更新同一组首选项。有关更多信息,请参阅[首选项 API 指南](https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/index.html)。 -部署在 _JAR 存档 _ 中的应用程序使用 _ 清单 _ 来描述存档的内容。有关更多信息,请参阅 JAR 文件课程中的[打包程序。](../../deployment/jar/index.html) +部署在 _JAR 存档*中的应用程序使用*清单*来描述存档的内容。有关更多信息,请参阅 JAR 文件课程中的[打包程序。](../../deployment/jar/index.html) -_Java Web Start 应用程序 _ 的配置包含在 _JNLP 文件 _ 中。有关更多信息,请参阅 [Java Web Start](../../deployment/webstart/index.html) 课程。 +_Java Web Start 应用程序*的配置包含在 _JNLP 文件*中。有关更多信息,请参阅 [Java Web Start](../../deployment/webstart/index.html) 课程。 _Java Plug-in applet_ 的配置部分取决于用于在网页中嵌入 applet 的 HTML 标记。根据 applet 和浏览器,这些标签可以包括``,``,``和``。有关更多信息,请参阅 [Java Applets](../../deployment/applet/index.html) 课程。 -类 [`java.util.ServiceLoader`](https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html) 提供简单的 _ 服务提供商 _ 设施。服务提供者是 _ 服务 _ 的实现 - 一组众所周知的接口和(通常是抽象的)类。服务提供者中的类通常实现接口并子类化服务中定义的类。服务提供商可以作为扩展安装(参见[扩展机制](../../ext/index.html))。通过将提供者添加到类路径或通过其他特定于平台的方式,也可以使提供者可用。 \ No newline at end of file +类 [`java.util.ServiceLoader`](https://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html) 提供简单的*服务提供商*设施。服务提供者是*服务*的实现 - 一组众所周知的接口和(通常是抽象的)类。服务提供者中的类通常实现接口并子类化服务中定义的类。服务提供商可以作为扩展安装(参见[扩展机制](../../ext/index.html))。通过将提供者添加到类路径或通过其他特定于平台的方式,也可以使提供者可用。 \ No newline at end of file diff --git a/docs/237.md b/docs/237.md index ea54a2ea38c5bd8996ee0e53d692d1bdcbf31865..c5c343aa1ecbedc22e27330cab902f5bac5a5b33 100644 --- a/docs/237.md +++ b/docs/237.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/environment/security.html](https://docs.oracle.com/javase/tutorial/essential/environment/security.html) -_ 安全管理器 _ 是定义应用程序安全策略的对象。此策略指定不安全或敏感的操作。安全策略不允许的任何操作都会导致 [`SecurityException`](https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityException.html) 被抛出。应用程序还可以查询其安全管理器以发现允许的操作。 +_ 安全管理器*是定义应用程序安全策略的对象。此策略指定不安全或敏感的操作。安全策略不允许的任何操作都会导致 [`SecurityException`](https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityException.html) 被抛出。应用程序还可以查询其安全管理器以发现允许的操作。 通常,Web applet 与浏览器或 Java Web Start 插件提供的安全管理器一起运行。除非应用程序本身定义一个,否则其他类型的应用程序通常在没有安全管理器的情如果没有安全管理器,则该应用程序没有安全策略,并且没有任何限制。 diff --git a/docs/239.md b/docs/239.md index 25da7069f4fac5803c92f506f5c4a66550e325b7..0a5ae4cb33d30255f8462bcd5e701f0ac49481e4 100644 --- a/docs/239.md +++ b/docs/239.md @@ -143,7 +143,7 @@ export PATH `CLASSPATH`变量是告诉应用程序(包括 JDK 工具)查找用户类的一种方法。 (属于 JRE,JDK 平台和扩展的类应该通过其他方式定义,例如引导类路径或扩展目录。) -指定类路径的首选方法是使用`-cp`命令行开关。这允许为每个应用程序单独设置`CLASSPATH`,而不会影响其他应用程序。 _ 设置`CLASSPATH`可能很棘手,应小心执行。_ +指定类路径的首选方法是使用`-cp`命令行开关。这允许为每个应用程序单独设置`CLASSPATH`,而不会影响其他应用程序。*设置`CLASSPATH`可能很棘手,应小心执行。_ 类路径的默认值为“。”,表示仅搜索当前目录。指定 CLASSPATH 变量或`-cp`命令行开关将覆盖此值。 diff --git a/docs/24.md b/docs/24.md index 1a4fc455c565dbb56ebbdc408a5df8e8e08f664d..661bef1f6a813ff1687fd8b332cd3e4134b8002e 100644 --- a/docs/24.md +++ b/docs/24.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html) -_ 数组 _ 是一个容器对象,它包含固定数量的单一类型的值。创建数组时,将建立数组的长度。创建后,其长度是固定的。您已经在“Hello World!”的`main`方法中看到了一个数组示例。应用。本节更详细地讨论了数组。 +_ 数组*是一个容器对象,它包含固定数量的单一类型的值。创建数组时,将建立数组的长度。创建后,其长度是固定的。您已经在“Hello World!”的`main`方法中看到了一个数组示例。应用。本节更详细地讨论了数组。 ![Illustration of an array as 10 boxes numbered 0 through 9; an index of 0 indicates the first element in the array](img/1c76b8eadfd68779ef8986ab2bca7e3b.jpg) @@ -10,7 +10,7 @@ _ 数组 _ 是一个容器对象,它包含固定数量的单一类型的值。 -数组中的每个项称为 _ 元素 _,每个元素由其数字 _ 索引 _ 访问。如上图所示,编号从 0 开始。例如,第 9 个元素将在索引 8 处访问。 +数组中的每个项称为*元素*,每个元素由其数字*索引*访问。如上图所示,编号从 0 开始。例如,第 9 个元素将在索引 8 处访问。 以下程序 [`ArrayDemo`](examples/ArrayDemo.java) 创建一个整数数组,将一些值放入数组中,并将每个值打印到标准输出。 @@ -78,7 +78,7 @@ Element at index 9: 1000 ``` -在实际编程情况下,您可能会使用受支持的 _ 循环结构之一 _ 来迭代数组的每个元素,而不是像前面的示例中那样单独写入每一行。但是,该示例清楚地说明了数组语法。您将了解[控制流程](flow.html)部分中的各种循环结构(`for`,`while`和`do-while`)。 +在实际编程情况下,您可能会使用受支持的*循环结构之一*来迭代数组的每个元素,而不是像前面的示例中那样单独写入每一行。但是,该示例清楚地说明了数组语法。您将了解[控制流程](flow.html)部分中的各种循环结构(`for`,`while`和`do-while`)。 ## 声明变量以引用数组 @@ -164,7 +164,7 @@ int[] anArray = { 这里数组的长度由大括号之间提供的值的数量确定,并用逗号分隔。 -您还可以使用两组或更多组括号声明数组数组(也称为 _ 多维 _ 数组),例如`String[][] names`。因此,每个元素必须由相应数量的索引值访问。 +您还可以使用两组或更多组括号声明数组数组(也称为*多维*数组),例如`String[][] names`。因此,每个元素必须由相应数量的索引值访问。 在 Java 编程语言中,多维数组是一个数组,其组件本身就是数组。这与 C 或 Fortran 中的数组不同。这样做的结果是允许行的长度不同,如下面的 [`MultiDimArrayDemo`](examples/MultiDimArrayDemo.java) 程序所示: @@ -209,7 +209,7 @@ public static void arraycopy(Object src, int srcPos, ``` -两个`Object`参数指定要从复制 _ 的数组和将 _ 复制到 _ 的数组。三个`int`参数指定源数组中的起始位置,目标数组中的起始位置以及要复制的数组元素的数量。_ +两个`Object`参数指定要从复制*的数组和将*复制到*的数组。三个`int`参数指定源数组中的起始位置,目标数组中的起始位置以及要复制的数组元素的数量。_ 以下程序 [`ArrayCopyDemo`](examples/ArrayCopyDemo.java) 声明了一系列`char`元素,拼写单词“decafffeinated”。它使用`System.arraycopy`方法将数组组件的子序列复制到第二个数组中: @@ -255,7 +255,7 @@ class ArrayCopyOfDemo { ``` -如您所见,此程序的输出相同(`caffein`),尽管它需要较少的代码行。请注意,`copyOfRange`方法的第二个参数是要复制的范围的初始索引,包括,而第三个参数是要复制的范围的最终索引,_ 专用 _。在此示例中,要复制的范围不包括索引 9 处的数组元素(其中包含字符`a`)。 +如您所见,此程序的输出相同(`caffein`),尽管它需要较少的代码行。请注意,`copyOfRange`方法的第二个参数是要复制的范围的初始索引,包括,而第三个参数是要复制的范围的最终索引,*专用*。在此示例中,要复制的范围不包括索引 9 处的数组元素(其中包含字符`a`)。 `java.util.Arrays`类中的方法提供的一些其他有用的操作是: diff --git a/docs/242.md b/docs/242.md index 682444683e53f54a112ebb11cc5f8036225cc60a..a6e0c9819836eb2919b8ae2bbc544f8b48c467b1 100644 --- a/docs/242.md +++ b/docs/242.md @@ -4,7 +4,7 @@ ## 什么是正则表达式? -_ 正则表达式 _ 是一种基于集合中每个字符串共享的共同特征来描述一组字符串的方法。它们可用于搜索,编辑或操作文本和数据。您必须学习特定的语法来创建正则表达式 - 这超出了 Java 编程语言的常规语法。正则表达式的复杂程度各不相同,但是一旦理解了它们的构造基础,您就能够解密(或创建)任何正则表达式。 +_ 正则表达式*是一种基于集合中每个字符串共享的共同特征来描述一组字符串的方法。它们可用于搜索,编辑或操作文本和数据。您必须学习特定的语法来创建正则表达式 - 这超出了 Java 编程语言的常规语法。正则表达式的复杂程度各不相同,但是一旦理解了它们的构造基础,您就能够解密(或创建)任何正则表达式。 该路径教授 [`java.util.regex`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html) API 支持的正则表达式语法,并提供了几个工作示例来说明各种对象如何交互。在正则表达式的世界中,有许多不同的风格可供选择,例如 grep,Perl,Tcl,Python,PHP 和 awk。 `java.util.regex` API 中的正则表达式语法与 Perl 中的正则表达式语法最相似。 diff --git a/docs/244.md b/docs/244.md index be92aeb4639de2557a62f874b22ce0412f884328..673b017e7daa1fb7e8a5d3036ab70c8fef068074 100644 --- a/docs/244.md +++ b/docs/244.md @@ -20,7 +20,7 @@ I found the text foo starting at index 0 and ending at index 3. -字符串中的每个字符都驻留在自己的 _ 单元格 _ 中,索引位置指向每个单元格。字符串“foo”从索引 0 开始,到索引 3 结束,即使字符本身只占用单元格 0,1 和 2。 +字符串中的每个字符都驻留在自己的*单元格*中,索引位置指向每个单元格。字符串“foo”从索引 0 开始,到索引 3 结束,即使字符本身只占用单元格 0,1 和 2。 随后的比赛,你会发现一些重叠;下一个匹配的起始索引与上一个匹配的结束索引相同: @@ -45,7 +45,7 @@ I found the text cats starting at index 0 and ending at index 4. ``` -即使输入字符串中不存在点“`.`”,匹配仍然成功。它成功是因为点是 _ 元字符 _ - 由匹配器解释的具有特殊含义的字符。元字符“。”表示“任何字符”,这就是本例中匹配成功的原因。 +即使输入字符串中不存在点“`.`”,匹配仍然成功。它成功是因为点是*元字符 _ - 由匹配器解释的具有特殊含义的字符。元字符“。”表示“任何字符”,这就是本例中匹配成功的原因。 此 API 支持的元字符为:`<([{\^-=$!|]})?*+.>` diff --git a/docs/245.md b/docs/245.md index 20ae20461d225582723cd13254a44b9b021b7723..272ed635c24494ead63eb10e8e7b675716b18a88 100644 --- a/docs/245.md +++ b/docs/245.md @@ -50,7 +50,7 @@ No match found. ### 否定 -要匹配除以外的所有字符 _,请在字符类的开头插入“`^`”元字符。这种技术称为 _ 否定 _。_ +要匹配除以外的所有字符*,请在字符类的开头插入“`^`”元字符。这种技术称为*否定*。_ ```java @@ -72,7 +72,7 @@ I found the text "hat" starting at index 0 and ending at index 3. ``` -仅当输入字符串的第一个字符 _ 而不是 _ 包含字符类定义的任何字符时,匹配才会成功。 +仅当输入字符串的第一个字符*而不是*包含字符类定义的任何字符时,匹配才会成功。 ### 范围 @@ -121,7 +121,7 @@ I found the text "foo6" starting at index 0 and ending at index 4. ### 工会 -您还可以使用 _ 联合 _ 创建由两个或多个单独的字符类组成的单个字符类。要创建联合,只需将一个类嵌套在另一个类中,例如`[0-4[6-8]]`。此特定联合创建一个与数字 0,1,2,3,4,6,7 和 8 匹配的单个字符类。 +您还可以使用*联合*创建由两个或多个单独的字符类组成的单个字符类。要创建联合,只需将一个类嵌套在另一个类中,例如`[0-4[6-8]]`。此特定联合创建一个与数字 0,1,2,3,4,6,7 和 8 匹配的单个字符类。 ```java Enter your regex: [0-4[6-8]] @@ -202,7 +202,7 @@ No match found. ### 减法 -最后,您可以使用 _ 减法 _ 来否定一个或多个嵌套字符类,例如`[0-9&&[^345]]`。此示例创建一个匹配 0 到 9 之间的所有字符类,_ 除了 _ 数字 3,4 和 5。 +最后,您可以使用*减法*来否定一个或多个嵌套字符类,例如`[0-9&&[^345]]`。此示例创建一个匹配 0 到 9 之间的所有字符类,*除了*数字 3,4 和 5。 ```java diff --git a/docs/246.md b/docs/246.md index b2d55f61e0913cf9997c25d5dfb72dc6f6984599..64d727fe40f75d6f186e91448d4cb4c42ce92021 100644 --- a/docs/246.md +++ b/docs/246.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html](https://docs.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html) -[`Pattern`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) API 包含许多有用的 _ 预定义字符类 _,它们为常用的正则表达式提供了方便的缩写: +[`Pattern`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) API 包含许多有用的*预定义字符类*,它们为常用的正则表达式提供了方便的缩写: | 构造 | 描述 | | --- | --- | @@ -16,7 +16,7 @@ 在上表中,左侧列中的每个构造都是右侧列中字符类的简写。例如,`\d`表示数字范围(0-9),`\w`表示单词字符(任何小写字母,任何大写字母,下划线字符或任何数字)。尽可能使用预定义的类。它们使您的代码更易于阅读,并消除格式错误的字符类引入的错误。 -以反斜杠开头的构造称为 _ 转义构造 _。我们在 [String Literals](literals.html) 部分中预览了转义结构,其中我们提到使用反斜杠和`\Q`和`\E`作为报价。如果在字符串文字中使用转义构造,则必须在反斜杠前面加上另一个反斜杠,以便编译字符串。例如: +以反斜杠开头的构造称为*转义构造*。我们在 [String Literals](literals.html) 部分中预览了转义结构,其中我们提到使用反斜杠和`\Q`和`\E`作为报价。如果在字符串文字中使用转义构造,则必须在反斜杠前面加上另一个反斜杠,以便编译字符串。例如: ```java diff --git a/docs/247.md b/docs/247.md index 563aabe3d185d8e50cf3fae89ebf513aba7cf32d..716e1fc5e98dbbd6dbe97e8d2f897edc07e46b91 100644 --- a/docs/247.md +++ b/docs/247.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/regex/quant.html](https://docs.oracle.com/javase/tutorial/essential/regex/quant.html) -_ 量词 _ 允许您指定要匹配的出现次数。为方便起见,下面介绍了描述贪婪,不情愿和占有量词的 Pattern API 规范的三个部分。乍一看,似乎量词`X?`,`X??`和`X?+`完全相同,因为它们都承诺匹配“`X`,一次或根本不匹配”。有一些细微的实现差异,将在本节末尾附近解释。 +_ 量词*允许您指定要匹配的出现次数。为方便起见,下面介绍了描述贪婪,不情愿和占有量词的 Pattern API 规范的三个部分。乍一看,似乎量词`X?`,`X??`和`X?+`完全相同,因为它们都承诺匹配“`X`,一次或根本不匹配”。有一些细微的实现差异,将在本节末尾附近解释。 | 贪婪 | 不情愿的 | 所有格 | 含义 | | --- | --- | --- | --- | @@ -33,7 +33,7 @@ No match found. ## 零长度匹配 -在上面的示例中,匹配在前两种情况下成功,因为表达式`a?`和`a*`都允许字母`a`出现零次。您还会注意到开始和结束索引都是零,这与我们到目前为止看到的任何示例都不同。空输入字符串`""`没有长度,因此测试只匹配索引 0 处的任何内容。此类匹配称为 _ 零长度匹配 _。在以下几种情况下可能发生零长度匹配:在空输入字符串中,在输入字符串的开头,在输入字符串的最后一个字符之后,或在输入字符串的任意两个字符之间。零长度匹配很容易识别,因为它们始终在相同的索引位置开始和结束。 +在上面的示例中,匹配在前两种情况下成功,因为表达式`a?`和`a*`都允许字母`a`出现零次。您还会注意到开始和结束索引都是零,这与我们到目前为止看到的任何示例都不同。空输入字符串`""`没有长度,因此测试只匹配索引 0 处的任何内容。此类匹配称为*零长度匹配*。在以下几种情况下可能发生零长度匹配:在空输入字符串中,在输入字符串的开头,在输入字符串的最后一个字符之后,或在输入字符串的任意两个字符之间。零长度匹配很容易识别,因为它们始终在相同的索引位置开始和结束。 让我们通过几个例子来探索零长度匹配。将输入字符串更改为单个字母“a”,您会发现一些有趣的内容: @@ -221,7 +221,7 @@ No match found. 贪婪,不情愿和占有欲量词之间存在细微差别。 -贪婪量词被认为是“贪婪的”,因为它们在尝试第一次匹配之前强制匹配器读入或 _ 吃 _ 整个输入字符串。如果第一次匹配尝试(整个输入字符串)失败,匹配器将输入字符串后退一个字符并再次尝试,重复该过程直到找到匹配项或者没有剩余字符可以退出。根据表达式中使用的量词,它将尝试匹配的最后一件事是 1 或 0 个字符。 +贪婪量词被认为是“贪婪的”,因为它们在尝试第一次匹配之前强制匹配器读入或*吃*整个输入字符串。如果第一次匹配尝试(整个输入字符串)失败,匹配器将输入字符串后退一个字符并再次尝试,重复该过程直到找到匹配项或者没有剩余字符可以退出。根据表达式中使用的量词,它将尝试匹配的最后一件事是 1 或 0 个字符。 然而,不情愿的量词采用相反的方法:它们从输入字符串的开头开始,然后不情愿地一次吃一个字符寻找匹配。他们尝试的最后一件事是整个输入字符串。 diff --git a/docs/248.md b/docs/248.md index 931a60325f7e06433a8e7fe4ea2bae95aa33eb87..fa8d2ebd8a584f26d831e933c288fa50c4b8b12d 100644 --- a/docs/248.md +++ b/docs/248.md @@ -4,7 +4,7 @@ 在[上一节](quant.html)中,我们看到量词一次如何附加到一个字符,字符类或捕获组。但到目前为止,我们还没有详细讨论过捕捉群体的概念。 -_ 捕获组 _ 是一种将多个字符视为一个单元的方法。它们是通过将要分组的字符放在一组括号中来创建的。例如,正则表达式`(dog)`创建一个包含字母`"d" "o"`和`"g"`的组。与捕获组匹配的输入字符串部分将保存在内存中,以便以后通过反向引用进行调用(如下面的 [Backreferences](#backref) 部分所述)。 +_ 捕获组*是一种将多个字符视为一个单元的方法。它们是通过将要分组的字符放在一组括号中来创建的。例如,正则表达式`(dog)`创建一个包含字母`"d" "o"`和`"g"`的组。与捕获组匹配的输入字符串部分将保存在内存中,以便以后通过反向引用进行调用(如下面的 [Backreferences](#backref) 部分所述)。 ## 编号 @@ -17,7 +17,7 @@ _ 捕获组 _ 是一种将多个字符视为一个单元的方法。它们是通 要查找表达式中存在多少个组,请在匹配器对象上调用`groupCount`方法。 `groupCount`方法返回`int`,显示匹配器模式中存在的捕获组数。在此示例中,`groupCount`将返回数字`4`,表明该模式包含 4 个捕获组。 -还有一个特殊组,即组 0,它始终代表整个表达式。该组不包括在`groupCount`报告的总数中。以`(?`开头的组是纯的 _ 非捕获组 _,它们不捕获文本而不计入组总数。 (您将在[模式类](pattern.html)的方法部分中看到非捕获组的示例。) +还有一个特殊组,即组 0,它始终代表整个表达式。该组不包括在`groupCount`报告的总数中。以`(?`开头的组是纯的*非捕获组*,它们不捕获文本而不计入组总数。 (您将在[模式类](pattern.html)的方法部分中看到非捕获组的示例。) 了解组的编号非常重要,因为某些`Matcher`方法接受`int`指定特定组编号作为参数: @@ -27,7 +27,7 @@ _ 捕获组 _ 是一种将多个字符视为一个单元的方法。它们是通 ## 反向引用 -与捕获组匹配的输入字符串部分保存在内存中,以便以后通过 _ 反向引用 _ 进行调用。在正则表达式中将反向引用指定为反斜杠(`\`),后跟一个指示要调用的组的编号的数字。例如,表达式`(\d\d)`定义一个匹配行中两个数字的捕获组,可以通过反向引用`\1`在表达式中稍后调用。 +与捕获组匹配的输入字符串部分保存在内存中,以便以后通过*反向引用*进行调用。在正则表达式中将反向引用指定为反斜杠(`\`),后跟一个指示要调用的组的编号的数字。例如,表达式`(\d\d)`定义一个匹配行中两个数字的捕获组,可以通过反向引用`\1`在表达式中稍后调用。 要匹配任何 2 位数字,后跟完全相同的两位数字,您可以使用`(\d\d)\1`作为正则表达式: diff --git a/docs/249.md b/docs/249.md index a5601626684477e58f1a9a85ccbade88d54200e2..373960650573c39d1a88a795bbe50f5901e5ed2d 100644 --- a/docs/249.md +++ b/docs/249.md @@ -2,9 +2,9 @@ > 原文: [https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html](https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html) -到目前为止,我们只对在特定输入字符串中某个位置是否找到匹配 _ 感兴趣。我们从不关心 _ 匹配正在发生的字符串中的 _。_ +到目前为止,我们只对在特定输入字符串中某个位置是否找到匹配*感兴趣。我们从不关心*匹配正在发生的字符串中的*。_ -通过使用 _ 边界匹配器 _ 指定此类信息,可以使模式匹配更精确。例如,您可能对查找特定单词感兴趣,但前提是它出现在行的开头或结尾。或者您可能想知道匹配是在字边界上还是在上一场比赛结束时发生。 +通过使用*边界匹配器*指定此类信息,可以使模式匹配更精确。例如,您可能对查找特定单词感兴趣,但前提是它出现在行的开头或结尾。或者您可能想知道匹配是在字边界上还是在上一场比赛结束时发生。 下表列出并解释了所有边界匹配器。 diff --git a/docs/250.md b/docs/250.md index 043b09fd78a8ec13d0948567badd6e774014550c..df174bd1f1a3e5887741a675ffce039572fc8b22 100644 --- a/docs/250.md +++ b/docs/250.md @@ -58,7 +58,7 @@ Pattern pattern = Pattern.compile("aa", flags); ## 嵌入式标志表达式 -也可以使用 _ 嵌入标志表达式 _ 启用各种标志。嵌入式标志表达式是`compile`的双参数版本的替代,并且在正则表达式本身中指定。以下示例使用原始测试工具 [`RegexTestHarness.java`](examples/RegexTestHarness.java) 和嵌入的标志表达式`(?i)`来启用不区分大小写的匹配。 +也可以使用*嵌入标志表达式*启用各种标志。嵌入式标志表达式是`compile`的双参数版本的替代,并且在正则表达式本身中指定。以下示例使用原始测试工具 [`RegexTestHarness.java`](examples/RegexTestHarness.java) 和嵌入的标志表达式`(?i)`来启用不区分大小写的匹配。 ```java @@ -171,8 +171,8 @@ five 通过几种模拟`java.util.regex.Pattern`行为的方法,`java.lang.String`中也存在正则表达式支持。为方便起见,下面介绍了 API 的主要摘录。 -* [`public boolean matches(String regex)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#matches-java.lang.String-) :判断此字符串是否与给定的正则表达式匹配。 `_str_ 。匹配(_ 正则表达式 _)`形式的这种方法的调用产生与表达式`Pattern.matches(_ 完全相同的结果。正则表达 _, _str_ )`。 -* [`public String[] split(String regex, int limit)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-) :围绕给定正则表达式的匹配拆分此字符串。 `_str_ .split( _regex_ , _n_ )`形式的这种方法的调用产生与表达`相同的结果。 Pattern.compile(_ 正则表达式 _)。split( _str_ , _n_ )` +* [`public boolean matches(String regex)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#matches-java.lang.String-) :判断此字符串是否与给定的正则表达式匹配。 `_str_ 。匹配(*正则表达式*)`形式的这种方法的调用产生与表达式`Pattern.matches(*完全相同的结果。正则表达*, _str_ )`。 +* [`public String[] split(String regex, int limit)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-) :围绕给定正则表达式的匹配拆分此字符串。 `_str_ .split( _regex_ , _n_ )`形式的这种方法的调用产生与表达`相同的结果。 Pattern.compile(*正则表达式*)。split( _str_ , _n_ )` * [`public String[] split(String regex)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-) :围绕给定正则表达式的匹配拆分此字符串。此方法与调用具有给定表达式且 limit 参数为零的双参数 split 方法的方法相同。结果数组中不包括尾随空字符串。 还有一种替换方法,用一个`CharSequence`替换另一个`CharSequence`: diff --git a/docs/251.md b/docs/251.md index 862efb095908b4d6a695093f89aff39666a51182..54d10d5272f37fbbb9806333d072b05d6710a705 100644 --- a/docs/251.md +++ b/docs/251.md @@ -6,7 +6,7 @@ ## 指数方法 -_ 索引方法 _ 提供有用的索引值,可以精确显示在输入字符串中找到匹配的位置: +_ 索引方法*提供有用的索引值,可以精确显示在输入字符串中找到匹配的位置: * [`public int start()`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#start--) :返回上一个匹配的起始索引。 * [`public int start(int group)`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#start-int-) :返回上一个匹配操作期间给定组捕获的子序列的起始索引。 @@ -15,7 +15,7 @@ _ 索引方法 _ 提供有用的索引值,可以精确显示在输入字符串 ## 研究方法 -_ 研究方法 _ 检查输入字符串并返回一个布尔值,指示是否找到该模式。 +_ 研究方法*检查输入字符串并返回一个布尔值,指示是否找到该模式。 * [`public boolean lookingAt()`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#lookingAt--) :尝试将从区域开头开始的输入序列与模式匹配。 * [`public boolean find()`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#find--) :尝试查找与模式匹配的输入序列的下一个子序列。 @@ -24,7 +24,7 @@ _ 研究方法 _ 检查输入字符串并返回一个布尔值,指示是否找 ## 替换方法 -_ 替换方法 _ 是替换输入字符串中的文本的有用方法。 +_ 替换方法*是替换输入字符串中的文本的有用方法。 * [`public Matcher appendReplacement(StringBuffer sb, String replacement)`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#appendReplacement-java.lang.StringBuffer-java.lang.String-) :实现非终端附加和替换步骤。 * [`public StringBuffer appendTail(StringBuffer sb)`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html#appendTail-java.lang.StringBuffer-) :实现终端追加和替换步骤。 @@ -158,7 +158,7 @@ OUTPUT: The cat says meow. All cats say meow. ``` -在第一个版本中,`dog`的所有出现都被`cat`替换。但为何停在这里?您可以替换匹配 _ 任何 _ 正则表达式的文本,而不是替换像`dog`这样的简单文字。此方法的 API 声明“给定正则表达式`a*b`,输入`aabfooaabfooabfoob`和替换字符串`-`,在该表达式的匹配器上调用此方法将产生字符串`-foo-foo-foo-`。” +在第一个版本中,`dog`的所有出现都被`cat`替换。但为何停在这里?您可以替换匹配*任何*正则表达式的文本,而不是替换像`dog`这样的简单文字。此方法的 API 声明“给定正则表达式`a*b`,输入`aabfooaabfooabfoob`和替换字符串`-`,在该表达式的匹配器上调用此方法将产生字符串`-foo-foo-foo-`。” 这是 [`ReplaceDemo2.java`](examples/ReplaceDemo2.java) 代码: @@ -228,5 +228,5 @@ OUTPUT: -foo-foo-foo- 为方便起见,`String`类也模仿了几种`Matcher`方法: -* [`public String replaceFirst(String regex, String replacement)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceFirst-java.lang.String-java.lang.String-) :用给定的替换替换此字符串的第一个子字符串,该子字符串与给定的正则表达式匹配。 `_str_ .replaceFirst( _regex_ , _repl_ )`形式的这种方法的调用产生与表达式`完全相同的结果] Pattern.compile(_ 正则表达式 _)。匹配( _str_ )。replaceFirst( _repl_ )` +* [`public String replaceFirst(String regex, String replacement)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceFirst-java.lang.String-java.lang.String-) :用给定的替换替换此字符串的第一个子字符串,该子字符串与给定的正则表达式匹配。 `_str_ .replaceFirst( _regex_ , _repl_ )`形式的这种方法的调用产生与表达式`完全相同的结果] Pattern.compile(*正则表达式*)。匹配( _str_ )。replaceFirst( _repl_ )` * [`public String replaceAll(String regex, String replacement)`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replaceAll-java.lang.String-java.lang.String-) :用给定的替换替换此字符串中与给定正则表达式匹配的每个子字符串。 `_str_ .replaceAll( _regex_ , _repl_ )`形式的这种方法的调用产生与表达式`完全相同的结果] Pattern.compile( _regex_ )。匹配( _str_ ).replaceAll( _repl_ )` \ No newline at end of file diff --git a/docs/253.md b/docs/253.md index 89c93f9fd5e500a3c6eb860d5d02e748edaee608..e1e325fb7bc578f66044b174fe7aaeb124d88fc5 100644 --- a/docs/253.md +++ b/docs/253.md @@ -16,7 +16,7 @@ String hexPattern = "\x{" + Integer.toHexString(codePoint) + "}"; ``` -除了其值之外,每个 Unicode 字符都具有某些属性或属性。您可以将属于特定类别的单个字符与表达式`\ p { _prop_ }`进行匹配。您可以使用表达式`\ P { _prop_ }`匹配属于特定类别的单个字符 _ 而不是 _。 +除了其值之外,每个 Unicode 字符都具有某些属性或属性。您可以将属于特定类别的单个字符与表达式`\ p { _prop_ }`进行匹配。您可以使用表达式`\ P { _prop_ }`匹配属于特定类别的单个字符*而不是*。 支持的三种属性类型是脚本,块和“常规”类别。 diff --git a/docs/255.md b/docs/255.md index 0efbc452832f6a7e3e3d4c825321da1164fdcad3..00187467dc6e63f5cf5179b6338e4bd43ef7270c 100644 --- a/docs/255.md +++ b/docs/255.md @@ -10,7 +10,7 @@ 4. 你如何强迫元字符像普通字符一样? 5. 你怎么称方括号括起来的一组字符?它是为了什么? 6. 这里有三个预定义的字符类:`\d`,`\s`和`\w`。描述每一个,并使用方括号重写它。 -7. 对于`\d`,`\s`和`\w`中的每一个,写入 _ 两个 _ 简单表达式,匹配 _ 对应的 _ 字符集。 +7. 对于`\d`,`\s`和`\w`中的每一个,写入*两个*简单表达式,匹配*对应的*字符集。 8. 考虑正则表达式`(dog){3}`。确定两个子表达式。表达式匹配什么字符串? ## 演习 diff --git a/docs/256.md b/docs/256.md index 4c2016bfac2e323bf175f6fe860f8416385e7ca5..e0c936792ed5328b015157d275e4f128097abd20 100644 --- a/docs/256.md +++ b/docs/256.md @@ -11,7 +11,7 @@ Java 富 Internet 应用程序(RIA)是具有类似于桌面应用程序的 传统上,应用程序在`main`方法中构建其用户界面,包括顶级`Frame`。这种编程风格阻止了在浏览器中轻松重新部署应用程序,因为它假定应用程序创建自己的`Frame`。当在浏览器中作为 applet 运行时,applet 是应该保存应用程序用户界面的顶级容器。不需要顶级`Frame`。 -在设计 Java 富 Internet 应用程序时,请使用 _ 基于组件的体系结构 _。尝试将其功能组织到一个或多个可以组合在一起的组件中。在此上下文中,术语“组件”是指 GUI 元素,它是 AWT `Component`类,Swing `JComponent`类或另一个子类的子类。例如,你可以有一个顶级`JPanel`,其中包含其他 UI 组件(比如更多嵌套的 JPanel 和文本字段,组合框等的组合)。通过这种设计,将核心功能部署为 applet 或 Java Web Start 应用程序变得相对容易。 +在设计 Java 富 Internet 应用程序时,请使用*基于组件的体系结构*。尝试将其功能组织到一个或多个可以组合在一起的组件中。在此上下文中,术语“组件”是指 GUI 元素,它是 AWT `Component`类,Swing `JComponent`类或另一个子类的子类。例如,你可以有一个顶级`JPanel`,其中包含其他 UI 组件(比如更多嵌套的 JPanel 和文本字段,组合框等的组合)。通过这种设计,将核心功能部署为 applet 或 Java Web Start 应用程序变得相对容易。 要部署为 Java applet,只需将核心功能包装在`Applet`或`JApplet`中,并根据需要添加特定于浏览器的功能。要部署为 Java Web Start 应用程序,请将功能包装在`JFrame`中。 diff --git a/docs/261.md b/docs/261.md index 9c5affea103f4677f182543645fc88a480d52234..d9f5b16abc340eee2674f3d50d9425f0e16e63c2 100644 --- a/docs/261.md +++ b/docs/261.md @@ -4,12 +4,12 @@ applet 可以通过以下方式对重大事件做出反应: -* 它可以 _ 初始化 _ 本身。 -* 它可以 _ 启动 _ 运行。 -* 它可以 _ 停止 _ 运行。 -* 它可以执行 _ 最终清理 _,为卸载做准备。 +* 它可以*初始化*本身。 +* 它可以*启动*运行。 +* 它可以*停止*运行。 +* 它可以执行*最终清理*,为卸载做准备。 -本节介绍一个使用所有这些方法的新 applet `Simple`。与 Java 应用程序不同,applet 执行 _ 而不是 _ 需要实现`main`方法。 +本节介绍一个使用所有这些方法的新 applet `Simple`。与 Java 应用程序不同,applet 执行*而不是*需要实现`main`方法。 这是`Simple`小程序。 diff --git a/docs/264.md b/docs/264.md index ea1d3d35e7ae7d345c8f6cb5495a2a3fdc417dcb..1aaae73fd03af23442d5b74423950dc349cb72aa 100644 --- a/docs/264.md +++ b/docs/264.md @@ -119,4 +119,4 @@ Deployment Toolkit 脚本包含有用的 JavaScript 函数,可用于在网页 8. 在浏览器中打开 applet 的 HTML 页面以查看 applet。同意在出现提示时运行 applet。检查 Java 控制台日志以获取错误和调试消息。 -[下载 _ 动态树演示小程序 _ 示例的源代码](examplesIndex.html#ComponentArchDynamicTreeDemo)以进一步试验。 \ No newline at end of file +[下载*动态树演示小程序*示例的源代码](examplesIndex.html#ComponentArchDynamicTreeDemo)以进一步试验。 \ No newline at end of file diff --git a/docs/27.md b/docs/27.md index b64b147fb096c6fa09090e7a05bf258d4935948a..9959616027b2a826cec568092c55c522be0a5f4c 100644 --- a/docs/27.md +++ b/docs/27.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) -既然你已经学会了如何声明和初始化变量,你可能想知道如何 _ 用它们做某事 _。学习 Java 编程语言的操作符是一个很好的起点。运算符是对一个,两个或三个 _ 操作数 _ 执行特定操作的特殊符号,然后返回结果。 +既然你已经学会了如何声明和初始化变量,你可能想知道如何*用它们做某事*。学习 Java 编程语言的操作符是一个很好的起点。运算符是对一个,两个或三个*操作数*执行特定操作的特殊符号,然后返回结果。 在我们探索 Java 编程语言的运算符时,提前知道哪些运算符具有最高优先级可能会对您有所帮助。下表中的运算符按优先顺序列出。运算符越接近表格顶部,其优先级越高。优先级较高的运算符在优先级相对较低的运算符之前进行求值。同一行上的运算符具有相同的优先权。当具有相同优先级的运算符出现在同一表达式中时,规则必须控制首先计算的值。除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左进行计算。 diff --git a/docs/271.md b/docs/271.md index 4595a8dc8a82323c8e6ca28e696c7dfff07d0a5c..37f124ad46a9332a70b7ea4c40d346e174b840ea 100644 --- a/docs/271.md +++ b/docs/271.md @@ -139,4 +139,4 @@ John Doe : 25 : 1 Example Lane, Santa Clara, CA : 408-555-0100, 408-555-0102 * * * -[从[AppG 示例下载 _ 调用 JavaScript 代码的源代码 _](examplesIndex.html#InvokingJavaScriptFromApplet)进一步试验。 \ No newline at end of file +[从[AppG 示例下载*调用 JavaScript 代码的源代码 _](examplesIndex.html#InvokingJavaScriptFromApplet)进一步试验。 \ No newline at end of file diff --git a/docs/272.md b/docs/272.md index be6edf65a28f22ee29f3f2e591842ab0c7d234eb..b947e640ad6cd97e85beab79ccc1a8670db81753 100644 --- a/docs/272.md +++ b/docs/272.md @@ -185,4 +185,4 @@ Today's date is: 5/28/13 4:12 PM //shows current date 检查放置在 JavaScript 代码调用的 applet 上的[安全限制](security.html#jsNote)。 -[下载源代码](examplesIndex.html#InvokingAppletMethodsFromJavaScript)为 _ 调用 Applet 方法从 JavaScript 代码 _ 示例进一步试验。 \ No newline at end of file +[下载源代码](examplesIndex.html#InvokingAppletMethodsFromJavaScript)为*调用 Applet 方法从 JavaScript 代码*示例进一步试验。 \ No newline at end of file diff --git a/docs/273.md b/docs/273.md index 19b402cb7fcc6ccb40013f038076ebb9471263d5..b2a8b9e8986e4973963aeb80c3765c753e6a6814 100644 --- a/docs/273.md +++ b/docs/273.md @@ -43,4 +43,4 @@ * * * -[下载 _ 状态和事件处理器 _ 示例的源代码](examplesIndex.html#StatusEventHandler)以进一步试验。 \ No newline at end of file +[下载*状态和事件处理器*示例的源代码](examplesIndex.html#StatusEventHandler)以进一步试验。 \ No newline at end of file diff --git a/docs/274.md b/docs/274.md index 7c2200d481b74a09c9d62f4c2191e75c2c581061..f0ba7390dfa0fb541a76a6ca4667ede9e028ddab 100644 --- a/docs/274.md +++ b/docs/274.md @@ -97,4 +97,4 @@ private void dump(Node root, String prefix) { * * * -[下载 _DOM 转储 _ 示例的源代码](examplesIndex.html#ManipulatingDOM)以进一步试验。 \ No newline at end of file +[下载 _DOM 转储*示例的源代码](examplesIndex.html#ManipulatingDOM)以进一步试验。 \ No newline at end of file diff --git a/docs/277.md b/docs/277.md index 65a9ed11118887971d74e13e42e7c81fb24fb386..51d747aef5d5dac2cbe172e991df9f39a58ac250 100644 --- a/docs/277.md +++ b/docs/277.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/deployment/applet/draggableApplet.html](https://docs.oracle.com/javase/tutorial/deployment/applet/draggableApplet.html) -通过指定`draggable`参数部署的 Java 小程序可以拖动到浏览器之外并动态转换为 Java Web Start 应用程序。可以通过按 Alt 键和鼠标左键并拖动鼠标来拖动 Java 小程序。当拖动操作开始时,applet 将从其父容器(`Applet`或`JApplet`)中移除,并放置在新的未修饰的顶级窗口(`Frame`或`JFrame`)中。拖动的小程序旁边会显示一个小的浮动关闭按钮。单击浮动“关闭”按钮时,小程序将重新放回浏览器中。可以拖出浏览器的 Java 小程序以后称为 _ 可拖动小程序 _。 +通过指定`draggable`参数部署的 Java 小程序可以拖动到浏览器之外并动态转换为 Java Web Start 应用程序。可以通过按 Alt 键和鼠标左键并拖动鼠标来拖动 Java 小程序。当拖动操作开始时,applet 将从其父容器(`Applet`或`JApplet`)中移除,并放置在新的未修饰的顶级窗口(`Frame`或`JFrame`)中。拖动的小程序旁边会显示一个小的浮动关闭按钮。单击浮动“关闭”按钮时,小程序将重新放回浏览器中。可以拖出浏览器的 Java 小程序以后称为*可拖动小程序*。 您可以通过以下方式自定义可拖动小程序的行为: @@ -55,7 +55,7 @@ ## 当 Applet 与浏览器断开连接时,启用添加桌面快捷方式 -如果用户在页面外拖动 applet 后关闭浏览器窗口或导航离开页面,则称 applet 与浏览器 _ 断开连接 _。当 applet 与浏览器断开连接时,您可以为 applet 创建桌面快捷方式。桌面快捷方式可用于在浏览器外部启动应用程序。要启用桌面快捷方式的创建,请将`offline-allowed`和`shortcut`标记添加到小程序的 Java 网络启动协议(JNLP)文件中。 +如果用户在页面外拖动 applet 后关闭浏览器窗口或导航离开页面,则称 applet 与浏览器*断开连接*。当 applet 与浏览器断开连接时,您可以为 applet 创建桌面快捷方式。桌面快捷方式可用于在浏览器外部启动应用程序。要启用桌面快捷方式的创建,请将`offline-allowed`和`shortcut`标记添加到小程序的 Java 网络启动协议(JNLP)文件中。 ```java @@ -78,7 +78,7 @@ 您可以定义 applet 的关闭方式。例如,你的 Swing applet 可能有一个`JButton`来关闭 applet,而不是依赖于默认的浮动关闭按钮。 -Java Plug-in 软件为 applet 提供了`ActionListener`类的实例。 `ActionListener`类的这个实例,也称为 _ 关闭监听器 _,可用于修改 applet 的默认关闭行为。 +Java Plug-in 软件为 applet 提供了`ActionListener`类的实例。 `ActionListener`类的这个实例,也称为*关闭监听器*,可用于修改 applet 的默认关闭行为。 要定义应如何关闭 applet,请在 applet 中实现`setAppletCloseListener`和`appletRestored`方法。 diff --git a/docs/278.md b/docs/278.md index 836c3e32efacfc3c3cfad7bc18f744a67ffd19b1..4e6dfd4dd998bc5d5a3caf5f3538e1d84c055618 100644 --- a/docs/278.md +++ b/docs/278.md @@ -102,4 +102,4 @@ public void incrementCounter() { ``` -[下载 _ 发送者接收器小程序 _ 示例的源代码](examplesIndex.html#SenderReceiver)以进一步试验。 \ No newline at end of file +[下载*发送者接收器小程序*示例的源代码](examplesIndex.html#SenderReceiver)以进一步试验。 \ No newline at end of file diff --git a/docs/28.md b/docs/28.md index 277b2b42d6c29d5e5f1e2aaf97a1aec3a56f1b9b..365efa1d5aa5bf39cd1e824875f8f844c08205d0 100644 --- a/docs/28.md +++ b/docs/28.md @@ -13,7 +13,7 @@ ``` -如[创建对象](../javaOO/objectcreation.html)中所述,此运算符也可用于对象以分配 _ 对象引用 _。 +如[创建对象](../javaOO/objectcreation.html)中所述,此运算符也可用于对象以分配*对象引用*。 ## 算术运算符 @@ -79,7 +79,7 @@ class ArithmeticDemo { ``` -您还可以将算术运算符与简单赋值运算符组合以创建 _ 复合赋值 _。例如,`x+=1;`和`x=x+1;`都将`x`的值递增 1。 +您还可以将算术运算符与简单赋值运算符组合以创建*复合赋值*。例如,`x+=1;`和`x=x+1;`都将`x`的值递增 1。 `+`运算符也可用于将两个字符串连接(连接)在一起,如下面的 [`ConcatDemo`](examples/ConcatDemo.java) 程序所示: diff --git a/docs/281.md b/docs/281.md index fc714b55c5dd96b2b9517690463a4251538c6104..a4d347438b6302976aa0449c75d14bd0ed4821a3 100644 --- a/docs/281.md +++ b/docs/281.md @@ -16,7 +16,7 @@ ## 沙盒小程序 -沙箱小程序仅限于安全沙箱,_ 可以 _ 执行以下操作: +沙箱小程序仅限于安全沙箱,*可以*执行以下操作: * 他们可以与主机和端口建立网络连接。协议必须匹配,如果使用域名加载 applet,则必须使用域名连接回主机,而不是 IP 地址。 * 他们可以使用`java.applet.AppletContext`类的`showDocument`方法轻松显示 HTML 文档。 @@ -29,7 +29,7 @@ * 他们可以访问打印功能。 * 他们可以在客户端上存储数据,决定如何下载和缓存 applet 等等。有关使用 JNLP API 开发 applet 的更多信息,请参阅 [JNLP API](../doingMoreWithRIA/jnlpAPI.html) 。 -沙箱小程序 _ 无法 _ 执行以下操作: +沙箱小程序*无法*执行以下操作: * 他们无法访问客户端资源,例如本地文件系统,可执行文件,系统剪贴板和打印机。 * 它们无法连接到任何第三方服务器(除其源自的服务器之外的任何服务器)或从中检索资源。 diff --git a/docs/285.md b/docs/285.md index c203f0128d90289a4760b45e15e08d3b820f3ec5..3115f01aecf454c6c0706c76175f836fac5d4095 100644 --- a/docs/285.md +++ b/docs/285.md @@ -104,4 +104,4 @@ public class DynamicTreeApplication extends JFrame { 因此,为了保持可移植性并保持部署选项的开放,请遵循本主题中描述的基于组件的设计。 -[下载 _ 动态树演示 _ 示例的源代码](examplesIndex.html#DynamicTreeDemo)以进一步试验。 \ No newline at end of file +[下载*动态树演示*示例的源代码](examplesIndex.html#DynamicTreeDemo)以进一步试验。 \ No newline at end of file diff --git a/docs/287.md b/docs/287.md index fc8d8b421c3a2cc5e39ae3f5c0dc6d5285d1e8f4..48d91811d199217b3715f49c745cad3662e8c1e6 100644 --- a/docs/287.md +++ b/docs/287.md @@ -136,4 +136,4 @@ Deployment Toolkit 脚本包含有用的 JavaScript 函数,可用于在 Web 8. 在浏览器中打开应用程序的 HTML 页面以查看应用程序。同意在出现提示时运行该应用程序。检查 Java 控制台日志以获取错误和调试消息。 -[下载 _ 动态树演示 _ 示例的源代码](examplesIndex.html#DynamicTreeDemo)以进一步试验。 \ No newline at end of file +[下载*动态树演示*示例的源代码](examplesIndex.html#DynamicTreeDemo)以进一步试验。 \ No newline at end of file diff --git a/docs/29.md b/docs/29.md index f0c2081692aeaee9ba2df55800e401f5d326d6a8..610f7a6b014dda4707f81a61bece9ac0ea14b273 100644 --- a/docs/29.md +++ b/docs/29.md @@ -50,7 +50,7 @@ value1 <= value2 ## 条件运算符 -`&&`和`||`运算符对两个布尔表达式执行 _ 条件 - 和 _ 和 _ 条件 - 或 _ 运算。这些运算符表现出“短路”行为,这意味着仅在需要时才评估第二个操作数。 +`&&`和`||`运算符对两个布尔表达式执行*条件 - 和*和*条件 - 或*运算。这些运算符表现出“短路”行为,这意味着仅在需要时才评估第二个操作数。 ```java && Conditional-AND @@ -75,7 +75,7 @@ class ConditionalDemo1 { ``` -另一个条件运算符是`?:`,它可以被认为是`if-then-else`语句的简写(在本课程的[控制流语句](flow.html)部分中讨论过)。该运算符也称为 _ 三元运算符 _,因为它使用三个操作数。在以下示例中,此运算符应读作:“如果`someCondition`为`true`,则将`value1`的值赋给`result`。否则,将`value2`的值赋给`result`。” +另一个条件运算符是`?:`,它可以被认为是`if-then-else`语句的简写(在本课程的[控制流语句](flow.html)部分中讨论过)。该运算符也称为*三元运算符*,因为它使用三个操作数。在以下示例中,此运算符应读作:“如果`someCondition`为`true`,则将`value1`的值赋给`result`。否则,将`value2`的值赋给`result`。” 以下程序 [`ConditionalDemo2`](examples/ConditionalDemo2.java) 测试`?:`运算符: diff --git a/docs/291.md b/docs/291.md index 340775c46d9e1c186f81bdba2073e3d61357b93e..34e48c2fe237ac1b8506221b02e8137e95cf9d2f 100644 --- a/docs/291.md +++ b/docs/291.md @@ -4,7 +4,7 @@ 本节介绍通过 Java Web Start 部署的应用程序的安全性基础知识,包括: -默认情况下,使用 Java Web Start 启动的应用程序在受限制的环境中运行,称为 _ 沙箱 _。在这个沙盒中,Java Web Start: +默认情况下,使用 Java Web Start 启动的应用程序在受限制的环境中运行,称为*沙箱*。在这个沙盒中,Java Web Start: * 保护用户免受可能影响本地文件的恶意代码的侵害 * 保护企业免受可能试图访问或破坏网络数据的代码 diff --git a/docs/295.md b/docs/295.md index b19335cd491ee8bb6d56d0f65656892ca1222e84..b0ee0f8dfddbdaaea5e1a192859bc04e79aeb156 100644 --- a/docs/295.md +++ b/docs/295.md @@ -92,6 +92,6 @@ public class PropertiesArgsDemoApplet extends JApplet { * * * -[下载 _ 属性和参数演示 Applet_ 示例的源代码](examplesIndex.html#PropertiesAndVMArgs)以进一步进行实验。 +[下载*属性和参数演示 Applet_ 示例的源代码](examplesIndex.html#PropertiesAndVMArgs)以进一步进行实验。 有关 RIA 可以访问的一整套系统属性,请参见[系统属性](properties.html)。 \ No newline at end of file diff --git a/docs/298.md b/docs/298.md index ad09facccbad7924a787bf168bfc4bd8c5a093c8..40ef59019954cf0b13f142440bbe2437f8433c27 100644 --- a/docs/298.md +++ b/docs/298.md @@ -195,4 +195,4 @@ public class FileHandler { * * * -[下载 _ 文本编辑器小程序 _ 示例的源代码](examplesIndex.html#AppletJNLPAPI)以进一步试验。 \ No newline at end of file +[下载*文本编辑器小程序*示例的源代码](examplesIndex.html#AppletJNLPAPI)以进一步试验。 \ No newline at end of file diff --git a/docs/3.md b/docs/3.md index 1cba258dbdf14e3d626e4b05b9b6e0b1b0bd575a..da5bd06377ad1208d901f20a95e5c91892dec46c 100644 --- a/docs/3.md +++ b/docs/3.md @@ -23,7 +23,7 @@ Java 编程语言是一种高级语言,可以通过以下所有流行语来表 前面的每个流行语都在 [_Java 语言环境 _](http://www.oracle.com/technetwork/java/langenv-140151.html) 中进行了解释,这是由 James Gosling 和 Henry McGilton 编写的白皮书。 -在 Java 编程语言中,所有源代码首先用以`.java`扩展名结尾的纯文本文件编写。然后,`javac`编译器将这些源文件编译为`.class`文件。 `.class`文件不包含处理器本机的代码;它包含 _ 字节码 _ - Java 虚拟机 <sup>[1](#FOOT)</sup>(Java VM)的机器语言。然后,`java`启动器工具使用 Java 虚拟机实例运行您的应用程序。 +在 Java 编程语言中,所有源代码首先用以`.java`扩展名结尾的纯文本文件编写。然后,`javac`编译器将这些源文件编译为`.class`文件。 `.class`文件不包含处理器本机的代码;它包含*字节码 _ - Java 虚拟机 <sup>[1](#FOOT)</sup>(Java VM)的机器语言。然后,`java`启动器工具使用 Java 虚拟机实例运行您的应用程序。 ![Figure showing MyProgram.java, compiler, MyProgram.class, Java VM, and My Program running on a computer.](img/33167633b277fd83e02ef5a731e00045.jpg) @@ -41,16 +41,16 @@ Java 编程语言是一种高级语言,可以通过以下所有流行语来表 ## Java 平台 -_ 平台 _ 是程序运行的硬件或软件环境。我们已经提到了一些最受欢迎的平台,如 Microsoft Windows,Linux,Solaris OS 和 Mac OS。大多数平台可以描述为操作系统和底层硬件的组合。 Java 平台与大多数其他平台的不同之处在于,它是一个纯软件平台,可以在其他基于硬件的平台上运行。 +_ 平台*是程序运行的硬件或软件环境。我们已经提到了一些最受欢迎的平台,如 Microsoft Windows,Linux,Solaris OS 和 Mac OS。大多数平台可以描述为操作系统和底层硬件的组合。 Java 平台与大多数其他平台的不同之处在于,它是一个纯软件平台,可以在其他基于硬件的平台上运行。 Java 平台有两个组件: * _Java 虚拟机 _ -* _Java 应用程序编程接口 _(API) +* _Java 应用程序编程接口*(API) 您已经了解了 Java 虚拟机;它是 Java 平台的基础,并移植到各种基于硬件的平台上。 -API 是大量现成的软件组件,提供许多有用的功能。它被分为相关类和接口的库;这些库被称为 _ 包 _。下一节, [Java 技术可以做什么?](cando.html) 强调了 API 提供的一些功能。 +API 是大量现成的软件组件,提供许多有用的功能。它被分为相关类和接口的库;这些库被称为*包*。下一节, [Java 技术可以做什么?](cando.html) 强调了 API 提供的一些功能。 ![Figure showing MyProgram.java, API, Java Virtual Machine, and Hardware-Based Platform](img/487483258c8ef14e800a55d6ae726828.jpg) diff --git a/docs/308.md b/docs/308.md index f2b411ccd1f7d862b66813eaec6c4442e395c8f5..ee315e756372dbbff3a3b24e45da695ee5cf8669 100644 --- a/docs/308.md +++ b/docs/308.md @@ -26,7 +26,7 @@ * [将部署选项指定为属性和参数名称 - 值对](#tagAttrsParams) * [使用`jnlp_href`参数指定 JNLP 文件中的部署选项](#appletJnlp) -* [指定属性和参数名称 - 值对 _ 以及 _ JNLP 文件](#tagAndJnlp)(使 applet 能够在旧版和下一代 Java 插件软件上运行) +* [指定属性和参数名称 - 值对*以及 _ JNLP 文件](#tagAndJnlp)(使 applet 能够在旧版和下一代 Java 插件软件上运行) **功能签名:** `runApplet: function(attributes, parameters, minimumVersion)` @@ -89,7 +89,7 @@ * Specifying attribute and parameter name-value pairs _as well as_ a JNLP file - 使用 JNLP 部署的 Applet 仅在最终用户在其浏览器上运行下一代 Java Plug-in 软件时运行。如果您希望 applet 也在旧的 Java Plug-in 软件上运行,请使用属性和参数名称 - 值对 _ 以及 _ JNLP 文件指定部署选项。 + 使用 JNLP 部署的 Applet 仅在最终用户在其浏览器上运行下一代 Java Plug-in 软件时运行。如果您希望 applet 也在旧的 Java Plug-in 软件上运行,请使用属性和参数名称 - 值对*以及 _ JNLP 文件指定部署选项。 ```java @@ -119,4 +119,4 @@ * * * -[下载 _ 运行小程序 _ 示例的源代码](examplesIndex.html#runApplet)以进一步试验。 \ No newline at end of file +[下载*运行小程序*示例的源代码](examplesIndex.html#runApplet)以进一步试验。 \ No newline at end of file diff --git a/docs/309.md b/docs/309.md index d75950620644c35d40ee50d86643e53d580f4f79..c43cee1a2fa6f54fbfccfdcdf4e1c980e8cb0302 100644 --- a/docs/309.md +++ b/docs/309.md @@ -46,4 +46,4 @@ 有关在下载 applet 资源时显示自定义加载进度指示器的信息,请参阅[显示自定义加载进度指示器](../applet/customProgressIndicatorForApplet.html)主题。 -[下载 _ 自定义启动画面 _ 示例的源代码](examplesIndex.html#CustomizingSplashScreen)进行进一步实验。 \ No newline at end of file +[下载*自定义启动画面*示例的源代码](examplesIndex.html#CustomizingSplashScreen)进行进一步实验。 \ No newline at end of file diff --git a/docs/313.md b/docs/313.md index ae8d25df94f387ef7561b138981fced1eed08e7a..983f55e6088c7e0885f90745f40b218b6e02a6dc 100644 --- a/docs/313.md +++ b/docs/313.md @@ -73,4 +73,4 @@ javaws http://example.com/dynamictree_webstart_no_codebase.jnlp * * * -[下载 _ 动态树演示 _ 示例的源代码](../webstart/examplesIndex.html#DynamicTreeDemo)以进一步试验。 \ No newline at end of file +[下载*动态树演示*示例的源代码](../webstart/examplesIndex.html#DynamicTreeDemo)以进一步试验。 \ No newline at end of file diff --git a/docs/319.md b/docs/319.md index f6e32c74b48ffcac444873f3ee07638fc19d77d1..e6be3d0916f54674cd359980a3570ca53c0c6545 100644 --- a/docs/319.md +++ b/docs/319.md @@ -14,7 +14,7 @@ ## 利用版本下载协议 -您可以利用 _ 版本下载协议 _ 来消除不必要的版本检查。请参阅以下步骤以启用此协议。 +您可以利用*版本下载协议*来消除不必要的版本检查。请参阅以下步骤以启用此协议。 1. 重命名 JAR 文件以包含具有以下命名约定的版本号后缀: @@ -41,7 +41,7 @@ ``` - 启用`jnlp.versionEnabled`属性后,启动软件仅执行 _ 一次 _ 更新检查,以确保 JNLP 文件是最新的。该软件将 JNLP 文件中指定的版本号与相应的 JAR 文件版本(根据步骤 1 中提到的命名约定)进行比较,并仅更新过时的 JAR 文件。此方法很有效,因为只有 JNLP 文件的更新检查通过网络进行。所有其他版本检查都在本地进行 + 启用`jnlp.versionEnabled`属性后,启动软件仅执行*一次*更新检查,以确保 JNLP 文件是最新的。该软件将 JNLP 文件中指定的版本号与相应的 JAR 文件版本(根据步骤 1 中提到的命名约定)进行比较,并仅更新过时的 JAR 文件。此方法很有效,因为只有 JNLP 文件的更新检查通过网络进行。所有其他版本检查都在本地进行 如果找不到具有正确版本号的文件,则启动软件会尝试加载默认 JAR 文件(例如,`DynamicTreeDemo.jar`)。 diff --git a/docs/33.md b/docs/33.md index 1e954ec901ff1611c30b860180c7d9bc43fd6c28..131c32b9601ea3ea693db10c4f78085bcd2baede 100644 --- a/docs/33.md +++ b/docs/33.md @@ -2,11 +2,11 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html) -现在您已了解变量和运算符,现在是时候了解 _ 表达式 _,_ 语句 _ 和 _ 阻止 _。运算符可用于构建计算值的表达式;表达式是陈述的核心组成部分;语句可以分组为块。 +现在您已了解变量和运算符,现在是时候了解*表达式*,*语句*和*阻止*。运算符可用于构建计算值的表达式;表达式是陈述的核心组成部分;语句可以分组为块。 ## 表达式 -_ 表达式 _ 是由变量,运算符和方法调用组成的构造,它们是根据语言的语法构造的,其值为单个值。您已经看过表达式的示例,如下面的粗体所示: +_ 表达式*是由变量,运算符和方法调用组成的构造,它们是根据语言的语法构造的,其值为单个值。您已经看过表达式的示例,如下面的粗体所示: ```java int **cadence = 0**; @@ -57,14 +57,14 @@ x + (y / 100) // unambiguous, recommended ## 声明 -陈述大致相当于自然语言中的句子。 _ 语句 _ 构成一个完整的执行单元。通过用分号(`;`)终止表达式,可以将以下类型的表达式转换为语句。 +陈述大致相当于自然语言中的句子。*语句*构成一个完整的执行单元。通过用分号(`;`)终止表达式,可以将以下类型的表达式转换为语句。 * 作业表达 * 使用`++`或`--` * 方法调用 * 对象创建表达式 -这些陈述称为 _ 表达式陈述 _。以下是表达式语句的一些示例。 +这些陈述称为*表达式陈述*。以下是表达式语句的一些示例。 ```java // assignment statement @@ -78,7 +78,7 @@ Bicycle myBike = new Bicycle(); ``` -除了表达式语句之外,还有另外两种语句:_ 声明语句 _ 和 _ 控制流语句 _。 _ 声明语句 _ 声明一个变量。您已经看过很多声明语句的例子: +除了表达式语句之外,还有另外两种语句:*声明语句*和*控制流语句*。*声明语句*声明一个变量。您已经看过很多声明语句的例子: ```java // declaration statement @@ -86,11 +86,11 @@ double aValue = 8933.234; ``` -最后,_ 控制流语句 _ 调节语句执行的顺序。您将在下一节[控制流程语句](flow.html)中了解控制流语句 +最后,*控制流语句*调节语句执行的顺序。您将在下一节[控制流程语句](flow.html)中了解控制流语句 ## 块 -_ 块 _ 是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。以下示例 [`BlockDemo`](examples/BlockDemo.java) 说明了块的使用: +_ 块*是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。以下示例 [`BlockDemo`](examples/BlockDemo.java) 说明了块的使用: ```java class BlockDemo { diff --git a/docs/331.md b/docs/331.md index 9bb9e6238e7afbd99643823345a54d0bca9509dc..a7d7eea44096158fe6b7c92ed47c67ccdc6e9cc5 100644 --- a/docs/331.md +++ b/docs/331.md @@ -6,13 +6,13 @@ Java™Archive(JAR)文件格式使您可以将多个文件捆绑到一个归 JAR 文件格式提供了许多好处: -* _ 安全 _:您可以对 JAR 文件的内容进行数字签名。然后,识别您的签名的用户可以选择授予您不具备的软件安全权限。 -* _ 减少下载时间 _:如果您的 applet 捆绑在 JAR 文件中,则可以在单个 HTTP 事务中将 applet 的类文件和相关资源下载到浏览器,而无需为每个文件打开新连接。 -* _ 压缩 _:JAR 格式允许您压缩文件以实现高效存储。 -* _ 扩展包装 _:扩展框架提供了一种向 Java 核心平台添加功能的方法,JAR 文件格式定义了扩展的包装。通过使用 JAR 文件格式,您也可以将软件转换为扩展名。 -* _ 软件包密封 _:可以选择密封存储在 JAR 文件中的软件包,以便软件包可以强制实现版本一致性。在 JAR 文件中封装包意味着必须在同一个 JAR 文件中找到该包中定义的所有类。 -* _ 软件包版本控制 _:JAR 文件可以保存有关其包含的文件的数据,例如供应商和版本信息。 -* _ 可移植性 _:处理 JAR 文件的机制是 Java 平台核心 API 的标准部分。 +* _ 安全*:您可以对 JAR 文件的内容进行数字签名。然后,识别您的签名的用户可以选择授予您不具备的软件安全权限。 +* _ 减少下载时间*:如果您的 applet 捆绑在 JAR 文件中,则可以在单个 HTTP 事务中将 applet 的类文件和相关资源下载到浏览器,而无需为每个文件打开新连接。 +* _ 压缩*:JAR 格式允许您压缩文件以实现高效存储。 +* _ 扩展包装*:扩展框架提供了一种向 Java 核心平台添加功能的方法,JAR 文件格式定义了扩展的包装。通过使用 JAR 文件格式,您也可以将软件转换为扩展名。 +* _ 软件包密封*:可以选择密封存储在 JAR 文件中的软件包,以便软件包可以强制实现版本一致性。在 JAR 文件中封装包意味着必须在同一个 JAR 文件中找到该包中定义的所有类。 +* _ 软件包版本控制*:JAR 文件可以保存有关其包含的文件的数据,例如供应商和版本信息。 +* _ 可移植性*:处理 JAR 文件的机制是 Java 平台核心 API 的标准部分。 本课有四个部分: diff --git a/docs/333.md b/docs/333.md index 7f9249f206c0c422c6a7b206f9610c8246cddf46..cd8cc2b39834604f7575e1b64b6c4abfc2ea80d8 100644 --- a/docs/333.md +++ b/docs/333.md @@ -11,8 +11,8 @@ jar cf jar-file input-file(s) 此命令中使用的选项和参数是: -* `c`选项表示您希望 _ 创建 _ JAR 文件。 -* `f`选项表示您希望输出转到 _ 文件 _ 而不是`标准输出`。 +* `c`选项表示您希望*创建 _ JAR 文件。 +* `f`选项表示您希望输出转到*文件*而不是`标准输出`。 * `jar 文件`是您希望生成的 JAR 文件具有的名称。您可以使用任何文件名作为 JAR 文件。按照惯例,JAR 文件名被赋予`.jar`扩展名,但这不是必需的。 * `输入文件`参数是要包含在 JAR 文件中的一个或多个文件的空格分隔列表。 `输入文件`参数可以包含通配符`*`符号。如果任何“输入文件”是目录,则这些目录的内容将以递归方式添加到 JAR 存档中。 @@ -33,7 +33,7 @@ JAR 文件中的元数据(例如清单的条目名称,注释和内容)必 **jar command options** | 选项 | 描述 | | --- | --- | -| `v` | 在构建 JAR 文件时,在`stdout`上生成 _ 详细 _ 输出。详细输出告诉您每个文件的名称,因为它已添加到 JAR 文件中。 | +| `v` | 在构建 JAR 文件时,在`stdout`上生成*详细*输出。详细输出告诉您每个文件的名称,因为它已添加到 JAR 文件中。 | | `0` (零) | 表示您不希望压缩 JAR 文件。 | | `M` | 表示不应生成默认清单文件。 | | `m` | 用于包括现有清单文件中的清单信息。使用此选项的格式为: diff --git a/docs/334.md b/docs/334.md index f58d9fd89dfa5560db4224ee402501b76760d622..eabe53fb0475346b0ac90eda4d55f517815cafa9 100644 --- a/docs/334.md +++ b/docs/334.md @@ -11,7 +11,7 @@ jar tf jar-file 让我们看看这个命令中使用的选项和参数: -* `t`选项表示您要查看 JAR 文件内容的 _ 表 _。 +* `t`选项表示您要查看 JAR 文件内容的*表*。 * `f`选项表示在命令行中指定要查看其内容的 JAR 文件。 * `jar 文件`参数是要查看其内容的 JAR 文件的路径和名称。 diff --git a/docs/335.md b/docs/335.md index 9f1fb76103939e59d2f9c02e878bdba0861b163d..a00f27170424a28acf26b4bdcdccbe8accd9362a 100644 --- a/docs/335.md +++ b/docs/335.md @@ -11,8 +11,8 @@ jar xf jar-file [archived-file(s)] 让我们看一下这个命令中的选项和参数: -* `x`选项表示您希望 _ 从 JAR 存档中提取 _ 文件。 -* `f`选项表示要从中提取文件的 JAR _ 文件 _ 在命令行中指定,而不是通过 stdin 指定。 +* `x`选项表示您希望*从 JAR 存档中提取*文件。 +* `f`选项表示要从中提取文件的 JAR _ 文件*在命令行中指定,而不是通过 stdin 指定。 * `jar 文件`参数是从中提取文件的 JAR 文件的文件名(或路径和文件名)。 * `archived-file(s)`是一个可选参数,由要从存档中提取的文件的空格分隔列表组成。如果此参数不存在,Jar 工具将提取存档中的所有文件。 diff --git a/docs/336.md b/docs/336.md index 4ce6e6186103fe22e79c4ed2eab9dff761793351..c7d501cd3c6aba2e0443834ed381fe86853f47b6 100644 --- a/docs/336.md +++ b/docs/336.md @@ -13,7 +13,7 @@ jar uf jar-file input-file(s) 在此命令中: -* `u`选项表示您希望 _ 更新 _ 现有的 JAR 文件。 +* `u`选项表示您希望*更新*现有的 JAR 文件。 * `f`选项表示要在命令行上指定要更新的 JAR 文件。 * `jar 文件`是要更新的现有 JAR 文件。 * `input-file(s)`是一个以空格分隔的列表,其中包含要添加到 JAR 文件的一个或多个文件。 diff --git a/docs/338.md b/docs/338.md index 8ab7b639f5feb815cc6522512db0dbe05934dcd4..52c8de5c2a9242a2d94e489379cec898198fa2bb 100644 --- a/docs/338.md +++ b/docs/338.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html](https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html) -JAR 文件支持广泛的功能,包括电子签名,版本控制,封装密封等。什么赋予 JAR 文件这种多功能性?答案是 JAR 文件的 _ 清单 _。 +JAR 文件支持广泛的功能,包括电子签名,版本控制,封装密封等。什么赋予 JAR 文件这种多功能性?答案是 JAR 文件的*清单*。 清单是一个特殊文件,可以包含有关 JAR 文件中打包的文件的信息。通过定制清单包含的此“元”信息,您可以启用 JAR 文件以满足各种用途。 diff --git a/docs/340.md b/docs/340.md index 7a940633471c01f49be32718301c6622e1a6fe0f..47fd5c57352506004ac19a9430c828dbd60d6a31 100644 --- a/docs/340.md +++ b/docs/340.md @@ -4,7 +4,7 @@ 您可以使用`m`命令行选项在创建 JAR 文件期间向清单添加自定义信息。本节介绍`m`选项。 -Jar 工具自动将[默认清单](defman.html)与路径名`META-INF / MANIFEST.MF`放入您创建的任何 JAR 文件中。您可以通过修改默认清单来启用特殊的 JAR 文件功能,例如[软件包密封](sealman.html)。通常,修改默认清单涉及向清单添加专用 _ 标头 _,以允许 JAR 文件执行特定的所需功能。 +Jar 工具自动将[默认清单](defman.html)与路径名`META-INF / MANIFEST.MF`放入您创建的任何 JAR 文件中。您可以通过修改默认清单来启用特殊的 JAR 文件功能,例如[软件包密封](sealman.html)。通常,修改默认清单涉及向清单添加专用*标头*,以允许 JAR 文件执行特定的所需功能。 要修改清单,必须首先准备一个文本文件,其中包含要添加到清单的信息。然后使用 Jar 工具的`m`选项将文件中的信息添加到清单中。 @@ -23,9 +23,9 @@ jar cfm jar-file manifest-addition input-file(s) 让我们看看这个命令中使用的选项和参数: -* `c`选项表示您希望 _ 创建 _ JAR 文件。 +* `c`选项表示您希望*创建 _ JAR 文件。 * `m`选项表示您要将现有文件中的信息合并到您正在创建的 JAR 文件的清单文件中。 -* `f`选项表示您希望输出转到 _ 文件 _(您正在创建的 JAR 文件)而不是标准输出。 +* `f`选项表示您希望输出转到*文件*(您正在创建的 JAR 文件)而不是标准输出。 * _`manifest-addition` _ 是现有文本文件的名称(或路径和名称),其内容要添加到 JAR 文件清单的内容中。 * _`jar 文件`_ 是您希望生成的 JAR 文件具有的名称。 * _`输入文件`_ 参数是一个以空格分隔的列表,其中包含您要放置在 JAR 文件中的一个或多个文件。 diff --git a/docs/347.md b/docs/347.md index 5a26978ab6ba8f98675675a784f6ecdcf61caf89..cc1af3dae0a1087d55830d1b2deb5638442f498d 100644 --- a/docs/347.md +++ b/docs/347.md @@ -4,21 +4,21 @@ Java™平台使您能够对 JAR 文件进行数字签名。您对文件进行数字签名的原因与您使用笔和墨水签署纸质文档的原因相同 - 让读者知道您编写了文档,或者至少文档已获得您的批准。 -例如,当您签署一封信时,每个认出您签名的人都可以确认您是否写了这封信。同样,当您对文件进行数字签名时,任何“识别”您的数字签名的人都知道该文件来自您。 “识别”电子签名的过程称为 _ 验证 _。 +例如,当您签署一封信时,每个认出您签名的人都可以确认您是否写了这封信。同样,当您对文件进行数字签名时,任何“识别”您的数字签名的人都知道该文件来自您。 “识别”电子签名的过程称为*验证*。 签名 JAR 文件时,您还可以选择为签名添加时间戳。与在纸质文档上添加日期类似,签名的时间戳标识了 JAR 文件的签名时间。时间戳可用于验证用于签署 JAR 文件的证书在签名时是否有效。 -签名和验证文件的能力是 Java 平台安全架构的重要组成部分。安全性由运行时生效的安全 _ 策略 _ 控制。您可以将策略配置为向 applet 和应用程序授予安全权限。例如,您可以向 applet 授予权限以执行正常禁止的操作,例如读取和写入本地文件或运行本地可执行程序。如果您下载了一些由受信任实体签名的代码,则可以将该事实用作决定分配给代码的安全权限的标准。 +签名和验证文件的能力是 Java 平台安全架构的重要组成部分。安全性由运行时生效的安全*策略*控制。您可以将策略配置为向 applet 和应用程序授予安全权限。例如,您可以向 applet 授予权限以执行正常禁止的操作,例如读取和写入本地文件或运行本地可执行程序。如果您下载了一些由受信任实体签名的代码,则可以将该事实用作决定分配给代码的安全权限的标准。 -一旦您(或您的浏览器)验证了 applet 来自可靠来源,您就可以让平台放宽安全限制,让 applet 执行通常被禁止的操作。受信任的 applet 可以具有由 _ 策略文件 _ 指定的自由。 +一旦您(或您的浏览器)验证了 applet 来自可靠来源,您就可以让平台放宽安全限制,让 applet 执行通常被禁止的操作。受信任的 applet 可以具有由*策略文件*指定的自由。 -Java 平台通过使用称为公共和私有 _ 键 _ 的特殊号码进行签名和验证。公钥和私钥成对出现,它们扮演互补字符。 +Java 平台通过使用称为公共和私有*键*的特殊号码进行签名和验证。公钥和私钥成对出现,它们扮演互补字符。 私钥是电子“笔”,您可以使用它来签署文件。顾名思义,您的私钥只有您自己知道才能让其他人无法“伪造”您的签名。使用您的私钥签名的文件只能通过相应的公钥进行验证。 但是,单独的公钥和私钥不足以真正验证签名。即使您已验证签名文件包含匹配的密钥对,您仍需要某种方法来确认公钥实际上来自它声称来自的签名者。 -因此,需要一个元素来进行签名和验证工作。该附加元素是签名者在签名的 JAR 文件中包含的 _ 证书 _。证书是来自认可的 _ 证书颁发机构 _ 的数字签名声明,表明谁拥有特定的公钥。认证机构是整个行业内可信赖的实体(通常是专门从事数字安全的公司),用于为密钥及其所有者签署和颁发证书。对于签名的 JAR 文件,证书指示谁拥有 JAR 文件中包含的公钥。 +因此,需要一个元素来进行签名和验证工作。该附加元素是签名者在签名的 JAR 文件中包含的*证书*。证书是来自认可的*证书颁发机构*的数字签名声明,表明谁拥有特定的公钥。认证机构是整个行业内可信赖的实体(通常是专门从事数字安全的公司),用于为密钥及其所有者签署和颁发证书。对于签名的 JAR 文件,证书指示谁拥有 JAR 文件中包含的公钥。 当您签署 JAR 文件时,您的公钥将与相关证书一起放在存档中,以便任何想要验证签名的人都可以轻松使用它。 @@ -39,7 +39,7 @@ SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64= 摘要值是文件内容的哈希或编码表示,就像签名时一样。当且仅当文件本身发生变化时,文件的摘要才会发生变化。 -签名 JAR 文件时,会自动生成 _ 签名 _ 文件,并将其放在 JAR 文件的`META-INF`目录中,该目录包含存档的清单。签名文件的文件名具有`.SF`扩展名。以下是签名文件内容的示例: +签名 JAR 文件时,会自动生成*签名*文件,并将其放在 JAR 文件的`META-INF`目录中,该目录包含存档的清单。签名文件的文件名具有`.SF`扩展名。以下是签名文件内容的示例: ```java Signature-Version: 1.0 @@ -68,7 +68,7 @@ SHA1-Digest: mF0D5zpk68R4oaxEqoS9Q7nhm60= ## 签名块文件 -除了签名文件之外,当签署 JAR 文件时,_ 签名块 _ 文件会自动放置在`META-INF`目录中。与清单文件或签名文件不同,签名块文件不是人类可读的。 +除了签名文件之外,当签署 JAR 文件时,*签名块*文件会自动放置在`META-INF`目录中。与清单文件或签名文件不同,签名块文件不是人类可读的。 签名块文件包含两个必要的验证元素: diff --git a/docs/348.md b/docs/348.md index 21d23f254f1dc5c4efb6c80562ecd918f4577aad..d83331088d4ccc832ce82a9e8e96d31307445a28 100644 --- a/docs/348.md +++ b/docs/348.md @@ -4,7 +4,7 @@ 您可以使用 JAR 签名和验证工具对 JAR 文件进行签名并为签名添加时间戳。您可以使用`jarsigner`命令调用 JAR 签名和验证工具,因此我们将其简称为“Jarsigner”。 -要签署 JAR 文件,您必须首先拥有私钥。私钥及其关联的公钥证书存储在名为 _ 密钥库 _ 的受密码保护的数据库中。密钥库可以容纳许多潜在签名者的密钥。密钥库中的每个密钥都可以由 _ 别名 _ 标识,该别名通常是拥有密钥的签名者的名称。例如,属于丽塔琼斯的密钥可能具有别名“rita”。 +要签署 JAR 文件,您必须首先拥有私钥。私钥及其关联的公钥证书存储在名为*密钥库*的受密码保护的数据库中。密钥库可以容纳许多潜在签名者的密钥。密钥库中的每个密钥都可以由*别名*标识,该别名通常是拥有密钥的签名者的名称。例如,属于丽塔琼斯的密钥可能具有别名“rita”。 用于签名 JAR 文件的命令的基本形式是 @@ -20,7 +20,7 @@ jarsigner jar-file alias Jarsigner 工具将提示您输入密钥库和别名的密码。 -此命令的这种基本形式假定要使用的密钥库位于主目录中名为`.keystore`的文件中。它将分别创建名称为`x.SF`和`x.DSA`的签名和签名块文件,其中`x`是别名的前八个字母,全部转换大写。这个基本命令将 _ 用签名的 JAR 文件覆盖 _ 原始 JAR 文件。 +此命令的这种基本形式假定要使用的密钥库位于主目录中名为`.keystore`的文件中。它将分别创建名称为`x.SF`和`x.DSA`的签名和签名块文件,其中`x`是别名的前八个字母,全部转换大写。这个基本命令将*用签名的 JAR 文件覆盖*原始 JAR 文件。 实际上,您可能希望使用一个或多个可用的命令选项。例如,鼓励为签名添加时间戳,以便用于部署应用程序的任何工具都可以验证用于签署 JAR 文件的证书在签名文件时是否有效。如果未包含时间戳,则 Jarsigner 工具会发出警告。 @@ -30,10 +30,10 @@ Jarsigner 工具将提示您输入密钥库和别名的密码。 | 选项 | 描述 | | --- | --- | | `-keystore` _url_ | 如果您不想使用`.keystore`默认数据库,则指定要使用的密钥库。 | -| `-sigfile` _ 档案 _ | 如果您不希望从别名中获取基本名称,请指定.SF 和.DSA 文件的基本名称。 _ 文件 _ 必须仅由大写字母(A-Z),数字(0-9),连字符( - )和下划线(_)组成。 | +| `-sigfile` _ 档案 _ | 如果您不希望从别名中获取基本名称,请指定.SF 和.DSA 文件的基本名称。*文件*必须仅由大写字母(A-Z),数字(0-9),连字符( - )和下划线(*)组成。 | | `-signedjar` _ 档案 _ | 如果不希望使用签名文件覆盖原始未签名文件,则指定要生成的已签名 JAR 文件的名称。 | | `-tsa` _url_ | 使用 URL 标识的时间戳机构(TSA)为签名生成时间戳。 | -| `-tsacert` _ 别名 _ | 使用由 _ 别名 _ 标识的 TSA 公钥证书为签名生成时间戳。 | +| `-tsacert` _ 别名 _ | 使用由*别名*标识的 TSA 公钥证书为签名生成时间戳。 | | `-altsigner` _ 类 _ | 表示使用备用签名机制为签名添加时间戳。完全限定的类名标识使用的类。 | | `-altsignerpath` _classpathlist_ | 提供由`altsigner`选项标识的类的路径以及该类所依赖的任何 JAR 文件。 | diff --git a/docs/35.md b/docs/35.md index fdde2682c13bac8b2f1cd54731759a02d716cbb1..87e41e02f57fa0f6c4a05f1747ad44bb9f60a7cf 100644 --- a/docs/35.md +++ b/docs/35.md @@ -2,4 +2,4 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html) -源文件中的语句通常按照它们出现的顺序从上到下执行。 _ 控制流程语句 _ 然而,通过采用决策,循环和分支来打破执行流程,使您的程序 _ 有条件地 _ 执行特定的代码块。本节描述决策语句(`if-then`,`if-then-else`,`switch`),循环语句(`for`,`while`,`do-while`)和分支语句(`break`,`continue` ],`return`)由 Java 编程语言支持。 \ No newline at end of file +源文件中的语句通常按照它们出现的顺序从上到下执行。*控制流程语句*然而,通过采用决策,循环和分支来打破执行流程,使您的程序*有条件地*执行特定的代码块。本节描述决策语句(`if-then`,`if-then-else`,`switch`),循环语句(`for`,`while`,`do-while`)和分支语句(`break`,`continue` ],`return`)由 Java 编程语言支持。 \ No newline at end of file diff --git a/docs/357.md b/docs/357.md index 4934b8ed8d1cee56a59b16168ba4813e31c6ab2f..1eac888f3531a329b0f73f3958db1e3d7e22c6d0 100644 --- a/docs/357.md +++ b/docs/357.md @@ -22,7 +22,7 @@ package start; ``` -这意味着您必须将`HelloWorldSwing.java`文件放在`start`目录中。您可以从`start`目录上的目录编译并运行该示例。来自 _ 使用 Swing 组件 _ 课程的教程示例位于`components`包中,_ 写入事件监听器 _ 课程中的示例位于`events`包中,依此类推。有关更多信息,您可能需要查看 [`Packages`](../../java/package/index.html) 课程。 +这意味着您必须将`HelloWorldSwing.java`文件放在`start`目录中。您可以从`start`目录上的目录编译并运行该示例。来自*使用 Swing 组件*课程的教程示例位于`components`包中,*写入事件监听器*课程中的示例位于`events`包中,依此类推。有关更多信息,您可能需要查看 [`Packages`](../../java/package/index.html) 课程。 ![Screen shot of HelloWorldSwing application](img/b02d97db03d42ddebf105ec65718fa11.jpg) diff --git a/docs/36.md b/docs/36.md index 209d599b2b83c77c605f38591c60ff446e295c14..86cf46acc7ce94d25c3687c4ba6c44aedd1c0890 100644 --- a/docs/36.md +++ b/docs/36.md @@ -4,7 +4,7 @@ ## `if-then`声明 -`if-then`语句是所有控制流语句中最基本的语句。只有当特定测试评估为`true`时,它才会告诉程序执行某段代码 _。例如,只有当 _ 自行车已经运动时,`Bicycle`级才允许制动器降低自行车的速度 _。 `applyBrakes`方法的一种可能实现方式如下:_ +`if-then`语句是所有控制流语句中最基本的语句。只有当特定测试评估为`true`时,它才会告诉程序执行某段代码*。例如,只有当*自行车已经运动时,`Bicycle`级才允许制动器降低自行车的速度*。 `applyBrakes`方法的一种可能实现方式如下:_ ```java void applyBrakes() { diff --git a/docs/360.md b/docs/360.md index 3d0d79b3191d0d5fd162f4bafe00aec33878dff2..3a90289f921277771e5cf539493b5cfb4c5647fd 100644 --- a/docs/360.md +++ b/docs/360.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/learn/netbeansbasics.html](https://docs.oracle.com/javase/tutorial/uiswing/learn/netbeansbasics.html) -在探索其 GUI 创建功能之前,没有必要了解 NetBeans IDE 的每个功能。事实上,你真正需要了解的唯一功能是 _Palette_ ,_ 设计区 _,_ 属性编辑器 _ 和 _Inspector_ ]。我们将在下面讨论这些功能。 +在探索其 GUI 创建功能之前,没有必要了解 NetBeans IDE 的每个功能。事实上,你真正需要了解的唯一功能是 _Palette_ ,*设计区*,*属性编辑器*和 _Inspector_ ]。我们将在下面讨论这些功能。 ## 调色板 @@ -16,13 +16,13 @@ Click the image to view it at its natural size._ ## 设计区域 -设计区域是您可视化构建 GUI 的地方。它有两个视图:_ 源视图 _ 和 _ 设计视图 _。设计视图是默认设置,如下所示。您可以通过单击各自的选项卡随时在视图之间切换。 +设计区域是您可视化构建 GUI 的地方。它有两个视图:*源视图*和*设计视图*。设计视图是默认设置,如下所示。您可以通过单击各自的选项卡随时在视图之间切换。 [![screen shot from NetBeans](img/92bf9eeae8036e5f16697614bc9f8a3f.jpg)](https://docs.oracle.com/javase/tutorial/figures/uiswing/learn/nb-swing-10.png) _This figure has been reduced to fit on the page. Click the image to view it at its natural size._ -上图显示了一个`JFrame`对象,由带有蓝色边框的大阴影矩形表示。通常预期的行为(例如当用户单击“关闭”按钮时退出)由 IDE 自动生成,并出现在源视图中,在不可编辑的蓝色代码块 _ 保护块 _ 之间。 +上图显示了一个`JFrame`对象,由带有蓝色边框的大阴影矩形表示。通常预期的行为(例如当用户单击“关闭”按钮时退出)由 IDE 自动生成,并出现在源视图中,在不可编辑的蓝色代码块*保护块*之间。 [![Screen shot from NetBeans](img/8e7c20e48517f76e3b4d1ccae49e27a7.jpg)](https://docs.oracle.com/javase/tutorial/figures/uiswing/learn/nb-swing-11.png) _This figure has been reduced to fit on the page. diff --git a/docs/363.md b/docs/363.md index 63b69681745de68badb2f7d99d63f0e63c9d6f47..02fc224eb5d07a295bfdd6c4eb8174148f2d0993 100644 --- a/docs/363.md +++ b/docs/363.md @@ -26,7 +26,7 @@ ## 第 2 步:注册事件监听器 -当最终用户与 Swing GUI 组件交互时(例如单击 Convert 按钮),该组件将生成一种特殊类型的对象 - 称为 _ 事件对象 _ - 然后它将广播到任何其他对象以前已经为该事件注册为 _ 听众 _。 NetBeans IDE 使事件监听器注册变得非常简单: +当最终用户与 Swing GUI 组件交互时(例如单击 Convert 按钮),该组件将生成一种特殊类型的对象 - 称为*事件对象 _ - 然后它将广播到任何其他对象以前已经为该事件注册为*听众*。 NetBeans IDE 使事件监听器注册变得非常简单: [![using the NetBeans GUI to connect the actionPerformed method to the object](img/ec69d9533fad8533b6dfdb89a7cd5d76.jpg)](https://docs.oracle.com/javase/tutorial/figures/uiswing/learn/nb-swing-22.png) _This figure has been reduced to fit on the page. diff --git a/docs/365.md b/docs/365.md index ef8c09c54a3fb40a056ee1eb0676fee6d5861993..3d35ed886b56c2fd544146c69da374d44c0ace0e 100644 --- a/docs/365.md +++ b/docs/365.md @@ -8,7 +8,7 @@ ## [使用顶级容器](toplevel.html) -讨论如何使用`JFrame`,`JDialog`和`JApplet`类共享的功能 - 内容窗格,菜单栏和根窗格。它还讨论了 _ 包含层次结构 _,它指的是顶级容器包含的组件树。 +讨论如何使用`JFrame`,`JDialog`和`JApplet`类共享的功能 - 内容窗格,菜单栏和根窗格。它还讨论了*包含层次结构*,它指的是顶级容器包含的组件树。 ## [JComponent 类](jcomponent.html) diff --git a/docs/366.md b/docs/366.md index 1614522b80ef67e58a8a2c8171981db788e2214c..f51ef2e4a3094a5979febda145f20e3712e56a2c 100644 --- a/docs/366.md +++ b/docs/366.md @@ -4,7 +4,7 @@ 正如我们之前提到的,Swing 提供了三种通常有用的顶级容器类: [`JFrame`](frame.html) , [`JDialog`](dialog.html) 和 [`JApplet`](applet.html) 。使用这些类时,您应该牢记以下事实: -* 要在屏幕上显示,每个 GUI 组件必须是 _ 包含层次结构 _ 的一部分。包含层次结构是一个组件树,其顶层容器作为其根。我们会向您展示一个。 +* 要在屏幕上显示,每个 GUI 组件必须是*包含层次结构*的一部分。包含层次结构是一个组件树,其顶层容器作为其根。我们会向您展示一个。 * 每个 GUI 组件只能包含一次。如果组件已经在容器中并且您尝试将其添加到另一个容器,则该组件将从第一个容器中删除,然后添加到第二个容器中。 * 每个顶级容器都有一个内容窗格,一般来说,它包含(直接或间接)该顶级容器 GUI 中的可见组件。 * 您可以选择将菜单栏添加到顶级容器。按照惯例,菜单栏位于顶级容器内,但位于内容窗格之外。一些外观和感觉,例如 Mac OS 的外观和感觉,让您可以选择将菜单栏放在更适合外观的另一个地方,例如屏幕顶部。 @@ -95,7 +95,7 @@ frame.setJMenuBar(greenMenuBar); 有关实现菜单和菜单栏的更多信息,请参阅[如何使用菜单](menu.html)。 -每个顶级容器都依赖于一个名为 _ 根窗格 _ 的隐藏中间容器。根窗格管理内容窗格和菜单栏以及其他几个容器。您通常不需要了解根窗格来使用 Swing 组件。但是,如果您需要拦截鼠标点击或绘制多个组件,您应该熟悉根窗格。 +每个顶级容器都依赖于一个名为*根窗格*的隐藏中间容器。根窗格管理内容窗格和菜单栏以及其他几个容器。您通常不需要了解根窗格来使用 Swing 组件。但是,如果您需要拦截鼠标点击或绘制多个组件,您应该熟悉根窗格。 以下是根窗格为框架(以及每个其他顶级容器)提供的组件列表: diff --git a/docs/369.md b/docs/369.md index 1fa78a634fa529dd9abe0bace60c18d8484cd5d4..ea41cb0981f89aed7e239def7808eadb6679db9f 100644 --- a/docs/369.md +++ b/docs/369.md @@ -4,9 +4,9 @@ [`JTextComponent`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/JTextComponent.html) 类是 Swing 文本组件的基础。此类为其所有后代提供以下可自定义的功能: -* 一种称为 _ 文档 _ 的模型,用于管理组件的内容。 +* 一种称为*文档*的模型,用于管理组件的内容。 * 一个视图,在屏幕上显示组件。 -* 一种称为 _ 编辑器套件 _ 的控制器,可以通过[动作](../misc/action.html)读取和写入文本并实现编辑功能。 +* 一种称为*编辑器套件*的控制器,可以通过[动作](../misc/action.html)读取和写入文本并实现编辑功能。 * 支持无限撤消和重做。 * 可插入的插入符号和对插入符号的支持更改了监听器和导航过滤器。 @@ -232,9 +232,9 @@ public void actionPerformed(ActionEvent e) { * * * -与其他 Swing 组件一样,文本组件将其数据(称为 _ 模型 _)与其数据视图分开。如果您还不熟悉 Swing 组件使用的模型 - 视图分割,请参阅[使用模型](model.html)。 +与其他 Swing 组件一样,文本组件将其数据(称为*模型*)与其数据视图分开。如果您还不熟悉 Swing 组件使用的模型 - 视图分割,请参阅[使用模型](model.html)。 -文本组件的模型称为 _ 文档 _,是实现 [`Document`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/Document.html) 接口的类的实例。文档为文本组件提供以下服务: +文本组件的模型称为*文档*,是实现 [`Document`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/Document.html) 接口的类的实例。文档为文本组件提供以下服务: * 包含文字。文档将文本内容存储在`Element`对象中,这些对象可以表示任何逻辑文本结构,例如段落或共享样式的文本运行。我们这里没有描述`Element`对象。 * 支持通过`remove`和`insertString`方法编辑文本。 @@ -250,7 +250,7 @@ Swing 文本包包含`Document`, [`StyledDocument`](https://docs.oracle.com/ja `PlainDocument`是文本字段,密码字段和文本区域的默认文档。 `PlainDocument`为文本提供了一个基本容器,其中所有文本都以相同的字体显示。即使编辑器窗格是样式化文本组件,它默认使用`PlainDocument`的实例。标准`JTextPane`的默认文档是`DefaultStyledDocument`的实例 - 用于没有特定格式的样式文本的容器。但是,任何特定编辑器窗格或文本窗格使用的文档实例都取决于绑定到它的内容类型。如果使用`setPage`方法将文本加载到编辑器窗格或文本窗格中,则窗格使用的文档实例可能会更改。有关详细信息,请参阅[如何使用编辑器窗格和文本窗格](editorpane.html)。 -虽然您可以设置文本组件的文档,但通常更容易自动设置它,如果需要,可以使用 _ 文档过滤器 _ 来更改文本组件数据的设置方式。您可以通过安装文档过滤器或将文本组件的文档替换为您自己的文档来实现某些自定义。例如,`TextComponentDemo`示例中的文本窗格有一个文档过滤器,用于限制文本窗格可以包含的字符数。 +虽然您可以设置文本组件的文档,但通常更容易自动设置它,如果需要,可以使用*文档过滤器*来更改文本组件数据的设置方式。您可以通过安装文档过滤器或将文本组件的文档替换为您自己的文档来实现某些自定义。例如,`TextComponentDemo`示例中的文本窗格有一个文档过滤器,用于限制文本窗格可以包含的字符数。 要实现文档过滤器,请创建 [`DocumentFilter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/DocumentFilter.html) 的子类,然后使用`AbstractDocument`类中定义的`setDocumentFilter`方法将其附加到文档。尽管可以使文档不是来自`AbstractDocument`,但默认情况下,Swing 文本组件使用`AbstractDocument`子类作为其文档。 @@ -376,7 +376,7 @@ public void caretUpdate(CaretEvent e) { 如您所见,此监听器更新其文本标签以反映插入符号或选择的当前状态。监听器从插入事件对象获取要显示的信息。有关插入符号监听器和插入符事件的一般信息,请参阅[如何编写插入监听器](../events/caretlistener.html)。 -与文档监听器一样,插入符听众是被动的。它会对插入符号或选择中的更改做出反应,但不会更改插入符号或选择本身。如果要更改插入符号或选择,请使用 _ 导航过滤器 _ 或自定义插入符号。 +与文档监听器一样,插入符听众是被动的。它会对插入符号或选择中的更改做出反应,但不会更改插入符号或选择本身。如果要更改插入符号或选择,请使用*导航过滤器*或自定义插入符号。 实现导航过滤器类似于实现文档过滤器。首先,编写 [`NavigationFilter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/text/NavigationFilter.html) 的子类。然后使用`setNavigationFilter`方法将子类的实例附加到文本组件。 diff --git a/docs/37.md b/docs/37.md index 453641c928f23a129ad2665e394a61cfb43ac5e0..d5a4218afa13abec901b10885f1d85926f39d489 100644 --- a/docs/37.md +++ b/docs/37.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html) -与`if-then`和`if-then-else`语句不同,`switch`语句可以有许多可能的执行路径。 `switch`与`byte`,`short`,`char`和`int`原始数据类型一起使用。它也适用于 _ 枚举类型 _(在[枚举类型](../javaOO/enum.html)中讨论), [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 类,以及一些包含某些原始类型的特殊类: [`Character`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html) , [`Byte`](https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html) , [`Short`](https://docs.oracle.com/javase/8/docs/api/java/lang/Short.html) 和 [`Integer`](https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html) (在[数字和字符串](../data/index.html)中讨论] )。 +与`if-then`和`if-then-else`语句不同,`switch`语句可以有许多可能的执行路径。 `switch`与`byte`,`short`,`char`和`int`原始数据类型一起使用。它也适用于*枚举类型*(在[枚举类型](../javaOO/enum.html)中讨论), [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html) 类,以及一些包含某些原始类型的特殊类: [`Character`](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html) , [`Byte`](https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html) , [`Short`](https://docs.oracle.com/javase/8/docs/api/java/lang/Short.html) 和 [`Integer`](https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html) (在[数字和字符串](../data/index.html)中讨论] )。 以下代码示例 [`SwitchDemo`](examples/SwitchDemo.java) 声明名为`month`的`int`,其值代表一个月。代码使用`switch`语句根据`month`的值显示月份名称。 @@ -48,7 +48,7 @@ public class SwitchDemo { 在这种情况下,`August`打印到标准输出。 -`switch`语句的主体称为 _ 开关块 _。 `switch`块中的语句可以用一个或多个`case`或`default`标签标记。 `switch`语句计算其表达式,然后执行匹配`case`标签后面的所有语句。 +`switch`语句的主体称为*开关块*。 `switch`块中的语句可以用一个或多个`case`或`default`标签标记。 `switch`语句计算其表达式,然后执行匹配`case`标签后面的所有语句。 您还可以使用`if-then-else`语句显示月份的名称: @@ -65,7 +65,7 @@ if (month == 1) { 决定是否使用`if-then-else`语句或`switch`语句是基于可读性和语句正在测试的表达式。 `if-then-else`语句可以基于值或条件的范围来测试表达式,而`switch`语句仅基于单个整数,枚举值或`String`对象来测试表达式。 -另一个兴趣点是`break`声明。每个`break`语句终止封闭的`switch`语句。控制流继续`switch`块之后的第一个语句。 `break`语句是必要的,因为没有它们,`switch`块 _ 中的语句将通过 _ 落下:匹配的`case`标签之后的所有语句将按顺序执行,而不管后续`case`标签的表达如何,直到遇到`break`语句。程序 [`SwitchDemoFallThrough`](examples/SwitchDemoFallThrough.java) 显示`switch`程序段中的语句。程序显示对应于整数`month`的月份以及该年份中的月份: +另一个兴趣点是`break`声明。每个`break`语句终止封闭的`switch`语句。控制流继续`switch`块之后的第一个语句。 `break`语句是必要的,因为没有它们,`switch`块*中的语句将通过*落下:匹配的`case`标签之后的所有语句将按顺序执行,而不管后续`case`标签的表达如何,直到遇到`break`语句。程序 [`SwitchDemoFallThrough`](examples/SwitchDemoFallThrough.java) 显示`switch`程序段中的语句。程序显示对应于整数`month`的月份以及该年份中的月份: ```java public class SwitchDemoFallThrough { diff --git a/docs/373.md b/docs/373.md index 59f775108e9d89d88b11595520c14fc865d1638b..30c806eb5525d4f6fe3ded7e826c09f9eb64da52 100644 --- a/docs/373.md +++ b/docs/373.md @@ -39,7 +39,7 @@ * * * -如`ButtonDemo`示例所示,Swing 按钮可以显示文本和图像。在`ButtonDemo`中,每个按钮的文本位于相对于其图像的不同位置。每个按钮文本中带下划线的字母显示每个按钮的 _ 助记符 _ - 键盘替代方案。在大多数外观中,用户可以通过按 Alt 键和助记符来单击按钮。例如,Alt-M 将单击 ButtonDemo 中的“中间”按钮。 +如`ButtonDemo`示例所示,Swing 按钮可以显示文本和图像。在`ButtonDemo`中,每个按钮的文本位于相对于其图像的不同位置。每个按钮文本中带下划线的字母显示每个按钮的*助记符 _ - 键盘替代方案。在大多数外观中,用户可以通过按 Alt 键和助记符来单击按钮。例如,Alt-M 将单击 ButtonDemo 中的“中间”按钮。 禁用按钮时,外观会自动生成按钮的禁用外观。但是,您可以提供替换正常图像的图像。例如,您可以提供左右按钮中使用的图像的灰色版本。 diff --git a/docs/375.md b/docs/375.md index c59dd7b502685eaf032d0cfe3b55e1095f17d7dd..5b099f404f0f6dda5aef2120d3c4af4036d04694 100644 --- a/docs/375.md +++ b/docs/375.md @@ -18,7 +18,7 @@ 程序的源代码在 [`ColorChooserDemo.java`](../examples/components/ColorChooserDemoProject/src/components/ColorChooserDemo.java) 中。 -颜色选择器由标有**选择文本颜色**的框内的所有内容组成。这就是 Java Look& S 中标准颜色选择器的样子。感觉。它包含两个部分,选项卡式窗格和预览面板。选项卡式窗格中的三个选项卡选择 _ 选择器面板 _。选项卡式窗格下方的 _ 预览面板 _ 显示当前选定的颜色。 +颜色选择器由标有**选择文本颜色**的框内的所有内容组成。这就是 Java Look& S 中标准颜色选择器的样子。感觉。它包含两个部分,选项卡式窗格和预览面板。选项卡式窗格中的三个选项卡选择*选择器面板*。选项卡式窗格下方的*预览面板*显示当前选定的颜色。 以下是创建`JColorChooser`实例并将其添加到容器的示例中的代码: diff --git a/docs/376.md b/docs/376.md index 13ac31dbbfce66a2954940dc3e09664666eb97e1..72e2a6c04c7eaf85d461a6052c447f562ebc366a 100644 --- a/docs/376.md +++ b/docs/376.md @@ -92,7 +92,7 @@ public class ComboBoxDemo ... implements ActionListener { 组合框还会生成项目事件,当任何项目的选择状态发生更改时会触发这些事件。在组合框中一次只能选择一个项目,因此当用户进行新选择时,先前选择的项目将被取消选中。因此,每次用户从菜单中选择不同的项目时,都会触发两个项目事件。如果用户选择相同的项目,则不会触发任何项目事件。使用`addItemListener`在组合框中注册项监听器。 [如何编写项目监听器](../events/itemlistener.html)提供有关实现项目监听器的一般信息。 -虽然`JComboBox`继承了为低级事件注册监听器的方法 - 例如焦点,键和鼠标事件 - 但我们建议您不要在组合框上侦听低级事件。原因如下:组合框是 _ 化合物组分 _ - 它由两个或多个其他组分组成。组合框本身会触发高级事件,例如动作事件。它的子组件可以触发低级事件,如鼠标,键和焦点事件。低级事件和触发它们的子组件依赖于外观。为避免编写依赖于依赖于感觉的代码,您应该只监听复合组件(如组合框)上的高级事件。有关事件的信息,包括有关高级和低级事件的讨论,请参阅[写入事件监听器](../events/index.html)。 +虽然`JComboBox`继承了为低级事件注册监听器的方法 - 例如焦点,键和鼠标事件 - 但我们建议您不要在组合框上侦听低级事件。原因如下:组合框是*化合物组分 _ - 它由两个或多个其他组分组成。组合框本身会触发高级事件,例如动作事件。它的子组件可以触发低级事件,如鼠标,键和焦点事件。低级事件和触发它们的子组件依赖于外观。为避免编写依赖于依赖于感觉的代码,您应该只监听复合组件(如组合框)上的高级事件。有关事件的信息,包括有关高级和低级事件的讨论,请参阅[写入事件监听器](../events/index.html)。 这是一个演示应用程序的图片,它使用可编辑的组合框输入用于格式化日期的模式。 @@ -243,7 +243,7 @@ class ComboBoxRenderer extends JLabel [JComboBox(Object [])](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#JComboBox-java.lang.Object:A-) [JComboBox(Vector)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#JComboBox-java.util.Vector-) | 使用其菜单中的指定项创建一个组合框。使用默认构造器创建的组合框最初在菜单中没有项目。每个其他构造器都从其参数初始化菜单:模型对象,对象数组或对象的`Vector`。 | | [void addItem(Object)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#addItem-java.lang.Object-) -[void insertItemAt(Object,int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#insertItemAt-java.lang.Object-int-) | 将指定的对象添加或插入到组合框的菜单中。 insert 方法将指定对象 _ 置于 _ 指定的索引处,从而将其插入当前位于该索引处的对象之前。这些方法要求组合框的数据模型是`MutableComboBoxModel`的实例。 | +[void insertItemAt(Object,int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#insertItemAt-java.lang.Object-int-) | 将指定的对象添加或插入到组合框的菜单中。 insert 方法将指定对象*置于*指定的索引处,从而将其插入当前位于该索引处的对象之前。这些方法要求组合框的数据模型是`MutableComboBoxModel`的实例。 | | [Object getItemAt(int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#getItemAt-int-) [Object getSelectedItem()](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#getSelectedItem--) | 从组合框的菜单中获取项目。 | | [void removeAllItems()](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#removeAllItems--) diff --git a/docs/377.md b/docs/377.md index 9a3327d4fd556c16ddedd0933d9559e592f529ab..261f5369a2be0743ddf13f843ba8dfc1b490b6b3 100644 --- a/docs/377.md +++ b/docs/377.md @@ -4,7 +4,7 @@ 对话窗口是一个独立的子窗口,用于在主 Swing 应用程序窗口之外进行临时通知。大多数对话框向用户显示错误消息或警告,但对话框可以显示图像,目录树或与管理它们的主 Swing 应用程序兼容的任何内容。 -为方便起见,几个 Swing 组件类可以直接实例化并显示 _ 对话框 _。要创建简单的标准对话框,请使用 [`JOptionPane`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html) 类。 [`ProgressMonitor`](progress.html) 类可以显示一个对话框,显示操作的进度。另外两个类别 [`JColorChooser`](colorchooser.html) 和 [`JFileChooser`](filechooser.html) 也提供标准对话框。要打开打印对话框,您可以使用 [Printing](../../2d/printing/index.html) API。要创建自定义对话框,请直接使用 [`JDialog`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JDialog.html) 类。 +为方便起见,几个 Swing 组件类可以直接实例化并显示*对话框*。要创建简单的标准对话框,请使用 [`JOptionPane`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html) 类。 [`ProgressMonitor`](progress.html) 类可以显示一个对话框,显示操作的进度。另外两个类别 [`JColorChooser`](colorchooser.html) 和 [`JFileChooser`](filechooser.html) 也提供标准对话框。要打开打印对话框,您可以使用 [Printing](../../2d/printing/index.html) API。要创建自定义对话框,请直接使用 [`JDialog`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JDialog.html) 类。 简单对话框的代码可以是最小的。例如,这是一个信息对话框: @@ -31,7 +31,7 @@ JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green."); 每个对话框都依赖于 Frame 组件。当该帧被销毁时,其依赖对话框也被销毁。当帧被图标化时,其相关的对话框也会从屏幕上消失。当帧被去图标化时,其相关的对话框返回到屏幕。 swing JDialog 类从 AWT `Dialog`类继承此行为。 -对话框可以是 _ 模态 _。当模态对话框可见时,它会阻止用户输入程序中的所有其他窗口。 JOptionPane 创建模态的`JDialog`。要创建非模态对话框,必须直接使用`JDialog`类。 +对话框可以是*模态*。当模态对话框可见时,它会阻止用户输入程序中的所有其他窗口。 JOptionPane 创建模态的`JDialog`。要创建非模态对话框,必须直接使用`JDialog`类。 从 JDK 7 开始,您可以使用新的 Modality API 修改对话框窗口模态行为。有关详细信息,请参阅[新模态 API](http://www.oracle.com/technetwork/articles/javase/modality-137604.html) 。 diff --git a/docs/378.md b/docs/378.md index 949d694e0ec0fd8ffda1bae389b8100461589632..4424e92defe2b604b6d8406dcccde5ef74d85e3f 100644 --- a/docs/378.md +++ b/docs/378.md @@ -97,7 +97,7 @@ try { ``` -简而言之,此代码将初始文本硬编码为数组,并创建并硬编码几个 _ 样式 _ - 表示不同段落和字符格式的对象 - 到另一个数组中。接下来,代码循环遍历数组,将文本插入文本窗格,并指定用于插入文本的样式。 +简而言之,此代码将初始文本硬编码为数组,并创建并硬编码几个*样式 _ - 表示不同段落和字符格式的对象 - 到另一个数组中。接下来,代码循环遍历数组,将文本插入文本窗格,并指定用于插入文本的样式。 虽然这是一个有趣的例子,简明地演示了`JTextPane`的几个特性,但“真实世界”程序不太可能以这种方式初始化文本窗格。相反,程序将使用编辑器窗格来保存文档,然后将其用于初始化文本窗格。 diff --git a/docs/379.md b/docs/379.md index aa2ffd5e91ff79c1a6944a086cde5c19786f8e87..1a496860ed9dbe90b1772970b9f266cb2c8d3106 100644 --- a/docs/379.md +++ b/docs/379.md @@ -133,7 +133,7 @@ int returnVal = fc.showDialog(FileChooserDemo2.this, "Attach"); 再次,文件选择器不会对所选文件执行任何操作。该程序负责实现为其创建文件选择器的自定义任务。 -默认情况下,文件选择器显示它检测到的所有文件和目录,隐藏文件除外。程序可以将一个或多个 _ 文件过滤器 _ 应用于文件选择器,以便选择器仅显示一些文件。文件选择器为每个文件调用过滤器的`accept`方法以确定是否应该显示它。文件筛选器根据文件类型,大小,所有权等条件接受或拒绝文件。过滤器会影响文件选择器显示的文件列表。即使没有显示,用户也可以输入任何文件的名称。 +默认情况下,文件选择器显示它检测到的所有文件和目录,隐藏文件除外。程序可以将一个或多个*文件过滤器*应用于文件选择器,以便选择器仅显示一些文件。文件选择器为每个文件调用过滤器的`accept`方法以确定是否应该显示它。文件筛选器根据文件类型,大小,所有权等条件接受或拒绝文件。过滤器会影响文件选择器显示的文件列表。即使没有显示,用户也可以输入任何文件的名称。 `JFileChooser`支持三种不同的过滤。将按此处列出的顺序检查过滤器。例如,应用程序控制的过滤器只能看到内置过滤接受的那些文件。 @@ -219,7 +219,7 @@ public class Utils { ``` -在 Java 外观中,选择器列表显示每个文件的名称,并显示一个小图标,表示文件是真文件还是目录。您可以通过创建 [`FileView`](https://docs.oracle.com/javase/8/docs/api/javax/swing/filechooser/FileView.html) 的自定义子类并使用该类的实例作为`setFileView`方法的参数来自定义此 _ 文件视图 _。该示例使用在 [`ImageFileView.java`](../examples/components/FileChooserDemo2Project/src/components/ImageFileView.java) 中实现的自定义类的实例作为文件选择器的文件视图。 +在 Java 外观中,选择器列表显示每个文件的名称,并显示一个小图标,表示文件是真文件还是目录。您可以通过创建 [`FileView`](https://docs.oracle.com/javase/8/docs/api/javax/swing/filechooser/FileView.html) 的自定义子类并使用该类的实例作为`setFileView`方法的参数来自定义此*文件视图*。该示例使用在 [`ImageFileView.java`](../examples/components/FileChooserDemo2Project/src/components/ImageFileView.java) 中实现的自定义类的实例作为文件选择器的文件视图。 ```java fc.setFileView(new ImageFileView()); diff --git a/docs/38.md b/docs/38.md index 55b3153b7ae5999cc6802c97244f265ca988511b..1b4ed6d82a4d7c98dbf307723b4248b76c7ff326 100644 --- a/docs/38.md +++ b/docs/38.md @@ -11,7 +11,7 @@ while (expression) { ``` -`while`语句评估 _ 表达式 _,它必须返回`boolean`值。如果表达式求值为`true`,则`while`语句执行`while`块中的 _ 语句 _(s)。 `while`语句继续测试表达式并执行其块,直到表达式求值为`false`。使用`while`语句打印 1 到 10 之间的值可以按照以下 [`WhileDemo`](examples/WhileDemo.java) 程序完成: +`while`语句评估*表达式*,它必须返回`boolean`值。如果表达式求值为`true`,则`while`语句执行`while`块中的*语句*(s)。 `while`语句继续测试表达式并执行其块,直到表达式求值为`false`。使用`while`语句打印 1 到 10 之间的值可以按照以下 [`WhileDemo`](examples/WhileDemo.java) 程序完成: ```java class WhileDemo { diff --git a/docs/380.md b/docs/380.md index 32b441f9edd09ff3392583a149e2223920bf653f..c79ac469fe0828098ac1e539b142e2926ff57d51 100644 --- a/docs/380.md +++ b/docs/380.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html](https://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html) -格式化文本字段为开发人员提供了一种指定可在文本字段中键入的有效字符集的方法。具体来说, [`JFormattedTextField`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html) 类将 _ 格式化程序 _ 和对象 _ 值 _ 添加到从`JTextField`类继承的特征。格式化程序将字段的值转换为它显示的文本,将文本转换为字段的值。 +格式化文本字段为开发人员提供了一种指定可在文本字段中键入的有效字符集的方法。具体来说, [`JFormattedTextField`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html) 类将*格式化程序*和对象*值*添加到从`JTextField`类继承的特征。格式化程序将字段的值转换为它显示的文本,将文本转换为字段的值。 使用 Swing 提供的格式化程序,您可以设置格式化文本字段,以本地化格式键入日期和数字。另一种格式化程序使您可以使用字符掩码来指定可在字段中的每个位置键入的字符集。例如,您可以指定用于以特定格式键入电话号码的掩码,例如(XX)X-XX-XX-XX-XX。 @@ -92,11 +92,11 @@ paymentFormat = NumberFormat.getCurrencyInstance(); * * * -**格式化文本字段的 _ 文本 _ 及其 _ 值 _ 是两个不同的属性,值通常落后于文本。** +**格式化文本字段的*文本*及其*值*是两个不同的属性,值通常落后于文本。** * * * -_text_ 属性由`JTextField`类定义。此属性始终反映字段显示的内容。由`JFormattedTextField`类定义的 _ 值 _ 属性可能不会反映字段中显示的最新文本。当用户键入时,text 属性会更改,但 value 属性不会更改,直到更改为。 +_text_ 属性由`JTextField`类定义。此属性始终反映字段显示的内容。由`JFormattedTextField`类定义的*值*属性可能不会反映字段中显示的最新文本。当用户键入时,text 属性会更改,但 value 属性不会更改,直到更改为。 更准确地说,可以使用`setValue`方法或`commitEdit`方法设置格式化文本字段的值。 `setValue`方法将值设置为指定的参数。该参数在技术上可以是任何`Object`,但格式化程序需要能够将其转换为字符串。否则,文本字段不显示任何实质性信息。 diff --git a/docs/381.md b/docs/381.md index 96eb7f8f236081f87f903853fee0de1d85f58d3c..aba48276eb0a3c18097ae089bd87a7437e33e352 100644 --- a/docs/381.md +++ b/docs/381.md @@ -79,7 +79,7 @@ frame.setIconImage(new ImageIcon(imgURL).getImage()); ``` -如前面的代码片段所示,您必须在创建您希望影响其装饰的帧之前调用`setDefaultLookAndFeelDecorated`方法 _。使用`setDefaultLookAndFeelDecorated`设置的值用于随后创建的所有`JFrame`。您可以通过调用`JFrame.setDefaultLookAndFeelDecorated(false)`切换回使用窗口系统装饰。有些外观可能不支持窗户装饰;在这种情况下,使用窗户系统装饰。_ +如前面的代码片段所示,您必须在创建您希望影响其装饰的帧之前调用`setDefaultLookAndFeelDecorated`方法*。使用`setDefaultLookAndFeelDecorated`设置的值用于随后创建的所有`JFrame`。您可以通过调用`JFrame.setDefaultLookAndFeelDecorated(false)`切换回使用窗口系统装饰。有些外观可能不支持窗户装饰;在这种情况下,使用窗户系统装饰。_ 创建上图所示框架的应用程序的完整源代码位于 [`FrameDemo2.java`](../examples/components/FrameDemo2Project/src/components/FrameDemo2.java) 中。除了展示如何选择窗口装饰外,FrameDemo2 还展示了如何禁用所有窗口装饰并给出了定位窗口的示例。它包括两个创建用作图标的`Image`对象的方法 - 一个从文件加载,另一个从头开始绘制。 diff --git a/docs/384.md b/docs/384.md index 55b0a6a224922e9fe5daf0c0523bf325ea66df83..92d801c1773ed50d145c910aeff96f70becdde7c 100644 --- a/docs/384.md +++ b/docs/384.md @@ -2,13 +2,13 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html](https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html) -分层窗格是 Swing 容器,为定位组件提供第三维:_ 深度 _,也称为 _Z 顺序 _。将组件添加到分层窗格时,将其深度指定为整数。数字越大,组件越接近容器内的“顶部”位置。如果组件重叠,则“更近”的组件在较低深度的组件顶部绘制。相同深度处的组件之间的关系由它们在深度内的位置确定。 +分层窗格是 Swing 容器,为定位组件提供第三维:*深度*,也称为 _Z 顺序*。将组件添加到分层窗格时,将其深度指定为整数。数字越大,组件越接近容器内的“顶部”位置。如果组件重叠,则“更近”的组件在较低深度的组件顶部绘制。相同深度处的组件之间的关系由它们在深度内的位置确定。 * * * **Note:**  -AWT 容器有一个 API,允许您操作组件 _Z 顺序 _。有关更多信息,请参阅 [AWT 焦点规范](https://docs.oracle.com/javase/8/docs/api/java/awt/doc-files/FocusSpec.html#ZOrder)。 +AWT 容器有一个 API,允许您操作组件 _Z 顺序*。有关更多信息,请参阅 [AWT 焦点规范](https://docs.oracle.com/javase/8/docs/api/java/awt/doc-files/FocusSpec.html#ZOrder)。 * * * diff --git a/docs/386.md b/docs/386.md index 31f80aaf5506afa0db14ae84350621a5f4787fa6..cfb6bc9b45f0b4b83cefcf582c048f11490d31ae 100644 --- a/docs/386.md +++ b/docs/386.md @@ -4,7 +4,7 @@ 菜单提供了一种节省空间的方式,让用户可以选择其中一个选项。用户可以做出多种选择的其他组件包括[组合框](combobox.html),[列出](list.html),[单选按钮](button.html#radiobutton),[微调器](spinner.html),和[工具栏](toolbar.html)。如果您的任何菜单项执行的操作被另一个菜单项或工具栏按钮复制,则除了本节之外,您还应阅读[如何使用操作](../misc/action.html)。 -菜单的独特之处在于,按照惯例,菜单不会与 UI 中的其他组件放在一起。相反,菜单通常出现在 _ 菜单栏 _ 或 _ 弹出菜单 _ 中。菜单栏包含一个或多个菜单,并具有通常的平台相关位置 - 通常位于窗口顶部。弹出菜单是一个不可见的菜单,直到用户在启用弹出窗口的组件上进行特定于平台的鼠标操作(例如按下鼠标右键)。然后弹出菜单出现在光标下。 +菜单的独特之处在于,按照惯例,菜单不会与 UI 中的其他组件放在一起。相反,菜单通常出现在*菜单栏*或*弹出菜单*中。菜单栏包含一个或多个菜单,并具有通常的平台相关位置 - 通常位于窗口顶部。弹出菜单是一个不可见的菜单,直到用户在启用弹出窗口的组件上进行特定于平台的鼠标操作(例如按下鼠标右键)。然后弹出菜单出现在光标下。 下图显示了许多与菜单相关的组件:菜单栏,菜单,菜单项,单选按钮菜单项,复选框菜单项和分隔符。如您所见,菜单项可以包含图像或文本,或两者都有。您还可以指定其他属性,例如字体和颜色。 @@ -181,7 +181,7 @@ public class MenuDemo ... implements ActionListener, 有关处理动作和项目事件的示例,请参阅[按钮](button.html),[单选按钮](button.html#radiobutton)和[复选框](button.html#checkbox)部分,以及[示例列表](#eg)在本节末尾。 -菜单支持两种键盘选择:助记符和加速器。 _ 助记符 _ 提供了一种使用键盘导航菜单层次结构的方法,增加了程序的可访问性。另一方面,_ 加速器 _ 提供键盘快捷键到 _ 旁路 _ 导航菜单层次结构。助记符适用于所有用户;加速器适用于高级用户。 +菜单支持两种键盘选择:助记符和加速器。*助记符*提供了一种使用键盘导航菜单层次结构的方法,增加了程序的可访问性。另一方面,*加速器*提供键盘快捷键到*旁路*导航菜单层次结构。助记符适用于所有用户;加速器适用于高级用户。 助记符是使得已经可见的菜单项被选择的关键。例如,在`MenuDemo`中,第一个菜单具有助记符 A,而其第二个菜单项具有助记符 B.这意味着,当您使用 Java 外观运行`MenuDemo`时,按 Alt 和 A 键可使第一个菜单出现。当第一个菜单可见时,按 B 键(带或不带 Alt)可选择第二个菜单项。菜单项通常通过在菜单项的文本中下划线第一次出现的助记符来显示其助记符,如下面的快照所示。 diff --git a/docs/389.md b/docs/389.md index 4567a12164ff2798ad9d59684b0aeba4f89a0c41..1b860c58841cfe7357f5ccb2102e3986fe8d2cec 100644 --- a/docs/389.md +++ b/docs/389.md @@ -15,7 +15,7 @@ container.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); ![A typical progress bar](img/1b7556ece8050765c992fd07c789366f.jpg) -有时您无法立即确定长时间运行任务的长度,或者任务可能长时间保持在相同的完成状态。通过将进度条置于 _ 不确定模式,您可以显示没有可测量进度的工作。_ 不确定模式下的进度条显示动画以指示正在进行工作。只要进度条可以显示更有意义的信息,您应该将其切换回默认的确定模式。在 Java 外观中,不确定的进度条看起来像这样: +有时您无法立即确定长时间运行任务的长度,或者任务可能长时间保持在相同的完成状态。通过将进度条置于*不确定模式,您可以显示没有可测量进度的工作。*不确定模式下的进度条显示动画以指示正在进行工作。只要进度条可以显示更有意义的信息,您应该将其切换回默认的确定模式。在 Java 外观中,不确定的进度条看起来像这样: ![An indeterminate progress bar](img/f259ccb628cfd5bc64ec1499700ca682.jpg) @@ -145,7 +145,7 @@ public void propertyChange(PropertyChangeEvent evt) { 代码中的其他更改与字符串显示有关。显示字符串的进度条可能比没有显示字符串的进度条高,并且,作为演示设计者,我们已经任意决定此进度条仅在其处于默认的确定模式时才显示字符串。但是,我们希望避免在更改模式时进度条更改高度时可能导致的布局丑陋。因此,代码在`setStringPainted(true)`的调用中离开但添加了对`setString("")`的调用,因此不会显示任何文本。稍后,当进度条从不确定模式切换到确定模式时,调用`setString(null)`会使进度条显示其默认字符串。 -我们做的一个改变 _ 而不是 _ make 正在从`progress`事件处理器中删除对`progressBar.setValue`的调用。该调用不会造成任何伤害,因为不确定的进度条不使用其 value 属性,除非可能在状态字符串中显示它。事实上,尽可能保持进度条的数据是最新的,因为一些外观可能不支持不确定模式。 +我们做的一个改变*而不是 _ make 正在从`progress`事件处理器中删除对`progressBar.setValue`的调用。该调用不会造成任何伤害,因为不确定的进度条不使用其 value 属性,除非可能在状态字符串中显示它。事实上,尽可能保持进度条的数据是最新的,因为一些外观可能不支持不确定模式。 * * * @@ -217,14 +217,14 @@ if (progressMonitor.isCanceled() || task.isDone()) { 请注意,进度监视器本身不会取消该任务。它提供了 GUI 和 API,使程序可以轻松完成。 -如果出现以下情况,请使用 _ 进度条 _: +如果出现以下情况,请使用*进度条*: * 您希望更多地控制进度条的配置。如果您直接使用进度条,可以将其设置为不确定,使其垂直显示,提供一个字符串供其显示,在其上注册更改监听器,并为其提供有界范围模型以控制进度条最小值,最大值和当前值。 * 程序需要显示其他组件以及进度条。 * 您需要多个进度条。对于某些任务,您需要监视多个参数。例如,除了已成功安装的文件数量之外,安装程序还可以监视磁盘空间使用情况。 * 您需要重用进度条。进度条可以重复使用;进度监视器不能。一旦进度监视器决定显示对话框(或不显示),进度监视器就不能再次进行。 -如果出现以下情况,请使用 _ 进度监视器 _: +如果出现以下情况,请使用*进度监视器*: * 您想要一种在[对话框](dialog.html)中显示进度的简便方法。 * 正在运行的任务是次要的,用户可能对该任务的进度不感兴趣。进度监视器为用户在任务仍在运行时关闭对话框提供了一种方法。 @@ -232,7 +232,7 @@ if (progressMonitor.isCanceled() || task.isDone()) { * 您的任务在运行时会定期显示一条短消息。进度监视器对话框提供`setNote`方法,以便任务可以提供有关其正在执行的操作的更多信息。例如,安装任务可能会报告安装时每个文件的名称。 * 该任务可能不需要很长时间才能完成。您决定运行任务在什么时候花费足够长的时间来保证让用户了解它。如果任务在您设置的时间范围内完成,则进度监视器不会弹出对话框。 -如果您决定使用进度监视器 _ 和 _,您正在监视的任务是从输入流中读取,请使用 [**`ProgressMonitorInputStream`**](https://docs.oracle.com/javase/8/docs/api/javax/swing/ProgressMonitorInputStream.html)类。 +如果您决定使用进度监视器*和*,您正在监视的任务是从输入流中读取,请使用 [**`ProgressMonitorInputStream`**](https://docs.oracle.com/javase/8/docs/api/javax/swing/ProgressMonitorInputStream.html)类。 下表列出了使用进度条和进度监视器的常用 API。因为`JProgressBar`是`JComponent`的子类,所以您可能在`JProgressBar`上调用的其他方法列在 [JComponent 类](jcomponent.html)中。请注意,`ProgressMonitor`是`Object`的子类,不是可视组件。 diff --git a/docs/39.md b/docs/39.md index 5ee7bf2414e3e43be53a2193aa8891c5ded030c5..6ef43348e7c621bfce6a9a686d84bb32aad78f7f 100644 --- a/docs/39.md +++ b/docs/39.md @@ -14,9 +14,9 @@ for (initialization; termination; 使用此版本的`for`语句时,请记住: -* _ 初始化 _ 表达式初始化循环;循环开始时,它执行一次。 -* 当 _ 终止 _ 表达式求值为`false`时,循环终止。 -* 每次迭代循环后调用 _ 增量 _ 表达式;这个表达式增加 _ 或 _ 递减一个值是完全可以接受的。 +* _ 初始化*表达式初始化循环;循环开始时,它执行一次。 +* 当*终止*表达式求值为`false`时,循环终止。 +* 每次迭代循环后调用*增量*表达式;这个表达式增加*或*递减一个值是完全可以接受的。 以下程序 [`ForDemo`](examples/ForDemo.java) 使用`for`语句的一般形式将数字 1 到 10 打印到标准输出: @@ -60,7 +60,7 @@ for ( ; ; ) { ``` -`for`语句还有另一种形式,用于迭代[集合](../../collections/index.html)和[数组](arrays.html)这种形式有时被称为 _ 增强 _ 语句,可以使用使您的循环更紧凑,易于阅读。要演示,请考虑以下数组,其中包含数字 1 到 10: +`for`语句还有另一种形式,用于迭代[集合](../../collections/index.html)和[数组](arrays.html)这种形式有时被称为*增强*语句,可以使用使您的循环更紧凑,易于阅读。要演示,请考虑以下数组,其中包含数字 1 到 10: ```java int[] numbers = {1,2,3,4,5,6,7,8,9,10}; diff --git a/docs/391.md b/docs/391.md index e853325d8de4ae26ffb58951df5423d60a3b20d7..930bb0721175a4492a6d1a4f53040ce625c01ac5 100644 --- a/docs/391.md +++ b/docs/391.md @@ -70,7 +70,7 @@ JScrollPane pictureScrollPane = new JScrollPane(picture); ``` -滚动窗格的客户端也称为 _ 视图 _ 或 _ 视口视图 _。您可以通过调用`setViewportView`方法动态更改客户端。请注意,`JScrollPane`没有相应的`getViewportView`方法。如果需要再次引用客户端对象,可以将其缓存在变量中,也可以在滚动窗格中调用`getViewport().getViewportView()`。 +滚动窗格的客户端也称为*视图*或*视口视图*。您可以通过调用`setViewportView`方法动态更改客户端。请注意,`JScrollPane`没有相应的`getViewportView`方法。如果需要再次引用客户端对象,可以将其缓存在变量中,也可以在滚动窗格中调用`getViewport().getViewportView()`。 当用户操纵滚动窗格中的滚动条时,可见的客户端区域会相应更改。此图显示了滚动窗格与其客户端之间的关系,并指示了滚动窗格委托提供帮助的类: @@ -78,17 +78,17 @@ JScrollPane pictureScrollPane = new JScrollPane(picture); 滚动窗格使用 [`JViewport`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JViewport.html) 实例来管理客户端的可见区域。视口负责根据滚动条的位置定位和调整客户端大小,并显示它。 -滚动窗格可以使用 [`JScrollBar`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JScrollBar.html) 的两个单独实例作为滚动条。滚动条为用户提供操作可视区域的界面。下图显示了滚动条的三个区域:旋钮(有时称为 _ 拇指 _),(箭头)按钮和轨道。 +滚动窗格可以使用 [`JScrollBar`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JScrollBar.html) 的两个单独实例作为滚动条。滚动条为用户提供操作可视区域的界面。下图显示了滚动条的三个区域:旋钮(有时称为*拇指*),(箭头)按钮和轨道。 ![The parts of a scroll bar](img/dddfff56eee3fd3aae3c4246b9221e12.jpg) 当用户上下移动垂直滚动条上的旋钮时,客户端的可见区域上下移动。类似地,当用户将水平滚动条上的旋钮向右和向左移动时,客户端的可见区域相应地来回移动。旋钮相对于其轨道的位置成比例地等于可见区域相对于客户的位置。在 Java 外观和其他一些内容中,旋钮的大小给出了关于客户端可见多少的直观线索。 -通过单击箭头按钮,用户可以按 _ 单位增量 _ 滚动。通过在轨道内单击,用户可以滚动 _ 块增量 _。如果用户有带滚轮的鼠标,则用户可以使用鼠标滚轮垂直滚动。鼠标滚轮滚动的数量取决于平台。例如,默认情况下,在 Windows XP 上,鼠标滚轮滚动三个单位增量;鼠标控制面板允许您指定不同数量的单位增量或使用块增量。有关单位和块增量的更多信息,请参见[实现滚动 - 精明客户端](#scrollable)。 +通过单击箭头按钮,用户可以按*单位增量*滚动。通过在轨道内单击,用户可以滚动*块增量*。如果用户有带滚轮的鼠标,则用户可以使用鼠标滚轮垂直滚动。鼠标滚轮滚动的数量取决于平台。例如,默认情况下,在 Windows XP 上,鼠标滚轮滚动三个单位增量;鼠标控制面板允许您指定不同数量的单位增量或使用块增量。有关单位和块增量的更多信息,请参见[实现滚动 - 精明客户端](#scrollable)。 典型程序不直接在视口或滚动条上实例化或调用方法。相反,程序使用[HTD0]实现滚动 - 精明客户端中讨论的`JScrollPane` API 和 API 来实现其滚动行为。一些滚动精通的组件,如`JList`,`JTable`和`JTree`也提供[附加 API](#otherAPI) ,以帮助您影响其滚动行为。 -启动时,`ScrollDemo`应用程序中的滚动窗格有两个滚动条。如果使窗口变大,则两个滚动条都会消失,因为它们不再需要。如果然后缩小窗口的高度而不更改其宽度,则会再次出现垂直滚动条。进一步的实验将表明,在这个应用程序中,两个滚动条都会消失并根据需要重新出现。此行为由滚动窗格的 _ 滚动条策略 _ 控制,实际上,它是两个策略:每个滚动条都有自己的。 +启动时,`ScrollDemo`应用程序中的滚动窗格有两个滚动条。如果使窗口变大,则两个滚动条都会消失,因为它们不再需要。如果然后缩小窗口的高度而不更改其宽度,则会再次出现垂直滚动条。进一步的实验将表明,在这个应用程序中,两个滚动条都会消失并根据需要重新出现。此行为由滚动窗格的*滚动条策略*控制,实际上,它是两个策略:每个滚动条都有自己的。 `ScrollDemo`未显式设置滚动窗格的滚动条策略 - 它使用默认值。您可以在创建滚动窗格时动态设置策略,也可以动态更改它们。 diff --git a/docs/394.md b/docs/394.md index 2d373827504171a00755c8c42f057e62c48c0f2d..6d79da43f5abe9f4205659979df4f3915fc8cc44 100644 --- a/docs/394.md +++ b/docs/394.md @@ -4,7 +4,7 @@ 旋转器类似于[组合框](combobox.html)和[列出](list.html),因为它们允许用户从一系列值中进行选择。与可编辑的组合框一样,微调器允许用户键入值。与组合框不同,微调器没有可以覆盖其他组件的下拉列表。因为微调器不显示可能的值 - 只有当前值可见 - 当可能值的集合非常大时,通常使用它们而不是组合框或列表。但是,只有在可能的值及其顺序明显时才应使用微调器。 -微调器是具有三个子组件的复合组件:两个小按钮和一个 _ 编辑器 _。编辑器可以是任何`JComponent`,但默认情况下它是作为包含[格式的文本字段](formattedtextfield.html)的面板实现的。微调器的可能值和当前值由其 _ 模型 _ 管理。 +微调器是具有三个子组件的复合组件:两个小按钮和一个*编辑器*。编辑器可以是任何`JComponent`,但默认情况下它是作为包含[格式的文本字段](formattedtextfield.html)的面板实现的。微调器的可能值和当前值由其*模型*管理。 这是一个名为`SpinnerDemo`的应用程序的图片,其中有三个用于指定日期的微调器: @@ -351,7 +351,7 @@ _(在`JSpinner.DefaultEditor`中定义)_ | 获取格式化文本字段,该 | [void setEnd(Comparable)](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerDateModel.html#setEnd-java.lang.Comparable-) [Comparable getEnd()](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerDateModel.html#getEnd--) | 设置或获取此序列中的最后一个`Date`。使用`null`指定微调器没有上限。 | | [void setCalendarField(int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerDateModel.html#setCalendarField-int-) -[int getCalendarField()](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerDateModel.html#getCalendarField--) | 设置或获取`getNextValue`和`getPreviousValue`方法使用的日期值增量的大小。当用户明确增加或减少该值时,此属性为 _ 而不是 _;相反,格式化文本字段的所选部分递增或递减。指定的参数必须是以下常量之一,在`Calendar`中定义:`ERA`,`YEAR`,`MONTH`,`WEEK_OF_YEAR`,`WEEK_OF_MONTH`,`DAY_OF_MONTH`,`DAY_OF_YEAR`,`DAY_OF_WEEK`,`DAY_OF_WEEK_IN_MONTH`,`AM_PM`,`HOUR_OF_DAY`,`MINUTE`,`SECOND`,`MILLISECOND`。 | +[int getCalendarField()](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerDateModel.html#getCalendarField--) | 设置或获取`getNextValue`和`getPreviousValue`方法使用的日期值增量的大小。当用户明确增加或减少该值时,此属性为*而不是 _;相反,格式化文本字段的所选部分递增或递减。指定的参数必须是以下常量之一,在`Calendar`中定义:`ERA`,`YEAR`,`MONTH`,`WEEK_OF_YEAR`,`WEEK_OF_MONTH`,`DAY_OF_MONTH`,`DAY_OF_YEAR`,`DAY_OF_WEEK`,`DAY_OF_WEEK_IN_MONTH`,`AM_PM`,`HOUR_OF_DAY`,`MINUTE`,`SECOND`,`MILLISECOND`。 | | 方法 | 目的 | diff --git a/docs/395.md b/docs/395.md index 1536a77ed423aa0ed91a02c06941252a09960aed..c7d65b1715dc86e46c755ecf144677588529a053 100644 --- a/docs/395.md +++ b/docs/395.md @@ -88,11 +88,11 @@ pictureScrollPane.setMinimumSize(minimumSize); 现在您已经看到了分割窗格的默认行为,我们可以告诉您幕后发生了什么以及如何影响它。在本讨论中,当我们引用组件的首选或最小大小时,如果拆分窗格是水平的,则通常表示组件的首选或最小宽度;如果拆分窗格是垂直的,则通常表示其首选或最小高度。 -默认情况下,初始化拆分窗格的首选大小和分隔符位置,以便拆分窗格中的两个组件处于其首选大小。如果拆分窗格未以此首选大小显示且程序未明确设置分隔符的位置,则分隔符的初始位置(以及两个组件的大小)取决于分割窗格属性,称为 _ 调整体重 _。如果拆分窗格最初处于其首选大小或更大,则在调整调整大小权重之前,所包含的组件以其首选大小开始。如果拆分窗格最初太小而无法以其首选尺寸显示两个组件,则在调整调整大小权重之前,它们将以 _ 最小 _ 大小开始。 +默认情况下,初始化拆分窗格的首选大小和分隔符位置,以便拆分窗格中的两个组件处于其首选大小。如果拆分窗格未以此首选大小显示且程序未明确设置分隔符的位置,则分隔符的初始位置(以及两个组件的大小)取决于分割窗格属性,称为*调整体重*。如果拆分窗格最初处于其首选大小或更大,则在调整调整大小权重之前,所包含的组件以其首选大小开始。如果拆分窗格最初太小而无法以其首选尺寸显示两个组件,则在调整调整大小权重之前,它们将以*最小*大小开始。 拆分窗格的调整大小权重介于 0.0 和 1.0 之间,并确定在设置拆分窗格大小时如何在两个包含的组件之间分配空间 - 无论是以编程方式还是由用户调整拆分窗格大小(例如,放大其包含窗口) 。默认情况下,拆分窗格的调整大小为 0.0,表示左侧或顶部组件的大小是固定的,右侧或底部组件调整其大小以适合剩余空间。将调整大小权重设置为 0.5 会在两个组件之间平均分配任何额外或缺失的空间。将调整大小权重设置为 1.0 会使右侧或底部组件的大小保持固定。但是,当用户拖动分隔符时,调整大小权重不起作用。 -只要既不包含组件低于其最小尺寸,用户也可以将分隔线拖动到任何位置 _。如果分隔器具有单触按钮,则用户可以使用它们使分隔器完全移动到一侧或另一侧 - 无论组件的最小尺寸是多少。_ +只要既不包含组件低于其最小尺寸,用户也可以将分隔线拖动到任何位置*。如果分隔器具有单触按钮,则用户可以使用它们使分隔器完全移动到一侧或另一侧 - 无论组件的最小尺寸是多少。_ 现在您已了解影响拆分窗格大小和分隔符位置的因素,下面是一些使它们运行良好的规则: @@ -167,7 +167,7 @@ pictureScrollPane.setMinimumSize(minimumSize); 与 SplitPaneDemo 一样,SplitPaneDividerDemo 具有带单触按钮的水平分割窗格。 SplitPaneDividerDemo 具有以下附加功能: -* 分割窗格的 _ 调整大小权重 _ 被明确设置(为 0.5)。 +* 分割窗格的*调整大小权重*被明确设置(为 0.5)。 * 拆分窗格以其默认首选大小显示。 * 窗口底部的“重置”按钮调用拆分窗格上的`resetToPreferredSizes`。 * 拆分窗格中的组件是名为`SizeDisplayer`的自定义`JComponent`子类的实例。 `SizeDisplayer`在淡化(和可选)图像的背景下显示可选文本。更重要的是,它具有显示其首选和最小尺寸的矩形。 @@ -277,7 +277,7 @@ JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, [JSplitPane(int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#JSplitPane-int-) [JSplitPane(int,boolean)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#JSplitPane-int-boolean-) [JSplitPane(int,Component,Component )](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#JSplitPane-int-java.awt.Component-java.awt.Component-) -[JSplitPane(int,boolean,Component,Component)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#JSplitPane-int-boolean-java.awt.Component-java.awt.Component-) | 创建拆分窗格。如果存在,`int`参数指示分割窗格的方向,`HORIZONTAL_SPLIT`(默认值)或`VERTICAL_SPLIT`。 `boolean`参数(如果存在)设置组件是否在用户拖动拆分窗格时不断重新绘制。如果未指定,则关闭此选项(称为 _ 连续布局 _)。 `Component`参数分别设置初始左侧和右侧或顶部和底部组件。 | +[JSplitPane(int,boolean,Component,Component)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#JSplitPane-int-boolean-java.awt.Component-java.awt.Component-) | 创建拆分窗格。如果存在,`int`参数指示分割窗格的方向,`HORIZONTAL_SPLIT`(默认值)或`VERTICAL_SPLIT`。 `boolean`参数(如果存在)设置组件是否在用户拖动拆分窗格时不断重新绘制。如果未指定,则关闭此选项(称为*连续布局*)。 `Component`参数分别设置初始左侧和右侧或顶部和底部组件。 | | [void setOrientation(int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#setOrientation-int-) [int getOrientation()](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#getOrientation--) | 设置或获取拆分窗格的方向。使用`JSplitPane`中定义的`HORIZONTAL_SPLIT`或`VERTICAL_SPLIT`。如果未指定,则拆分窗格将水平拆分。 | | [void setDividerSize(int)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JSplitPane.html#setDividerSize-int-) diff --git a/docs/397.md b/docs/397.md index 12ba6052e997bff4adf42ebae6455b7387cdeb53..9fef2bd6452a1adfe730553374b3285fc20d44b8 100644 --- a/docs/397.md +++ b/docs/397.md @@ -142,11 +142,11 @@ for (int i = 0; i < 5; i++) { 如前面的代码所示,表中的每一列都由 [`TableColumn`](https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableColumn.html) 对象表示。 `TableColumn`为列的最小宽度,首选宽度和最大宽度提供 getter 和 setter 方法,以及获取当前宽度的方法。有关基于绘制单元格内容所需空间的近似值来设置单元格宽度的示例,请参阅 [`TableRenderDemo.java`](../examples/components/TableRenderDemoProject/src/components/TableRenderDemo.java) 中的`initColumnSizes`方法。 -当用户显式调整列的大小时,将设置列 _ 首选 _ 宽度,以便用户指定的大小成为列的新 _ 当前 _ 宽度。但是,当表本身被调整大小时 - 通常是因为窗口已调整大小 - ;列的首选宽度不会更改。相反,现有的首选宽度用于计算新的列宽以填充可用空间。 +当用户显式调整列的大小时,将设置列*首选*宽度,以便用户指定的大小成为列的新*当前*宽度。但是,当表本身被调整大小时 - 通常是因为窗口已调整大小 - ;列的首选宽度不会更改。相反,现有的首选宽度用于计算新的列宽以填充可用空间。 您可以通过调用 [`setAutoResizeMode`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#setAutoResizeMode-int-) 来更改表的调整大小行为。 -在其默认配置中,表支持由一行或多行组成的选择。用户可以选择连续的行范围或任意行集。用户指示的最后一个单元格获得特殊指示;在金属外观和感觉中,细胞被勾勒出来。该细胞被称为 _ 导联选择 _;它有时被称为“具有焦点的细胞”或“当前细胞”。 +在其默认配置中,表支持由一行或多行组成的选择。用户可以选择连续的行范围或任意行集。用户指示的最后一个单元格获得特殊指示;在金属外观和感觉中,细胞被勾勒出来。该细胞被称为*导联选择 _;它有时被称为“具有焦点的细胞”或“当前细胞”。 用户使用鼠标和/或键盘进行选择,如下表所述: @@ -211,7 +211,7 @@ String.format("Lead Selection: %d, %d. ", * * * -每个表对象都使用 _ 表模型对象 _ 来管理实际的表数据。表模型对象必须实现 [`TableModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableModel.html) 接口。如果程序员没有提供表模型对象,`JTable`会自动创建 [`DefaultTableModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/table/DefaultTableModel.html) 的实例。这种关系如下所示。 +每个表对象都使用*表模型对象*来管理实际的表数据。表模型对象必须实现 [`TableModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableModel.html) 接口。如果程序员没有提供表模型对象,`JTable`会自动创建 [`DefaultTableModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/table/DefaultTableModel.html) 的实例。这种关系如下所示。 ![Relation between table, table object, model object](img/d13dc5ee108d9a200acb4a4d5031c767.jpg) @@ -349,7 +349,7 @@ public class SimpleTableDemo ... implements TableModelListener { 在继续下面的几个任务之前,您需要了解表格如何绘制单元格。您可能希望表中的每个单元格都是一个组件。但是,出于性能原因,Swing 表的实现方式不同。 -相反,单个 _ 单元格渲染器 _ 通常用于绘制包含相同类型数据的所有单元格。您可以将渲染器视为可配置的墨迹标记,该表用于将适当格式化的数据标记到每个单元格上。当用户开始编辑单元格的数据时,_ 单元格编辑器 _ 接管单元格,控制单元格的编辑行为。 +相反,单个*单元格渲染器*通常用于绘制包含相同类型数据的所有单元格。您可以将渲染器视为可配置的墨迹标记,该表用于将适当格式化的数据标记到每个单元格上。当用户开始编辑单元格的数据时,*单元格编辑器*接管单元格,控制单元格的编辑行为。 例如,`TableDemo`中**#Years** 列中的每个单元格包含`Number`数据 - 特别是`Integer`对象。默认情况下,包含`Number`的列的单元格渲染器使用单个`JLabel`实例在列的单元格上绘制右对齐的相应数字。如果用户开始编辑其中一个单元格,则默认单元格编辑器使用右对齐`JTextField`来控制单元格编辑。 @@ -614,7 +614,7 @@ JTable table = new JTable(new MyTableModel()) { ``` -表格排序和过滤由 _ 分拣机 _ 对象管理。提供分拣机对象的最简单方法是将`autoCreateRowSorter`绑定属性设置为`true`: +表格排序和过滤由*分拣机*对象管理。提供分拣机对象的最简单方法是将`autoCreateRowSorter`绑定属性设置为`true`: ```java JTable table = new JTable(); @@ -672,7 +672,7 @@ sorter.setSortKeys(sortKeys); ``` -除了重新排序结果外,表格分类器还可以指定要显示的行。这被称为 _ 过滤 _。 `TableRowSorter`使用 [`javax.swing.RowFilter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/RowFilter.html) 对象实现过滤。 `RowFilter`实现了几种创建常见过滤器的工厂方法。例如, [`regexFilter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/RowFilter.html#regexFilter-java.lang.String-int...-) 返回基于[正则表达式](../../essential/regex/)过滤的`RowFilter`。 +除了重新排序结果外,表格分类器还可以指定要显示的行。这被称为*过滤*。 `TableRowSorter`使用 [`javax.swing.RowFilter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/RowFilter.html) 对象实现过滤。 `RowFilter`实现了几种创建常见过滤器的工厂方法。例如, [`regexFilter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/RowFilter.html#regexFilter-java.lang.String-int...-) 返回基于[正则表达式](../../essential/regex/)过滤的`RowFilter`。 在以下示例代码中,您显式创建了一个分类器对象,以便稍后使用它来指定过滤器: @@ -702,7 +702,7 @@ private void newFilter() { 在随后的示例中,每次文本字段更改时都会调用`newFilter()`。当用户输入复杂的正则表达式时,`try...catch`可防止语法异常干扰输入。 -当表使用分类器时,用户看到的数据的顺序可能与数据模型指定的顺序不同,并且可能不包括数据模型指定的所有行。用户实际看到的数据称为 _ 视图 _,并具有自己的坐标集。 `JTable`提供从模型坐标转换为视图坐标的方法 - [`convertColumnIndexToView`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertColumnIndexToView-int-) 和 [`convertRowIndexToView`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertRowIndexToView-int-) - 并且从视图坐标转换为模型坐标 - [`convertColumnIndexToModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertColumnIndexToModel-int-) 和 [`convertRowIndexToModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertRowIndexToModel-int-) 。 +当表使用分类器时,用户看到的数据的顺序可能与数据模型指定的顺序不同,并且可能不包括数据模型指定的所有行。用户实际看到的数据称为*视图*,并具有自己的坐标集。 `JTable`提供从模型坐标转换为视图坐标的方法 - [`convertColumnIndexToView`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertColumnIndexToView-int-) 和 [`convertRowIndexToView`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertRowIndexToView-int-) - 并且从视图坐标转换为模型坐标 - [`convertColumnIndexToModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertColumnIndexToModel-int-) 和 [`convertRowIndexToModel`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#convertRowIndexToModel-int-) 。 * * * @@ -867,7 +867,7 @@ table.setDefaultEditor(Integer.class, `IntegerEditor`类作为 [`DefaultCellEditor`](https://docs.oracle.com/javase/8/docs/api/javax/swing/DefaultCellEditor.html) 的子类实现,它使用`JFormattedTextField`而不是`DefaultCellEditor`支持的`JTextField`。它通过首先使用[如何使用格式化文本字段](formattedtextfield.html)中描述的 API 设置格式化文本字段以使用整数格式并具有指定的最小值和最大值来实现此目的。然后它覆盖`getTableCellEditorComponent`,`getCellEditorValue`和`stopCellEditing`方法的`DefaultCellEditor`实现,添加格式化文本字段所需的操作。 -在显示编辑器之前,`getTableCellEditorComponent`的覆盖设置格式化文本字段的 _ 值 _ 属性(而不仅仅是它从`JTextField`继承的 _ 文本 _ 属性)。 `getCellEditorValue`的覆盖将单元格值保持为`Integer`,而不是格式化文本字段的解析器倾向于返回的`Long`值。最后,覆盖`stopCellEditing`可以检查文本是否有效,可能会停止编辑器被解雇。如果文本无效,则`stopCellEditing`的实现会建立一个对话框,让用户可以选择继续编辑或恢复到最后一个好的值。这里包含的源代码有点太长了,但您可以在 [`IntegerEditor.java`](../examples/components/TableFTFEditDemoProject/src/components/IntegerEditor.java) 中找到它。 +在显示编辑器之前,`getTableCellEditorComponent`的覆盖设置格式化文本字段的*值*属性(而不仅仅是它从`JTextField`继承的*文本*属性)。 `getCellEditorValue`的覆盖将单元格值保持为`Integer`,而不是格式化文本字段的解析器倾向于返回的`Long`值。最后,覆盖`stopCellEditing`可以检查文本是否有效,可能会停止编辑器被解雇。如果文本无效,则`stopCellEditing`的实现会建立一个对话框,让用户可以选择继续编辑或恢复到最后一个好的值。这里包含的源代码有点太长了,但您可以在 [`IntegerEditor.java`](../examples/components/TableFTFEditDemoProject/src/components/IntegerEditor.java) 中找到它。 `JTable`为打印表提供了一个简单的 API。打印表的最简单方法是调用没有参数的 [`JTable.print`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTable.html#print--) : @@ -902,7 +902,7 @@ try { | 例 | 在哪里描述 | 笔记 | | :-- | :-- | :-- | -| [`SimpleTableDemo`](../examples/components/index.html#SimpleTableDemo) | [创建简单表](#simple) | 带 _ 无 _ 自定义模型的基本表。不包括[指定列宽](#width)或[检测用户编辑](#modelchange)的代码。 | +| [`SimpleTableDemo`](../examples/components/index.html#SimpleTableDemo) | [创建简单表](#simple) | 带*无*自定义模型的基本表。不包括[指定列宽](#width)或[检测用户编辑](#modelchange)的代码。 | | [`SimpleTable- SelectionDemo`](../examples/components/index.html#SimpleTableSelectionDemo) | [检测用户选择](#selection) | 将单选和检测添加到`SimpleTableDemo`。通过修改程序的`ALLOW_COLUMN_SELECTION`和`ALLOW_ROW_SELECTION`常量,您可以尝试使用表的默认选项,只允许选择行。 | | [`TableDemo`](../examples/components/index.html#TableDemo) | [创建表格模型](#data) | 带有自定义模型的基本表。 | diff --git a/docs/399.md b/docs/399.md index 2d34423743bdad1959cdf67a17b8e6e4ed468d2b..4a72eaaa4d644cd99606b52eed697c37e6a9b41c 100644 --- a/docs/399.md +++ b/docs/399.md @@ -55,7 +55,7 @@ public void actionPerformed(ActionEvent evt) { ``` -注意使用`JTextField`的`getText`方法来检索文本字段当前包含的文本。此方法返回的文本 _ 而不是 _ 包含触发操作事件的 Enter 键的换行符。 +注意使用`JTextField`的`getText`方法来检索文本字段当前包含的文本。此方法返回的文本*而不是*包含触发操作事件的 Enter 键的换行符。 您已经了解了如何使用基本文本字段。因为`JTextField`类继承自`JTextComponent`类,所以文本字段非常灵活,几乎可以按照您喜欢的方式进行自定义。例如,您可以添加文档监听器或文档过滤器以在文本更改时收到通知,并且在过滤器情况下,您可以相应地修改文本字段。有关文本组件的信息可在[文本组件功能](generaltext.html)中找到。但是,在自定义`JTextField`之前,请确保基于文本字段的其他[组件之一不会为您完成此任务。](#varieties) diff --git a/docs/40.md b/docs/40.md index 4dffe31ff9658ad9217a83fa0ea7a4865fe3bc07..a69cf4130de74e01aabb8eeb2ac04fa4a6cbdcae 100644 --- a/docs/40.md +++ b/docs/40.md @@ -92,7 +92,7 @@ Found 12 at 1, 0 ## `continue`声明 -`continue`语句跳过`for`,`while`或`do-while`循环的当前迭代。未标记的表单跳到最内层循环体的末尾,并评估控制循环的`boolean`表达式。以下程序 [`ContinueDemo`](examples/ContinueDemo.java) 逐步执行`String`,计算字母“p”的出现次数。如果当前字符不是 p,则`continue`语句将跳过循环的其余部分并继续执行下一个字符。如果 _ 是 _ a“p”,程序会增加字母数。 +`continue`语句跳过`for`,`while`或`do-while`循环的当前迭代。未标记的表单跳到最内层循环体的末尾,并评估控制循环的`boolean`表达式。以下程序 [`ContinueDemo`](examples/ContinueDemo.java) 逐步执行`String`,计算字母“p”的出现次数。如果当前字符不是 p,则`continue`语句将跳过循环的其余部分并继续执行下一个字符。如果*是 _ a“p”,程序会增加字母数。 ```java class ContinueDemo { diff --git a/docs/402.md b/docs/402.md index 55dfa66c64cbcd7c395087aecd9112e3d7eb3263..a55264a26839a9b49fa2d589cd2626f41504f6da 100644 --- a/docs/402.md +++ b/docs/402.md @@ -6,7 +6,7 @@ ![A tree](img/10d7e03195ae6386edd3cc62539c07cd.jpg) -如上图所示,`JTree`垂直显示其数据。树显示的每一行只包含一项数据,称为 _ 节点 _。每棵树都有一个 _ 根 _ 节点,所有节点都从该节点下降。默认情况下,树显示根节点,但您可以另行决定。节点可以有子节点。我们指的是可以生孩子的节点 - 无论他们当前 _ 是否有 _ 孩子 - 作为 _ 分支 _ 节点。不能生孩子的节点是 _leaf_ 节点。 +如上图所示,`JTree`垂直显示其数据。树显示的每一行只包含一项数据,称为*节点*。每棵树都有一个*根*节点,所有节点都从该节点下降。默认情况下,树显示根节点,但您可以另行决定。节点可以有子节点。我们指的是可以生孩子的节点 - 无论他们当前*是否有*孩子 - 作为*分支*节点。不能生孩子的节点是 _leaf_ 节点。 分支节点可以包含任意数量的子节点。通常,用户可以通过单击来展开和折叠分支节点 - 使其子项可见或不可见。默认情况下,除根节点以外的所有分支节点都会开始折叠。程序可以通过监听树扩展或树将扩展事件来检测分支节点的扩展状态的变化,如[如何编写树扩展监听器](../events/treeexpansionlistener.html)和[如何写树 - Will-Expand Listener](../events/treewillexpandlistener.html) 。 @@ -112,7 +112,7 @@ private void createNodes(DefaultMutableTreeNode top) { ``` -`DefaultMutableTreeNode`构造器的参数是 _ 用户对象 _,它是包含或指向与树节点关联的数据的对象。用户对象可以是字符串,也可以是自定义对象。如果实现自定义对象,则应实现其`toString`方法,以便返回要为该节点显示的字符串。默认情况下,JTree 使用从 toString 返回的值呈现每个节点,因此`toString`返回有意义的内容非常重要。有时,覆盖`toString`是不可行的;在这种情况下,您可以覆盖 JTree 的 convertValueToText,以将模型中的对象映射到显示的字符串中。 +`DefaultMutableTreeNode`构造器的参数是*用户对象*,它是包含或指向与树节点关联的数据的对象。用户对象可以是字符串,也可以是自定义对象。如果实现自定义对象,则应实现其`toString`方法,以便返回要为该节点显示的字符串。默认情况下,JTree 使用从 toString 返回的值呈现每个节点,因此`toString`返回有意义的内容非常重要。有时,覆盖`toString`是不可行的;在这种情况下,您可以覆盖 JTree 的 convertValueToText,以将模型中的对象映射到显示的字符串中。 例如,前面的代码片段中使用的`BookInfo`类是一个包含两个数据的自定义类:书的名称,以及描述该书的 HTML 文件的 URL。实现`toString`方法以返回书名。因此,与`BookInfo`对象相关联的每个节点显示书名。 @@ -302,7 +302,7 @@ class MyRenderer extends DefaultTreeCellRenderer { 您可能想知道单元格渲染器的工作原理。当树绘制每个节点时,`JTree`及其特定于外观的实现实际上都不包含绘制节点的代码。相反,树使用单元格渲染器的绘制代码来绘制节点。例如,要绘制具有字符串“The Java Programming Language”的叶节点,树会要求其单元格渲染器返回可以使用该字符串绘制叶节点的组件。如果单元格渲染器是`DefaultTreeCellRenderer`,则它返回一个标签,该标签绘制默认的叶子图标,后跟字符串。 -单元格渲染器仅绘制;它无法处理事件。如果要将事件处理添加到树中,则需要在树上注册处理器,或者,如果仅在选择节点时进行处理,则需要树的 _ 单元格编辑器 _。有关单元格编辑器的信息,请参阅[概念:编辑器和渲染器](table.html#editrender)。该部分讨论了表格单元格编辑器和渲染器,它们类似于树单元格编辑器和渲染器。 +单元格渲染器仅绘制;它无法处理事件。如果要将事件处理添加到树中,则需要在树上注册处理器,或者,如果仅在选择节点时进行处理,则需要树的*单元格编辑器*。有关单元格编辑器的信息,请参阅[概念:编辑器和渲染器](table.html#editrender)。该部分讨论了表格单元格编辑器和渲染器,它们类似于树单元格编辑器和渲染器。 下图显示了一个名为 DynamicTreeDemo 的应用程序,它允许您向可见树添加节点和从中删除节点。您还可以编辑每个节点中的文本。 @@ -583,7 +583,7 @@ _(在`TreeSelectionModel`中)_ | 设置或获取选择模式。该值可以 | 方法 | 目的 | | :-- | :-- | | [void addTreeExpansionListener(TreeExpansionListener)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTree.html#addTreeExpansionListener-javax.swing.event.TreeExpansionListener-) -[void addTreeWillExpandListener(TreeWillExpandListener)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTree.html#addTreeWillExpandListener-javax.swing.event.TreeWillExpandListener-) | 注册监听器以检测树节点 _ 何时 _ 展开或折叠,或 _ 将 _ 分别展开或折叠。要否决即将发生的扩张或崩溃,`TreeWillExpandListener`可以抛出`ExpandVetoException`。 | +[void addTreeWillExpandListener(TreeWillExpandListener)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTree.html#addTreeWillExpandListener-javax.swing.event.TreeWillExpandListener-) | 注册监听器以检测树节点*何时*展开或折叠,或*将*分别展开或折叠。要否决即将发生的扩张或崩溃,`TreeWillExpandListener`可以抛出`ExpandVetoException`。 | | [void expandPath(TreePath)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTree.html#expandPath-javax.swing.tree.TreePath-) [void collapsePath(TreePath)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTree.html#collapsePath-javax.swing.tree.TreePath-) | 展开或折叠指定的树路径。 | | [void scrollPathToVisible(TreePath)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTree.html#scrollPathToVisible-javax.swing.tree.TreePath-) | 确保路径指定的节点可见 - 引导它的路径已展开,节点位于滚动窗格的查看区域中。 | diff --git a/docs/404.md b/docs/404.md index 0e533da437807c23875c241cd96eca125b147083..2b37f60737c849cdeabb911f68ca88ecd7311425 100644 --- a/docs/404.md +++ b/docs/404.md @@ -10,7 +10,7 @@ 模型也有其他好处。它们意味着不会在程序的数据结构和 Swing 组件的数据结构之间复制数据。此外,模型会自动将更改传播到所有感兴趣的监听器,从而使 GUI 可以轻松地与数据保持同步。例如,要将项添加到列表,您可以调用列表模型上的方法。当模型的数据发生变化时,模型会将事件激发到`JList`和任何其他已注册的监听器,并相应地更新 GUI。 -虽然 Swing 的模型架构有时被称为模型 - 视图 - 控制器(MVC)设计,但实际上并非如此。通常实现 Swing 组件,使得视图和控制器是不可分割的,由外观提供的单个 UI 对象实现。 Swing 模型架构更准确地描述为 _ 可分离模型架构 _。如果您有兴趣了解有关 Swing 模型架构的更多信息,请参阅 [Swing 架构概述](http://www.oracle.com/technetwork/java/architecture-142923.html), _The Swing Connection_ 中的文章。 +虽然 Swing 的模型架构有时被称为模型 - 视图 - 控制器(MVC)设计,但实际上并非如此。通常实现 Swing 组件,使得视图和控制器是不可分割的,由外观提供的单个 UI 对象实现。 Swing 模型架构更准确地描述为*可分离模型架构*。如果您有兴趣了解有关 Swing 模型架构的更多信息,请参阅 [Swing 架构概述](http://www.oracle.com/technetwork/java/architecture-142923.html), _The Swing Connection_ 中的文章。 本节介绍一个名为 Converter 的示例,该应用程序可连续转换公制和美制单位之间的距离测量值。你可以[运行转换器](https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/ConverterProject/Converter.jnlp)([下载 JDK 7 或更高版本](http://www.oracle.com/technetwork/java/javase/downloads/index.html))。或者,要自己编译并运行示例,请参考[示例索引](../examples/components/index.html#Converter)。 diff --git a/docs/405.md b/docs/405.md index ea3b22a6a949e545f4559e716f2b193292db15ac..8d443388a2c8476a4958b90fd3978d043aa6097c 100644 --- a/docs/405.md +++ b/docs/405.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html](https://docs.oracle.com/javase/tutorial/uiswing/components/icon.html) -许多 Swing 组件,例如标签,按钮和标签窗格,都可以使用 _ 图标 _ 进行装饰 - 一个固定大小的图片。图标是符合 [`Icon`](https://docs.oracle.com/javase/8/docs/api/javax/swing/Icon.html) 接口的对象。 Swing 提供了`Icon`接口特别有用的实现: [`ImageIcon`](https://docs.oracle.com/javase/8/docs/api/javax/swing/ImageIcon.html) ,它从 GIF,JPEG 或 PNG 图像绘制图标。 +许多 Swing 组件,例如标签,按钮和标签窗格,都可以使用*图标*进行装饰 - 一个固定大小的图片。图标是符合 [`Icon`](https://docs.oracle.com/javase/8/docs/api/javax/swing/Icon.html) 接口的对象。 Swing 提供了`Icon`接口特别有用的实现: [`ImageIcon`](https://docs.oracle.com/javase/8/docs/api/javax/swing/ImageIcon.html) ,它从 GIF,JPEG 或 PNG 图像绘制图标。 这是一个带有三个标签的应用程序的快照,其中两个用图标装饰: @@ -211,7 +211,7 @@ if (imageURL != null) { 在此示例中,类文件和图像文件位于单独的 JAR 文件中。使用 XML `jar`标记指定 JAR 文件。 -* 设置`CLASSPATH`环境变量。最后一种方法是 _ 不推荐 _。如果未设置`CLASSPATH`,则默认使用当前目录(“。”)后跟 JRE 附带的系统类的位置。 +* 设置`CLASSPATH`环境变量。最后一种方法是*不推荐*。如果未设置`CLASSPATH`,则默认使用当前目录(“。”)后跟 JRE 附带的系统类的位置。 大多数 Swing Tutorial 示例将图像放在包含示例的类文件的目录下的`images`目录中。当我们为示例创建 JAR 文件时,我们保持相同的相对位置,尽管我们经常将类文件放在与图像 JAR 文件不同的 JAR 文件中。无论文件系统中的类和图像文件位于何处 - 在一个 JAR 文件中,在多个 JAR 文件中,在命名包中,还是在默认包中 - 相同的代码都使用`getResource`查找图像文件。 diff --git a/docs/408.md b/docs/408.md index b31b3561fcbc3ce7bbe1c4deca9094428bcbf9b8..35b439954caf1959398d29f81fe7d4bda3f6596a 100644 --- a/docs/408.md +++ b/docs/408.md @@ -24,7 +24,7 @@ e。一个容器,允许用户确定两个组件如何共享有限的空间量 4.您使用哪种方法来启用和禁用`JButton`等组件?它定义的是什么类? -5\. a。哪些 Swing 组件使用`ListSelectionModel`? [_ 提示:_ 每个接口和类的规范顶部的“使用”链接将您带到一个页面,显示 API 中引用该接口或类的位置。 +5\. a。哪些 Swing 组件使用`ListSelectionModel`? [_ 提示:*每个接口和类的规范顶部的“使用”链接将您带到一个页面,显示 API 中引用该接口或类的位置。 湾这些组件是否使用任何其他模型来处理组件状态的其他方面?如果是,请列出其他模型的类型。 diff --git a/docs/409.md b/docs/409.md index bccd5297fb669b992dead98d3ac3010a7b9e2d98..d4eca943d1de717bafb31ee95eb237a352261ea7 100644 --- a/docs/409.md +++ b/docs/409.md @@ -10,9 +10,9 @@ Swing 程序员处理以下类型的线程: -* _ 初始线程 _,执行初始应用程序代码的线程。 -* _ 事件调度线程 _,执行所有事件处理代码。大多数与 Swing 框架交互的代码也必须在此线程上执行。 -* _ 工作线程 _,也称为 _ 后台线程 _,执行耗时的后台任务。 +* _ 初始线程*,执行初始应用程序代码的线程。 +* _ 事件调度线程*,执行所有事件处理代码。大多数与 Swing 框架交互的代码也必须在此线程上执行。 +* _ 工作线程*,也称为*后台线程*,执行耗时的后台任务。 程序员不需要提供显式创建这些线程的代码:它们由运行时或 Swing 框架提供。程序员的工作是利用这些线程来创建响应式,可维护的 Swing 程序。 diff --git a/docs/41.md b/docs/41.md index efbcd9bdc136090ec5134ac83fd1b29daf603d97..e3038738f5cfc8aa16d71114f1da15b78d9c0a24 100644 --- a/docs/41.md +++ b/docs/41.md @@ -2,4 +2,4 @@ > 原文: [https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flowsummary.html](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flowsummary.html) -`if-then`语句是所有控制流语句中最基本的语句。只有当特定测试评估为`true`时,它才会告诉程序执行某段代码 _。当“if”子句求值为`false`时,`if-then-else`语句提供次要执行路径。与`if-then`和`if-then-else`不同,`switch`语句允许任意数量的可能执行路径。 `while`和`do-while`语句在特定条件为`true`时不断执行语句块。 `do-while`和`while`之间的区别在于`do-while`评估其在循环底部而不是顶部的表达式。因此,`do`块中的语句总是至少执行一次。 `for`语句提供了一种迭代一系列值的简洁方法。它有两种形式,其中一种用于循环集合和数组。_ \ No newline at end of file +`if-then`语句是所有控制流语句中最基本的语句。只有当特定测试评估为`true`时,它才会告诉程序执行某段代码*。当“if”子句求值为`false`时,`if-then-else`语句提供次要执行路径。与`if-then`和`if-then-else`不同,`switch`语句允许任意数量的可能执行路径。 `while`和`do-while`语句在特定条件为`true`时不断执行语句块。 `do-while`和`while`之间的区别在于`do-while`评估其在循环底部而不是顶部的表达式。因此,`do`块中的语句总是至少执行一次。 `for`语句提供了一种迭代一系列值的简洁方法。它有两种形式,其中一种用于循环集合和数组。_ \ No newline at end of file diff --git a/docs/410.md b/docs/410.md index 6b976df4ee69db6eabf58a47bbc9314078f323b6..7c24bdd053308de3530fa3c5ba92aa0c406271f6 100644 --- a/docs/410.md +++ b/docs/410.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) -每个程序都有一组应用程序逻辑开始的线程。在标准程序中,只有一个这样的线程:调用程序类的`main`方法的线程。在 applet 中,初始线程是构造 applet 对象并调用其`init`和`start`方法的线程;这些操作可能发生在单个线程上,也可能发生在两个或三个不同的线程上,具体取决于 Java 平台实现。在本课中,我们将这些线程称为 _ 初始线程 _。 +每个程序都有一组应用程序逻辑开始的线程。在标准程序中,只有一个这样的线程:调用程序类的`main`方法的线程。在 applet 中,初始线程是构造 applet 对象并调用其`init`和`start`方法的线程;这些操作可能发生在单个线程上,也可能发生在两个或三个不同的线程上,具体取决于 Java 平台实现。在本课中,我们将这些线程称为*初始线程*。 在 Swing 程序中,初始线程没有太多事情要做。他们最重要的工作是创建一个`Runnable`对象,初始化 GUI 并安排该对象在事件派发线程上执行。创建 GUI 后,程序主要由 GUI 事件驱动,每个事件都会导致在事件调度线程上执行短任务。应用程序代码可以在事件调度线程上调度附加任务(如果它们快速完成,以免干扰事件处理)或工作线程(对于长时间运行的任务)。 diff --git a/docs/412.md b/docs/412.md index d40ef25b081302fc943571995e7ea70271ec894c..0ef7b091b478e1913edf260e8bde786658b99ee4 100644 --- a/docs/412.md +++ b/docs/412.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) -当 Swing 程序需要执行长时间运行的任务时,它通常使用 _ 工作线程 _ 之一,也称为 _ 后台线程 _。在工作线程上运行的每个任务都由 [`javax.swing.SwingWorker`](https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingWorker.html) 的实例表示。 `SwingWorker`本身就是一个抽象类;你必须定义一个子类才能创建一个`SwingWorker`对象;匿名内部类通常用于创建非常简单的`SwingWorker`对象。 +当 Swing 程序需要执行长时间运行的任务时,它通常使用*工作线程*之一,也称为*后台线程*。在工作线程上运行的每个任务都由 [`javax.swing.SwingWorker`](https://docs.oracle.com/javase/8/docs/api/javax/swing/SwingWorker.html) 的实例表示。 `SwingWorker`本身就是一个抽象类;你必须定义一个子类才能创建一个`SwingWorker`对象;匿名内部类通常用于创建非常简单的`SwingWorker`对象。 `SwingWorker`提供了许多通信和控制功能: diff --git a/docs/413.md b/docs/413.md index 1bb9b70064aefc793dd5eccf185dc9ee9d7b6645..4d112f4e40dcd360220ea6cb97f313805eab5fda 100644 --- a/docs/413.md +++ b/docs/413.md @@ -46,7 +46,7 @@ SwingWorker worker = new SwingWorker() { 请注意,`SwingWorker`是一个泛型类,有两个类型参数。第一个类型参数指定`doInBackground`的返回类型,也指定`get`方法,由其他线程调用以检索`doInBackground`返回的对象。 `SwingWorker`的第二个类型参数指定后台任务仍处于活动状态时返回的中间结果的类型。由于此示例未返回中间结果,因此 [`Void`](https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html) 用作占位符。 -您可能想知道设置`imgs`的代码是否不必要地复杂化。为什么让`doInBackground`返回一个对象并使用`done`来检索它?为什么不直接设置`doInBackground` `imgs`?问题是对象`imgs`引用是在工作线程中创建的,并在事件派发线程中使用。以这种方式在线程之间共享对象时,必须确保在一个线程中进行的更改对另一个线程可见。使用`get`可以保证这一点,因为使用`get`会在创建`imgs`的代码与使用它的代码之间的关系之前创建 _。有关关系之前发生的更多信息,请参阅[并发](../../essential/concurrency/index.html)课程中的[内存一致性错误](../../essential/concurrency/memconsist.html)。_ +您可能想知道设置`imgs`的代码是否不必要地复杂化。为什么让`doInBackground`返回一个对象并使用`done`来检索它?为什么不直接设置`doInBackground` `imgs`?问题是对象`imgs`引用是在工作线程中创建的,并在事件派发线程中使用。以这种方式在线程之间共享对象时,必须确保在一个线程中进行的更改对另一个线程可见。使用`get`可以保证这一点,因为使用`get`会在创建`imgs`的代码与使用它的代码之间的关系之前创建*。有关关系之前发生的更多信息,请参阅[并发](../../essential/concurrency/index.html)课程中的[内存一致性错误](../../essential/concurrency/memconsist.html)。_ 实际上有两种方法可以检索`doInBackground`返回的对象。 diff --git a/docs/418.md b/docs/418.md index 4bbd0d3a016d013fe3353c35f5031ef6fce5f20d..0195fc258ebf6a1d43f5cf46d452e9d4ae59ff88 100644 --- a/docs/418.md +++ b/docs/418.md @@ -16,7 +16,7 @@ ## [如何用 JLayer](jlayer.html) 装饰组件 -`JLayer`是适用于 Swing 组件的灵活且功能强大的 _ 装饰器 _。它使您能够在不修改底层组件的情况下绘制组件并响应组件事件。 +`JLayer`是适用于 Swing 组件的灵活且功能强大的*装饰器*。它使您能够在不修改底层组件的情况下绘制组件并响应组件事件。 ## [如何使用行动](action.html) diff --git a/docs/421.md b/docs/421.md index 71b240a3a8b4debbb035922354fd12e90ca7b79b..3386f0d1deed60675ddbcac46e7fb2d143b450cb 100644 --- a/docs/421.md +++ b/docs/421.md @@ -2,7 +2,7 @@ > 原文: [https://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html](https://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html) -`JLayer`类是 Swing 组件的灵活且强大的 _ 装饰器 _。它使您能够在不修改底层组件的情况下绘制组件并响应组件事件。 +`JLayer`类是 Swing 组件的灵活且强大的*装饰器*。它使您能够在不修改底层组件的情况下绘制组件并响应组件事件。 本文档描述了显示`JLayer`类功能的示例。完整的源代码可用。 @@ -19,7 +19,7 @@ 视频需要支持 JavaScript 的 Web 浏览器和 Internet 连接。如果您看不到该视频,请尝试[在 YouTube](http://www.youtube.com/watch?v=6mQYsWCkx4g) 上观看。 -`javax.swing.JLayer`级是团队的一半。另一半是`javax.swing.plaf.LayerUI`级。假设你想在`JButton`对象上做一些自定义绘图(_ 装饰 _ `JButton`对象)。您要装饰的组件是 _ 目标 _。 +`javax.swing.JLayer`级是团队的一半。另一半是`javax.swing.plaf.LayerUI`级。假设你想在`JButton`对象上做一些自定义绘图(*装饰 _ `JButton`对象)。您要装饰的组件是*目标*。 * 创建目标组件。 * 创建`LayerUI`子类的实例以进行绘制。 diff --git a/docs/422.md b/docs/422.md index f24207f12ced6fcb1856dd9b6ddaecf92ce1b857..3c4899c27d4edea11d4c337a84224060d087b26e 100644 --- a/docs/422.md +++ b/docs/422.md @@ -44,7 +44,7 @@ class LeftAction extends AbstractAction { 当前面代码创建的操作附加到按钮和菜单项时,按钮和菜单项显示与操作关联的文本和图标。 `L`字符用于按钮和菜单项上的助记符,其工具提示文本设置为`SHORT_DESCRIPTION`字符串,后跟助记键的表示。 -例如,我们提供了一个简单的例子, [`ActionDemo.java`](../examples/misc/ActionDemoProject/src/misc/ActionDemo.java) ,它定义了三个动作。每个操作都附加到按钮和菜单项。由于为每个按钮的动作设置了助记符值,按键顺序`Alt-L`激活左按钮,`Alt-M`激活中间按钮,`Alt-R`激活右按钮。左按钮的工具提示显示 _ 这是左按钮。 ALT-L。_ 所有这些配置都会自动发生,而程序不会显式调用来设置助记符或工具提示文本。正如我们稍后将要展示的那样,程序 _ 会 _ 调用来设置按钮文本,但只是为了避免使用已经由动作设置的值。 +例如,我们提供了一个简单的例子, [`ActionDemo.java`](../examples/misc/ActionDemoProject/src/misc/ActionDemo.java) ,它定义了三个动作。每个操作都附加到按钮和菜单项。由于为每个按钮的动作设置了助记符值,按键顺序`Alt-L`激活左按钮,`Alt-M`激活中间按钮,`Alt-R`激活右按钮。左按钮的工具提示显示*这是左按钮。 ALT-L。*所有这些配置都会自动发生,而程序不会显式调用来设置助记符或工具提示文本。正如我们稍后将要展示的那样,程序*会*调用来设置按钮文本,但只是为了避免使用已经由动作设置的值。 ![A snapshot of ActionDemo, which uses actions to coordinate menus and buttons.](img/3a13aeb4435421e4b81ef2b78ccb2507.jpg) diff --git a/docs/424.md b/docs/424.md index d2cf092aa0776a873fb53a43ead9a60b31cad279..98e4455b86b9640c510aec3a5afcb6c15afded8d 100644 --- a/docs/424.md +++ b/docs/424.md @@ -347,23 +347,23 @@ class AccessibleRulerState extends AccessibleState { [getAccessibleContext()。setAccessibleDescription(String)](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/AccessibleContext.html#setAccessibleDescription-java.lang.String-) (`JComponent`或`Accessible`对象上的]) | 提供可访问对象的名称或描述。 | | [void setToolTipText(String)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#setToolTipText-java.lang.String-) -(`JComponent`中的 _)_ | 设置组件的工具提示。如果未设置描述,则许多可访问的上下文使用工具提示文本作为可访问的描述。 | +(`JComponent`中的*)_ | 设置组件的工具提示。如果未设置描述,则许多可访问的上下文使用工具提示文本作为可访问的描述。 | | [void setLabelFor(Component)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JLabel.html#setLabelFor-java.awt.Component-) -(`JLabel`中的 _)_ | 将标签与组件相关联。这告诉辅助技术标签描述另一个组件。 | +(`JLabel`中的*)_ | 将标签与组件相关联。这告诉辅助技术标签描述另一个组件。 | | [void setDescription(String)](https://docs.oracle.com/javase/8/docs/api/javax/swing/ImageIcon.html#setDescription-java.lang.String-) -(`ImageIcon`中的 _)_ | 提供图像图标的说明。 | +(`ImageIcon`中的*)_ | 提供图像图标的说明。 | | 接口或类 | 目的 | | :-- | :-- | | [可访问](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/Accessible.html) -(_ 接口 _) | 可以访问实现此接口的组件。 `JComponent`的子类必须明确地实现它。 | +(*接口*) | 可以访问实现此接口的组件。 `JComponent`的子类必须明确地实现它。 | | [AccessibleContext](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/AccessibleContext.html) [_JComponent_ .Accessible _JComponent_](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.AccessibleJComponent.html) -(_ 一个抽象类及其子类 _) | `AccessibleContext`定义可访问对象所需的最小信息集。每个 Swing 组件的可访问上下文是 this 的子类,并如图所示命名。例如,`JTree`的可访问上下文是`JTree.AccessibleJTree`。要提供自定义可访问的上下文,自定义组件应包含一个内部类,它是`AccessibleContext`的子类。有关更多信息,请参阅[使自定义组件可访问](#accessiblecomponents)。 | +(*一个抽象类及其子类*) | `AccessibleContext`定义可访问对象所需的最小信息集。每个 Swing 组件的可访问上下文是 this 的子类,并如图所示命名。例如,`JTree`的可访问上下文是`JTree.AccessibleJTree`。要提供自定义可访问的上下文,自定义组件应包含一个内部类,它是`AccessibleContext`的子类。有关更多信息,请参阅[使自定义组件可访问](#accessiblecomponents)。 | | [AccessibleRole](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/AccessibleRole.html) [AccessibleStateSet](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/AccessibleStateSet.html) -(_ 类 _) | 分别定义`AccessibleContext`对象的`getAccessibleRole`和`getAccessibleStateSet`方法返回的对象。 | +(*类*) | 分别定义`AccessibleContext`对象的`getAccessibleRole`和`getAccessibleStateSet`方法返回的对象。 | | [AccessibleRelation](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/AccessibleRelation.html) [AccessibleRelationSet](https://docs.oracle.com/javase/8/docs/api/javax/accessibility/AccessibleRelationSet.html) | 定义实现此接口的组件与一个或多个其他对象之间的关系。 | diff --git a/docs/425.md b/docs/425.md index 054ac2aa26aa967046cd365f3e839ea4e6b97a27..5248b636f7b188b63f75a8ec079bdf882142b45d 100644 --- a/docs/425.md +++ b/docs/425.md @@ -80,7 +80,7 @@ frame.addWindowFocusListener(new WindowAdapter() { * * * -`KeyboardFocusManager`是焦点子系统的关键元素。它管理状态并启动更改。键盘管理器跟踪 _ 焦点所有者 _ - 从键盘接收键入的组件。 _ 聚焦窗口 _ 是包含焦点所有者的窗口。 +`KeyboardFocusManager`是焦点子系统的关键元素。它管理状态并启动更改。键盘管理器跟踪*焦点所有者 _ - 从键盘接收键入的组件。*聚焦窗口*是包含焦点所有者的窗口。 * * * @@ -88,11 +88,11 @@ frame.addWindowFocusListener(new WindowAdapter() { * * * -_ 焦点循环 _(或 _ 焦点遍历循环 _)是一组在包含层次结构中共享共同祖先的组件。 _ 焦点循环根 _ 是作为特定焦点遍历循环的根的容器。默认情况下,每个`JWindow`和`JInternalFrame`组件都可以是焦点循环根。焦点循环根本身可以包含一个或多个焦点循环根。以下 Swing 对象可以是焦点循环根:`JApplet`,`JDesktopPane`,`JDialog`,`JEditorPane`,`JFrame`,`JInternalFrame`和`JWindow`。虽然可能看起来`JTable`和`JTree`对象是焦点循环根,但它们不是。 +_ 焦点循环*(或*焦点遍历循环*)是一组在包含层次结构中共享共同祖先的组件。*焦点循环根*是作为特定焦点遍历循环的根的容器。默认情况下,每个`JWindow`和`JInternalFrame`组件都可以是焦点循环根。焦点循环根本身可以包含一个或多个焦点循环根。以下 Swing 对象可以是焦点循环根:`JApplet`,`JDesktopPane`,`JDialog`,`JEditorPane`,`JFrame`,`JInternalFrame`和`JWindow`。虽然可能看起来`JTable`和`JTree`对象是焦点循环根,但它们不是。 -_ 焦点遍历策略 _ 确定一组组件的导航顺序。 Swing 提供 [``LayoutFocusTraversalPolicy``](https://docs.oracle.com/javase/8/docs/api/javax/swing/LayoutFocusTraversalPolicy.html)类,它根据布局管理器相关因素(如大小,位置和组件方向)决定导航顺序。在聚焦周期内,可以向前或向后导航组件。在焦点循环根的层次结构中,向上遍历将焦点从当前循环中移出到父循环中。 +_ 焦点遍历策略*确定一组组件的导航顺序。 Swing 提供 [``LayoutFocusTraversalPolicy``](https://docs.oracle.com/javase/8/docs/api/javax/swing/LayoutFocusTraversalPolicy.html)类,它根据布局管理器相关因素(如大小,位置和组件方向)决定导航顺序。在聚焦周期内,可以向前或向后导航组件。在焦点循环根的层次结构中,向上遍历将焦点从当前循环中移出到父循环中。 -在大多数外观和感觉模型中,使用 Tab 和 Shift-Tab 键导航组件。这些键是默认的 _ 焦点遍历键 _,可以通过编程方式进行更改。例如,您可以使用以下四行代码添加 Enter 作为前向焦点遍历键: +在大多数外观和感觉模型中,使用 Tab 和 Shift-Tab 键导航组件。这些键是默认的*焦点遍历键*,可以通过编程方式进行更改。例如,您可以使用以下四行代码添加 Enter 作为前向焦点遍历键: ```java Set forwardKeys = getFocusTraversalKeys( @@ -104,7 +104,7 @@ setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, ``` -Tab 将焦点向前移动。 Shift-Tab 向后移动焦点。例如,在 FocusConceptsDemo 中,第一个按钮具有初始焦点。 Tabbing 将焦点通过按钮移动到文本区域。附加标签将光标移动到文本区域内,但不会移出文本区域,因为在文本区域内,Tab 是 _ 而不是 _ 焦点遍历键。但是,Control-Tab 将焦点移出文本区域并移动到第一个文本字段中。同样,Control-Shift-Tab 将焦点移出文本区域并移动到上一个组件中。约定使用 Control 键将焦点移出任何以特殊方式处理 Tab 的组件,例如`JTable`。 +Tab 将焦点向前移动。 Shift-Tab 向后移动焦点。例如,在 FocusConceptsDemo 中,第一个按钮具有初始焦点。 Tabbing 将焦点通过按钮移动到文本区域。附加标签将光标移动到文本区域内,但不会移出文本区域,因为在文本区域内,Tab 是*而不是*焦点遍历键。但是,Control-Tab 将焦点移出文本区域并移动到第一个文本字段中。同样,Control-Shift-Tab 将焦点移出文本区域并移动到上一个组件中。约定使用 Control 键将焦点移出任何以特殊方式处理 Tab 的组件,例如`JTable`。 您刚刚收到了焦点架构的简要介绍。如果您需要更多详细信息,请参阅[焦点子系统](https://docs.oracle.com/javase/8/docs/api/java/awt/doc-files/FocusSpec.html)的规格。 @@ -498,7 +498,7 @@ public void actionPerformed(ActionEvent e) { ``` -在这种情况下,在离开“开始”按钮之前,请在“取消”按钮上请求焦点。对`requestFocusInWindow`方法的调用会启动焦点传输,但不会立即将焦点移动到“取消”按钮。当禁用“开始”按钮时,焦点将转移到下一个组件(因此始终有一个具有焦点的组件),在这种情况下,它会将焦点移动到文本字段,_ 而不是 _ 到取消按钮。 +在这种情况下,在离开“开始”按钮之前,请在“取消”按钮上请求焦点。对`requestFocusInWindow`方法的调用会启动焦点传输,但不会立即将焦点移动到“取消”按钮。当禁用“开始”按钮时,焦点将转移到下一个组件(因此始终有一个具有焦点的组件),在这种情况下,它会将焦点移动到文本字段,*而不是*到取消按钮。 在可能影响焦点的所有其他更改适用于以下情况之后,您需要在几种情况下进行焦点请求: @@ -522,7 +522,7 @@ public void actionPerformed(ActionEvent e) { | [isFocusOwner()](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#isFocusOwner--) | 如果组件是焦点所有者,则返回`true`。 | | [setRequestFocusEnabled(boolean)](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#setRequestFocusEnabled-boolean-) [isRequestFocusEnabled()](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComponent.html#isRequestFocusEnabled--) -(`JComponent`中的 _)_ | 设置或检查此组件是否应该获得焦点。将`setRequestFocusEnabled`设置为`false`通常可以防止鼠标单击为组件提供焦点,同时仍允许键盘导航为组件提供焦点。此方法仅适用于接收鼠标事件的组件。例如,您可以在`JButton`上使用此方法,但不能在`JPanel`上使用此方法。如果您编写自定义组件,则由您来尊重此属性。建议使用`setFocusable`方法,这种方法可以让您的程序更好地适用于使用[辅助技术](access.html)的用户。 | +(`JComponent`中的*)_ | 设置或检查此组件是否应该获得焦点。将`setRequestFocusEnabled`设置为`false`通常可以防止鼠标单击为组件提供焦点,同时仍允许键盘导航为组件提供焦点。此方法仅适用于接收鼠标事件的组件。例如,您可以在`JButton`上使用此方法,但不能在`JPanel`上使用此方法。如果您编写自定义组件,则由您来尊重此属性。建议使用`setFocusable`方法,这种方法可以让您的程序更好地适用于使用[辅助技术](access.html)的用户。 | | [setFocusable(boolean)](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#setFocusable-boolean-) [isFocusable()](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#isFocusable--) | 设置或获取组件的可聚焦状态。组件必须是可聚焦的才能获得焦点。使用`setFocusable(false)`从焦点循环中删除组件时,无法再使用键盘导航组件。建议使用`setRequestFocusEnabled`方法,以便您的程序可以由使用[辅助技术](access.html)的用户运行。 | | [requestFocusInWindow()](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#requestFocusInWindow--) | 请求此组件应获得焦点。组件的窗口必须是当前聚焦的窗口。对于此请求,`JComponent`的子类必须是可见的,启用的和可聚焦的,并且具有要授予此请求的输入映射。在发生`FOCUS_GAINED`事件之前,不应该假设组件具有焦点。该方法优于`requestFocus`方法,该方法是平台相关的。 | @@ -537,19 +537,19 @@ public void actionPerformed(ActionEvent e) { | [getComponentAfter(Container,Component)](https://docs.oracle.com/javase/8/docs/api/javax/swing/LayoutFocusTraversalPolicy.html#getComponentAfter-java.awt.Container-java.awt.Component-) | 给定作为输入传递的组件,返回下一个应该具有焦点的组件。 | | [getComponentBefore(Container,Component)](https://docs.oracle.com/javase/8/docs/api/javax/swing/LayoutFocusTraversalPolicy.html#getComponentBefore-java.awt.Container-java.awt.Component-) | 给定作为输入传递的组件,返回应该在此组件之前具有焦点的组件。该方法用于反向标签。 | | [getDefaultComponent(Container)](https://docs.oracle.com/javase/8/docs/api/javax/swing/SortingFocusTraversalPolicy.html#getDefaultComponent-java.awt.Container-) -(`javax.swing.SortingFocusTraversalPolicy`中的 _)_ | 返回应具有默认焦点的组件。 | +(`javax.swing.SortingFocusTraversalPolicy`中的*)_ | 返回应具有默认焦点的组件。 | | [getFirstComponent(Container)](https://docs.oracle.com/javase/8/docs/api/javax/swing/LayoutFocusTraversalPolicy.html#getFirstComponent-java.awt.Container-) | 返回遍历循环中的第一个组件。 | | [getInitialComponent(Container)](https://docs.oracle.com/javase/8/docs/api/javax/swing/InternalFrameFocusTraversalPolicy.html#getInitialComponent-java.awt.Container-) | 当窗口第一次可见时,返回应该接收焦点的组件。 | | [getLastComponent(Container)](https://docs.oracle.com/javase/8/docs/api/javax/swing/LayoutFocusTraversalPolicy.html#getLastComponent-java.awt.Container-) | 返回遍历循环中的最后一个组件。 | | [setFocusTraversalPolicy(FocusTraversalPolicy)](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#setFocusTraversalPolicy-java.awt.FocusTraversalPolicy-) [getFocusTraversalPolicy(FocusTraversalPolicy)](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#getFocusTraversalPolicy--) -(`java.awt.Container`中的 _)_ | 设置或获取焦点遍历策略或确定是否已设置策略。请注意,在不是焦点循环根的容器上设置焦点遍历策略可能没有明显的效果。值`null`表示尚未明确设置策略。如果未设置策略,则从父焦点循环根继承策略。 | +(`java.awt.Container`中的*)_ | 设置或获取焦点遍历策略或确定是否已设置策略。请注意,在不是焦点循环根的容器上设置焦点遍历策略可能没有明显的效果。值`null`表示尚未明确设置策略。如果未设置策略,则从父焦点循环根继承策略。 | | [isFocusCycleRoot()](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#isFocusCycleRoot--) [setFocusCycleRoot(boolean)](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#setFocusCycleRoot-boolean-) -(`java.awt.Container`中的 _)_ | 检查或设置容器是否是焦点遍历循环的根。 | +(`java.awt.Container`中的*)_ | 检查或设置容器是否是焦点遍历循环的根。 | | [isFocusTraversalPolicyProvider()](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#isFocusTraversalPolicyProvider--) [setFocusTraversalPolicyProvider(boolean)](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#setFocusTraversalPolicyProvider-boolean-) -(`java.awt.Container`中的 _)_ | 检查或设置是否将使用容器来提供焦点遍历策略。 | +(`java.awt.Container`中的*)_ | 检查或设置是否将使用容器来提供焦点遍历策略。 | | 类或方法 | 目的 | | :-- | :-- | diff --git a/docs/426.md b/docs/426.md index 981a131607bff18c07f1e397973844dfb3aee253..371acaf9f71d7bc7b376052dbebf4174a12d2878 100644 --- a/docs/426.md +++ b/docs/426.md @@ -52,7 +52,7 @@ The component's window either has the focus or contains the component that has t 让我们考虑在两个典型的键绑定情况下会发生什么:一个响应 Space 键的按钮,以及一个带有对 Enter 键作出反应的默认按钮的帧。 -在第一种情况下,假设用户在`JButton`具有键盘焦点时按下 Space 键。首先,按钮的键监听器会收到事件通知。假设没有任何键监听器 _ 消耗 _ 事件(通过调用`KeyEvent`上的 [`consume`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/InputEvent.html#consume--) 方法),则查看按钮的`WHEN_FOCUSED`输入映射。找到绑定是因为`JButton`使用该输入映射将 Space 绑定到操作名称。在按钮的动作映射中查找动作名称,并调用动作的`actionPerformed`方法。 `KeyEvent`被消耗,处理停止。 +在第一种情况下,假设用户在`JButton`具有键盘焦点时按下 Space 键。首先,按钮的键监听器会收到事件通知。假设没有任何键监听器*消耗*事件(通过调用`KeyEvent`上的 [`consume`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/InputEvent.html#consume--) 方法),则查看按钮的`WHEN_FOCUSED`输入映射。找到绑定是因为`JButton`使用该输入映射将 Space 绑定到操作名称。在按钮的动作映射中查找动作名称,并调用动作的`actionPerformed`方法。 `KeyEvent`被消耗,处理停止。 在第二种情况下,假设在焦点位于具有默认按钮的帧内的任何位置时按下 Enter 键(使用`JRootPane` [`setDefaultButton`](https://docs.oracle.com/javase/8/docs/api/javax/swing/JRootPane.html#setDefaultButton-javax.swing.JButton-) 方法设置)。无论焦点组件是什么,其关键听众都会首先得到通知。假设它们都没有消耗关键事件,则咨询聚焦组件的`WHEN_FOCUSED`输入映射。如果它没有绑定键或禁用绑定到键的 Action,则查询焦点组件的`WHEN_ANCESTOR_OF_FOCUSED_COMPONENT`输入映射,然后(如果未找到绑定或禁用绑定到该键的 Action)`WHEN_ANCESTOR_OF_FOCUSED_COMPONENT`包含层次结构中每个组件的祖先的输入映射。最终,搜索根窗格的`WHEN_ANCESTOR_OF_FOCUSED_COMPONENT`输入映射。由于该输入映射具有 Enter 的有效绑定,因此将执行该操作,从而导致单击默认按钮。 diff --git a/docs/427.md b/docs/427.md index b7461373ee0298b4a20f154634d7699b2f4f6503..d1c96a5af261ae5099337a2f1bd1118d22b7727a 100644 --- a/docs/427.md +++ b/docs/427.md @@ -21,7 +21,7 @@ Java SE 6 支持以下模态类型: 此外,您可以设置模态排除模式: -* **排除模式** - 任何顶级窗口都可以标记为不被模态对话框阻止。此属性使您可以设置 _ 模态排除 _ 模式。 `Dialog.ModalExclusionType`枚举指定了可能的模态排除类型。 +* **排除模式** - 任何顶级窗口都可以标记为不被模态对话框阻止。此属性使您可以设置*模态排除*模式。 `Dialog.ModalExclusionType`枚举指定了可能的模态排除类型。 * * * @@ -48,7 +48,7 @@ Click the image to view it at its natural size._ * 经典(排除框架) 3. 切换到 Book 1 框架并选择书籍的传记标题,然后选择确定。 4. 传记标题将显示在对话框的标题中。在文本字段中输入名称,例如“John”。 -5. 切换到 Book 1 框架并将标题更改为 Funny Tale,然后选择 OK。由于输入名称的对话框是 _ 无模式 _,因此您可以轻松切换到其 _ 父 _ 帧。 +5. 切换到 Book 1 框架并将标题更改为 Funny Tale,然后选择 OK。由于输入名称的对话框是*无模式*,因此您可以轻松切换到其*父*帧。 * * * diff --git a/docs/435.md b/docs/435.md index c2cef1affea9a9230efb75ce20bcf8674d3b6be2..7306bdfdd0137da487b866a9ff3a2f6f530b1220 100644 --- a/docs/435.md +++ b/docs/435.md @@ -39,7 +39,7 @@ contentPane.setLayout(new FlowLayout()); ``` -虽然我们 _ 强烈建议您使用布局管理器 _,但您可以在没有它们的情况下执行布局。通过将容器的布局属性设置为 null,可以使容器不使用布局管理器。使用这种称为 _ 绝对定位 _ 的策略,您必须指定该容器中每个组件的大小和位置。绝对定位的一个缺点是,当调整顶层容器的大小时,它不能很好地调整。它也不能很好地适应用户和系统之间的差异,例如不同的字体大小和[语言环境](../../i18n/locale/index.html)。 +虽然我们*强烈建议您使用布局管理器*,但您可以在没有它们的情况下执行布局。通过将容器的布局属性设置为 null,可以使容器不使用布局管理器。使用这种称为*绝对定位*的策略,您必须指定该容器中每个组件的大小和位置。绝对定位的一个缺点是,当调整顶层容器的大小时,它不能很好地调整。它也不能很好地适应用户和系统之间的差异,例如不同的字体大小和[语言环境](../../i18n/locale/index.html)。 将组件添加到面板或内容窗格时,为`add`方法指定的参数取决于面板或内容窗格正在使用的布局管理器。事实上,一些布局管理器甚至不要求您明确添加组件;例如,`GroupLayout`。例如,`BorderLayout`要求您使用以下代码指定应添加组件的区域(使用`BorderLayout`中定义的常量之一): diff --git a/docs/436.md b/docs/436.md index 427fb92e662d48843a07e100e2fd6ed0abcee59b..c0c86bc3b22dadf71211a38bcd6c84381047722c 100644 --- a/docs/436.md +++ b/docs/436.md @@ -18,7 +18,7 @@ 布局管理器根据提供的约束,容器的属性(例如 insets)以及子项的最小/首选/最大大小来执行此操作。如果一个孩子本身就是一个容器,那么它自己的布局管理器用于获得它的最小/首选/最大尺寸并将其布置出来。 -2. 容器可以是 _ 有效 _(即,`isValid()`返回 true)或 _ 无效 _。要使容器有效,所有容器的子容器必须已经布局并且必须全部有效。 [`Container.validate`](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#validate--) 方法可用于验证无效容器。此方法触发容器和组件层次结构中所有子容器的布局,并将此容器标记为有效。 +2. 容器可以是*有效*(即,`isValid()`返回 true)或*无效*。要使容器有效,所有容器的子容器必须已经布局并且必须全部有效。 [`Container.validate`](https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#validate--) 方法可用于验证无效容器。此方法触发容器和组件层次结构中所有子容器的布局,并将此容器标记为有效。 3. 创建组件后,默认情况下它处于无效状态。 [`Window.pack`](https://docs.oracle.com/javase/8/docs/api/java/awt/Window.html) 方法验证窗口并首次布置窗口的组件层次结构。 diff --git a/docs/439.md b/docs/439.md index 89d13e187c93660c5615f020aa51a45e9612064a..87d6eae56ad7836ed55d3138fef3ebc719c02227 100644 --- a/docs/439.md +++ b/docs/439.md @@ -61,9 +61,9 @@ contentPane.add(buttonPane, BorderLayout.PAGE_END); 第一个粗线创建一个从上到下的框布局,并将其设置为`listPane`的布局管理器。 `BoxLayout`构造器的两个参数是它管理的容器以及组件将沿其布置的轴。 `PAGE_AXIS`常量指定组件应按照目标容器的`ComponentOrientation`属性确定的行在页面上流动的方向布置。 `LINE_AXIS`常量指定组件应按照目标容器的`ComponentOrientation`属性确定的文本行方向布局。这些常量允许国际化,通过在容器中布置组件,使用正确的从左到右,从右到左或从上到下的方向。 -接下来的三行粗线将标签和滚动窗格添加到容器中,将它们与 _ 刚性区域 _ 分开 - 这是一个用于在组件之间添加空间的不可见组件。在这种情况下,刚性区域没有宽度,并在标签和滚动窗格之间放置 5 个像素。稍后将在[使用不可见组件作为填充物](#filler)中讨论刚性区域。 +接下来的三行粗线将标签和滚动窗格添加到容器中,将它们与*刚性区域*分开 - 这是一个用于在组件之间添加空间的不可见组件。在这种情况下,刚性区域没有宽度,并在标签和滚动窗格之间放置 5 个像素。稍后将在[使用不可见组件作为填充物](#filler)中讨论刚性区域。 -下一个粗体代码块创建一个从左到右的框布局,并为`buttonPane`容器设置它。然后代码将两个按钮添加到容器中,使用刚性区域在按钮之间放置 10 个像素。要将按钮放在容器的右侧,添加到容器中的第一个组件是 _ 胶水 _。这种胶水是一种不可见的成分,可以根据需要生长,以吸收容器中的任何额外空间。在[使用不可见组分作为填料](#filler)中讨论了胶水。 +下一个粗体代码块创建一个从左到右的框布局,并为`buttonPane`容器设置它。然后代码将两个按钮添加到容器中,使用刚性区域在按钮之间放置 10 个像素。要将按钮放在容器的右侧,添加到容器中的第一个组件是*胶水*。这种胶水是一种不可见的成分,可以根据需要生长,以吸收容器中的任何额外空间。在[使用不可见组分作为填料](#filler)中讨论了胶水。 作为使用隐形组件的替代方法,您有时可以使用空边框在组件周围创建空间,尤其是面板。例如,前面的代码片段使用空边框在对话框的所有边和其内容之间以及内容的两个部分之间放置 10 个像素。边框完全独立于布局管理器。它们只是 Swing 组件如何绘制边缘并在组件内容和边缘之间提供填充。有关详细信息,请参阅[如何使用边框](../components/border.html)。 diff --git a/docs/440.md b/docs/440.md index 1a1e0aaaf42e5151d83245e886c5e324c45c0b3b..ce9b11493a2052bdbbf6aa64e4cca40d6fec4c6b 100644 --- a/docs/440.md +++ b/docs/440.md @@ -97,10 +97,10 @@ public void itemStateChanged(ItemEvent evt) { | 方法 | 目的 | | --- | --- | -| 首先 [`(容器 _ 父 _)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#first-java.awt.Container-) | 翻转到容器的第一张卡片。 | -| [`下一个(容器 _ 父 _)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#next-java.awt.Container-) | 翻转到容器的下一张卡片。如果当前可见的卡是最后一张,则此方法将翻转到布局中的第一张卡。 | +| 首先 [`(容器*父*)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#first-java.awt.Container-) | 翻转到容器的第一张卡片。 | +| [`下一个(容器*父*)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#next-java.awt.Container-) | 翻转到容器的下一张卡片。如果当前可见的卡是最后一张,则此方法将翻转到布局中的第一张卡。 | | [`previous(Container _parent_ )`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#previous-java.awt.Container-) | 翻转到容器的上一张卡片。如果当前可见的卡是第一张,则此方法将翻转到布局中的最后一张卡。 | -| [`最后(容器 _ 父 _)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#last-java.awt.Container-) | 翻转到容器的最后一张卡片。 | -| [`显示(容器 _ 父 _,字符串 _ 名称 _)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#show-java.awt.Container-java.lang.String-) | 使用 [`addLayoutComponent`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#addLayoutComponent-java.awt.Component-java.lang.Object-) 方法翻转到使用指定的`name`添加到此布局的组件。 | +| [`最后(容器*父*)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#last-java.awt.Container-) | 翻转到容器的最后一张卡片。 | +| [`显示(容器*父*,字符串*名称*)`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#show-java.awt.Container-java.lang.String-) | 使用 [`addLayoutComponent`](https://docs.oracle.com/javase/8/docs/api/java/awt/CardLayout.html#addLayoutComponent-java.awt.Component-java.lang.Object-) 方法翻转到使用指定的`name`添加到此布局的组件。 | 此路径中只有一个示例使用`CardLayout`,这是 [`CardLayoutDemo`](../examples/layout/index.html#CardLayoutDemo) 。通常,我们的示例使用[选项卡式窗格](../components/tabbedpane.html)而不是`CardLayout`,因为选项卡式窗格提供了自己的 GUI。 \ No newline at end of file diff --git a/docs/442.md b/docs/442.md index a33d74dca5a73c191aaf0d63ceb120a1933230d5..e77a3c690148bb6cf0f8c7893f630bbbe16c1bcf 100644 --- a/docs/442.md +++ b/docs/442.md @@ -30,7 +30,7 @@ GridBagDemo 的代码位于 [`GridBagLayoutDemo.java`](../examples/layout/GridBa ![GridBagLayout shown after the user enlarged it.](img/65e683c9f8038d8f109f74e261118613.jpg) -程序指定其组件的大小和位置特征的方式是通过为每个组件指定 _ 约束 _。设置组件约束的首选方法是使用`Container.add`变量,将`GridBagConstraints`对象传递给它,如下一节所示。 +程序指定其组件的大小和位置特征的方式是通过为每个组件指定*约束*。设置组件约束的首选方法是使用`Container.add`变量,将`GridBagConstraints`对象传递给它,如下一节所示。 以下部分介绍了您可以设置的约束并提供示例。 @@ -204,7 +204,7 @@ However, we recommend you use the `Container.add` method since it makes for clea * * * -这是一个表格,显示 GridBagLayoutDemo 内容窗格中每个组件的所有约束。非默认值以**粗体**标记。与上一个表条目中的值不同的值标记在 _ 斜体 _ 中。 +这是一个表格,显示 GridBagLayoutDemo 内容窗格中每个组件的所有约束。非默认值以**粗体**标记。与上一个表条目中的值不同的值标记在*斜体*中。 | 零件 | 约束 | | :-- | :-- | diff --git a/docs/443.md b/docs/443.md index 466760a610c9e414e6e2bc9a445c1a1623acac6a..ce768934e47fa0b4b7768def823afc5f7db033a0 100644 --- a/docs/443.md +++ b/docs/443.md @@ -66,8 +66,8 @@ applyButton.addActionListener(new ActionListener(){ The `GridLayout` class constructors | 构造器 | 目的 | | --- | --- | -| [`GridLayout(int _ 行 _,int _cols_ )`](https://docs.oracle.com/javase/8/docs/api/java/awt/GridLayout.html#GridLayout-int-int-) | 创建具有指定行数和列数的网格布局。布局中的所有组件都具有相同的大小。 `rows`和`cols`中的一个(但不是两个)可以为零,这意味着可以将任意数量的对象放置在行中或列中。 | -| [`GridLayout(int _ 行 _,int _cols_ ,int _hgap_ ,int _vgap_ )`](https://docs.oracle.com/javase/8/docs/api/java/awt/GridLayout.html#GridLayout-int-int-int-int-) | 创建具有指定行数和列数的网格布局。此外,水平和垂直间隙设置为指定值。水平间隙是每列之间的位置。在每行之间放置垂直间隙。 | +| [`GridLayout(int _ 行*,int _cols_ )`](https://docs.oracle.com/javase/8/docs/api/java/awt/GridLayout.html#GridLayout-int-int-) | 创建具有指定行数和列数的网格布局。布局中的所有组件都具有相同的大小。 `rows`和`cols`中的一个(但不是两个)可以为零,这意味着可以将任意数量的对象放置在行中或列中。 | +| [`GridLayout(int _ 行*,int _cols_ ,int _hgap_ ,int _vgap_ )`](https://docs.oracle.com/javase/8/docs/api/java/awt/GridLayout.html#GridLayout-int-int-int-int-) | 创建具有指定行数和列数的网格布局。此外,水平和垂直间隙设置为指定值。水平间隙是每列之间的位置。在每行之间放置垂直间隙。 | `GridLayout`类有两个构造器: diff --git a/docs/444.md b/docs/444.md index 541255b94e54789d147b0933354a6958273f34b5..17047ee6d076c662ae53507869ce12741b840b80 100644 --- a/docs/444.md +++ b/docs/444.md @@ -14,7 +14,7 @@ ## 设计原则:独立尺寸 -`GroupLayout`分别与水平和垂直布局配合使用。为每个维度单独定义布局。在定义 _ 水平 _ 布局时,您不必担心 _ 垂直 _ 尺寸,反之亦然,因为沿每个轴的布局完全独立于沿另一个轴的布局。 +`GroupLayout`分别与水平和垂直布局配合使用。为每个维度单独定义布局。在定义*水平*布局时,您不必担心*垂直*尺寸,反之亦然,因为沿每个轴的布局完全独立于沿另一个轴的布局。 当只关注一个维度时,您只需要同时解决一半问题。这比一次处理两个维度更容易。当然,这意味着每个组件需要在布局中定义两次。如果忘记这样做,`GroupLayout`将生成异常。 @@ -41,11 +41,11 @@ ![Three components in a row.](img/c0364203d2c614f1ed99fbff31523fd5.jpg) -我们将使用组来表达此布局。从水平轴开始,很容易看到从左到右排列有 3 个组件的 _ 顺序组 _。沿着垂直轴,存在相同 3 个组件的 _ 平行组 _,具有相同的位置,大小和基线: +我们将使用组来表达此布局。从水平轴开始,很容易看到从左到右排列有 3 个组件的*顺序组*。沿着垂直轴,存在相同 3 个组件的*平行组*,具有相同的位置,大小和基线: ![groups1a.](img/7a88ae2eebefccbb96a565088e01677b.jpg) -在伪代码中,布局规范可能如下所示(实际代码位于下面的 _ 编写代码 _ 部分): +在伪代码中,布局规范可能如下所示(实际代码位于下面的*编写代码*部分): ```java horizontal layout = sequential group { c1, c2, c3 } @@ -77,13 +77,13 @@ vertical layout = sequential group { parallel group (BASELINE) { c1, c2, c3 }, c 间隙可以被认为是一定大小的不可见组件。任意大小的间隙可以像组件或其他组一样添加到组中。使用间隙可以精确控制组件之间或容器边界之间的距离。 -`GroupLayout`还定义 _ 自动 _ 间隙,这些间隙对应于相邻组件之间(或组件和容器边界之间)的 _ 首选距离 _。这种间隙的大小是根据应用程序使用的外观动态计算的(`LayoutStyle`类用于此)。使用自动(首选)间隙有两个优点:您不必指定间隙的像素大小,它们会自动调整 UI 运行的外观,反映实际的外观和感觉指南。 +`GroupLayout`还定义*自动*间隙,这些间隙对应于相邻组件之间(或组件和容器边界之间)的*首选距离*。这种间隙的大小是根据应用程序使用的外观动态计算的(`LayoutStyle`类用于此)。使用自动(首选)间隙有两个优点:您不必指定间隙的像素大小,它们会自动调整 UI 运行的外观,反映实际的外观和感觉指南。 -`GroupLayout`区分(a)两个组分之间的优选间隙和(b)组分与容器边界之间的优选间隙。 `GroupLayout` API 中有相应的方法可以添加这些间隙(`addPreferredGap`和`addContainerGap`)。有三种类型的组分缺口:**相关**,**无关**和**缩进**。 `LayoutStyle.ComponentPlacement`枚举定义了相应的常量,用作`addPreferredGap`方法的参数:`RELATED`,`UNRELATED`和`INDENT`。相关和无关间隙之间的差异只是大小 - 不相关组件之间的距离稍微大一些。 _ 缩进 _ 表示两个组件的优选水平距离,当其中一个组件位于第二个组件下方并带有缩进时。 +`GroupLayout`区分(a)两个组分之间的优选间隙和(b)组分与容器边界之间的优选间隙。 `GroupLayout` API 中有相应的方法可以添加这些间隙(`addPreferredGap`和`addContainerGap`)。有三种类型的组分缺口:**相关**,**无关**和**缩进**。 `LayoutStyle.ComponentPlacement`枚举定义了相应的常量,用作`addPreferredGap`方法的参数:`RELATED`,`UNRELATED`和`INDENT`。相关和无关间隙之间的差异只是大小 - 不相关组件之间的距离稍微大一些。*缩进*表示两个组件的优选水平距离,当其中一个组件位于第二个组件下方并带有缩进时。 ![gaps.](img/da454e742a56286d4a4ebf0973b33a40.jpg) -如上所述,`GroupLayout`可以自动插入间隙 - 如果您没有明确添加自己的间隙,它会为您添加 _ 相关的 _ 首选间隙。但是,这不是默认行为。您必须通过调用`GroupLayout`上的`setAutoCreateGaps(true)`和`setAutoCreateContainerGaps(true)`来启用此功能。然后你会自动获得正确的间距。 +如上所述,`GroupLayout`可以自动插入间隙 - 如果您没有明确添加自己的间隙,它会为您添加*相关的*首选间隙。但是,这不是默认行为。您必须通过调用`GroupLayout`上的`setAutoCreateGaps(true)`和`setAutoCreateContainerGaps(true)`来启用此功能。然后你会自动获得正确的间距。 ## 编写代码 @@ -174,7 +174,7 @@ layout.setVerticalGroup( 可调整的差距 -指定大小和可调整性也适用于间隙,包括首选间隙。例如,您可以指定两个组件之间的首选间隙,其作用类似于 _ 弹簧 _ 将组件推离彼此(到容器的相对侧)。两个组件的优选距离仅用作间隙的最小尺寸。请参阅以下代码段: +指定大小和可调整性也适用于间隙,包括首选间隙。例如,您可以指定两个组件之间的首选间隙,其作用类似于*弹簧*将组件推离彼此(到容器的相对侧)。两个组件的优选距离仅用作间隙的最小尺寸。请参阅以下代码段: ```java layout.createSequentialGroup() diff --git a/docs/445.md b/docs/445.md index 50e647f94e25a950fe1f46d55dcb859871d7d641..62f723d02ee9e6b22404b84eacea6b80fba2104f 100644 --- a/docs/445.md +++ b/docs/445.md @@ -16,11 +16,11 @@ ## 水平布局 -从左到右检查水平尺寸 _,我们可以看到序列中有 3 组。第一个实际上不是一个组,只是一个组件 - 标签。第二个是包含文本字段和复选框的组(稍后我们将对其进行分解)。第三个是两个按钮组。如下图所示:_ +从左到右检查水平尺寸*,我们可以看到序列中有 3 组。第一个实际上不是一个组,只是一个组件 - 标签。第二个是包含文本字段和复选框的组(稍后我们将对其进行分解)。第三个是两个按钮组。如下图所示:_ ![Find.](img/bb4a562cba9ef353b60c093504ad7b84.jpg) -让我们在代码中勾画出顺序组。请注意,`GroupLayout.Alignment.LEADING`对应于水平维度中的左对齐。另请注意,假设 _ 间隙自动插入 _ 功能已打开,我们不会指定间隙。 +让我们在代码中勾画出顺序组。请注意,`GroupLayout.Alignment.LEADING`对应于水平维度中的左对齐。另请注意,假设*间隙自动插入*功能已打开,我们不会指定间隙。 ```java layout.setHorizontalGroup(layout.createSequentialGroup() @@ -88,7 +88,7 @@ layout.linkSize(SwingConstants.HORIZONTAL, findButton, cancelButton); ## 垂直布局 -在垂直维度中,我们检查从 _ 顶部到底部 _ 的布局。我们绝对希望第一行的所有组件在基线上对齐。因此,沿着垂直轴,存在基线组的序列,接着是一组剩余的组件。见下图。 +在垂直维度中,我们检查从*顶部到底部*的布局。我们绝对希望第一行的所有组件在基线上对齐。因此,沿着垂直轴,存在基线组的序列,接着是一组剩余的组件。见下图。 ![Find_a3.](img/53c62326103c56242745a4bf474b2a0f.jpg) diff --git a/docs/446.md b/docs/446.md index 0c0053678e8077447e28069d808670d35f1e428c..cafed25cf21332a4b3e7a9e639cfc5c953c6b62b 100644 --- a/docs/446.md +++ b/docs/446.md @@ -22,13 +22,13 @@ ![The SpringCompactGrid application presents components in a grid without forcing all components to be the same size..](img/5e3e78a7262564ac78732f4b56209759.jpg) -Spring 布局通过在组件边缘之间定义方向关系或 _ 约束 _ 来完成它们的工作。例如,您可以定义一个组件的左边缘与另一个组件的右边缘相距固定距离(例如 5 个像素)。 +Spring 布局通过在组件边缘之间定义方向关系或*约束*来完成它们的工作。例如,您可以定义一个组件的左边缘与另一个组件的右边缘相距固定距离(例如 5 个像素)。 在`SpringLayout`中,每条边的位置取决于另一条边的位置。如果随后添加约束以为边创建新绑定,则先前的绑定将被丢弃,并且边仍然依赖于单个边。 与许多布局管理器不同,`SpringLayout`不会自动设置它管理的组件的位置。如果您手动编写使用`SpringLayout`的 GUI,请记住通过约束西/东和北/南位置来初始化组件位置。根据您使用的约束,您可能还需要显式设置容器的大小。 -组件定义 _edge_ 属性,这些属性由`Spring`实例连接。每个弹簧有四个属性 - 其 _ 最小 _,_ 首选 _ 和 _ 最大 _ 值及其实际(当前)_ 值 _。与每个组件相关联的弹簧被收集到`SpringLayout.Constraints`对象中。 +组件定义 _edge_ 属性,这些属性由`Spring`实例连接。每个弹簧有四个属性 - 其*最小*,*首选*和*最大*值及其实际(当前)*值*。与每个组件相关联的弹簧被收集到`SpringLayout.Constraints`对象中。 `Spring`类的实例包含表征其行为的三个属性:最小值,首选值和最大值。这些属性中的每一个都可能涉及基于一系列规则定义其第四个值属性。 @@ -138,7 +138,7 @@ layout.putConstraint(SpringLayout.SOUTH, contentPane, ## 弹簧和组件尺寸 -`SpringLayout`对象自动为`SpringLayout`控制的每个组件的高度和宽度安装`Spring`。这些弹簧基本上是组件的`getMinimumSize`,`getPreferredSize`和`getMaximumSize`方法的覆盖物。 “覆盖”是指不仅弹簧 _ 用这些方法中的适当值初始化 _,而且弹簧 _ 跟踪 _ 这些值。例如,表示组件宽度的`Spring`对象是一种特殊的弹簧,它只是将其实现委托给组件的相关大小方法。这样,随着组件特性的变化,弹簧与尺寸方法保持同步。 +`SpringLayout`对象自动为`SpringLayout`控制的每个组件的高度和宽度安装`Spring`。这些弹簧基本上是组件的`getMinimumSize`,`getPreferredSize`和`getMaximumSize`方法的覆盖物。 “覆盖”是指不仅弹簧*用这些方法中的适当值初始化*,而且弹簧*跟踪*这些值。例如,表示组件宽度的`Spring`对象是一种特殊的弹簧,它只是将其实现委托给组件的相关大小方法。这样,随着组件特性的变化,弹簧与尺寸方法保持同步。 当组件的`getMaximumSize`和`getPreferredSize`方法返回相同的值时,`SpringLayout`将其解释为意味着不应该拉伸组件。 `JLabel`和`JButton`是以这种方式实现的组件的示例。因此,SpringDemo3 示例中的标签不会拉伸。 diff --git a/docs/45.md b/docs/45.md index 9ee3fba2cec6f02b9e59bdeb3b513f7faa39a430..d67632e3b281cdae8617475bfd102de6f074a96b 100644 --- a/docs/45.md +++ b/docs/45.md @@ -12,7 +12,7 @@ class MyClass { ``` -这是 _ 类声明 _。 _ 类体 _(大括号之间的区域)包含为从类创建的对象的生命周期提供的所有代码:用于初始化新对象的构造器,用于提供状态的字段的声明类及其对象,以及实现类及其对象行为的方法。 +这是*类声明*。*类体*(大括号之间的区域)包含为从类创建的对象的生命周期提供的所有代码:用于初始化新对象的构造器,用于提供状态的字段的声明类及其对象,以及实现类及其对象行为的方法。 前面的类声明是最小的。它仅包含所需的类声明的那些组件。您可以在类声明的开头提供有关该类的更多信息,例如其超类的名称,是否实现任何接口等。例如, @@ -26,12 +26,12 @@ class MyClass extends MySuperClass implements YourInterface { 表示`MyClass`是`MySuperClass`的子类,它实现`YourInterface`接口。 -你也可以在最开始添加像 _public_ 或 _private_ 这样的修饰符 - 这样你就可以看到类声明的开头行变得非常复杂。修饰符 _public_ 和 _private_ ,确定其他类可以访问`MyClass`,将在本课程后面讨论。关于接口和继承的课程将解释如何以及为什么在类声明中使用 _ 扩展 _ 和 _ 实现 _ 关键字。目前你不需要担心这些额外的并发症。 +你也可以在最开始添加像 _public_ 或 _private_ 这样的修饰符 - 这样你就可以看到类声明的开头行变得非常复杂。修饰符 _public_ 和 _private_ ,确定其他类可以访问`MyClass`,将在本课程后面讨论。关于接口和继承的课程将解释如何以及为什么在类声明中使用*扩展*和*实现*关键字。目前你不需要担心这些额外的并发症。 通常,类声明可以按顺序包含这些组件: 1. 修改器如 _public_ , _private_ 以及稍后会遇到的其他一些修饰符。 2. 类名,首字母大写。 -3. 类的父级(超类)的名称(如果有)以关键字 _ 开头,扩展 _。一个类只能 _ 扩展 _(子类)一个父类。 -4. 由类实现的接口的逗号分隔列表(如果有),前面有关键字 _ 实现 _。一个类可以 _ 实现 _ 多个接口。 +3. 类的父级(超类)的名称(如果有)以关键字*开头,扩展*。一个类只能*扩展*(子类)一个父类。 +4. 由类实现的接口的逗号分隔列表(如果有),前面有关键字*实现*。一个类可以*实现*多个接口。 5. 阶级身体,被括号围绕,{}。 \ No newline at end of file diff --git a/docs/452.md b/docs/452.md index 1a84d1145d65be9a936aff9ca6670840740859a9..6650ca2af3baea46b2d09835cdc348b24d667a03 100644 --- a/docs/452.md +++ b/docs/452.md @@ -187,7 +187,7 @@ swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel 以下是 UI 管理器需要设置 L& F 时出现的外观确定步骤: 1. 如果程序在需要外观之前设置 L& F,则 UI 管理器尝试创建指定的外观类的实例。如果成功,所有组件都使用 L& F. -2. 如果程序未成功指定 L& F,则 UI 管理器使用由`swing.defaultlaf`属性指定的 L& F.如果在命令行的`swing.properties`文件 _ 和 _ 中都指定了该属性,则命令行定义优先。 +2. 如果程序未成功指定 L& F,则 UI 管理器使用由`swing.defaultlaf`属性指定的 L& F.如果在命令行的`swing.properties`文件*和*中都指定了该属性,则命令行定义优先。 3. 如果这些步骤都没有产生有效的 L& F,则 Sun 的 JRE 使用 Java L& F.其他供应商,如 Apple,将使用其默认的 L& F. 即使在程序的 GUI 可见之后,您也可以使用`setLookAndFeel`更改 L& F.为了使现有组件反映新的 L& F,每个顶级容器调用一次`SwingUtilities` `updateComponentTreeUI`方法。然后,您可能希望调整每个顶级容器的大小以反映其包含的组件的新大小。例如: diff --git a/docs/453.md b/docs/453.md index 5d6fc57d42a2c1a4e32eefdb391531815ed7345f..07694489cf41845a5b5027546c6be8132f63961c 100644 --- a/docs/453.md +++ b/docs/453.md @@ -51,7 +51,7 @@ Synth 中的每个`ComponentUIs`使用`SynthStyleFactory`获得`SynthStyles`。 加载 Synth 外观时,仅呈现具有定义(与区域绑定的“样式”,如下所述)的 GUI 组件(或区域)。任何组件都没有默认行为 - 没有 Synth XML 文件中的样式定义,GUI 是一个空白画布。 -要指定组件(或区域)的呈现,您的 XML 文件必须包含< style>然后,_ 使用< bind>将 _ 绑定到该区域。元件。例如,让我们定义一个包含字体,前景色和背景色的样式,然后将该样式绑定到所有组件。在开发它时,在 Synth XML 文件中包含这样的元素是个好主意 - 那么,你还没有定义的任何组件至少会有颜色和字体:__ +要指定组件(或区域)的呈现,您的 XML 文件必须包含< style>然后,*使用< bind>将*绑定到该区域。元件。例如,让我们定义一个包含字体,前景色和背景色的样式,然后将该样式绑定到所有组件。在开发它时,在 Synth XML 文件中包含这样的元素是个好主意 - 那么,你还没有定义的任何组件至少会有颜色和字体:__ ```java @@ -75,7 +75,7 @@ Synth 中的每个`ComponentUIs`使用`SynthStyleFactory`获得`SynthStyles`。 3. < state> < style>的元素元素将在下面讨论。 < state>区域的元素可以具有七个可能值中的一个或混合。如果未指定该值,则定义适用于所有状态,这是此处的意图。因此,“所有状态”的背景和前景色在此元素中定义。 -4. 最后,< style>刚刚定义的标识符“basicStyle”的元素是 _ 绑定到所有区域的 _。 < bind> element 将“basicStyle”绑定到“region”类型。绑定适用于哪种区域类型由“key”属性给出,在这种情况下,“。*”是“all”的正则表达式。 +4. 最后,< style>刚刚定义的标识符“basicStyle”的元素是*绑定到所有区域的*。 < bind> element 将“basicStyle”绑定到“region”类型。绑定适用于哪种区域类型由“key”属性给出,在这种情况下,“。*”是“all”的正则表达式。 在创建一些工作示例之前,让我们看一下 Synth XML 文件的各个部分。我们将从< bind>开始元素,显示给定的< style>应用于组件或区域。 @@ -93,7 +93,7 @@ Synth 中的每个`ComponentUIs`使用`SynthStyleFactory`获得`SynthStyles`。 例如,要标识 SPLIT_PANE 区域,您将使用 SPLITPANE,splitpane 或 SplitPane(不区分大小写)。 -将样式绑定到某个区域时,该样式将应用于 _ 具有该区域的所有 _ 组件。您可以将样式绑定到多个区域,并且可以将多个样式绑定到区域。例如, +将样式绑定到某个区域时,该样式将应用于*具有该区域的所有*组件。您可以将样式绑定到多个区域,并且可以将多个样式绑定到区域。例如, ```java