提交 e8fc8822 编写于 作者: W wizardforcel

2020-06-22 20:57:51

上级 c33c09ea
......@@ -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
......@@ -14,7 +14,7 @@
## 介绍人
_ 推荐*是服务器发送回客户端的信息,指示可以在另一个位置(可能在另一个服务器处)找到所请求的信息。在 LDAP v2 中,服务器应该处理引用而不是将它们返回给客户端。这是因为处理引用可能非常复杂,因此会导致更复杂的客户端。在构建和部署服务器时,发现引用很有用,但没有多少服务器支持服务器端引用处理。因此,我们找到了一种方法来改进协议以允许它返回引用。这是通过将引用置于“部分结果”错误响应的错误消息内部来完成的。
*推荐*是服务器发送回客户端的信息,指示可以在另一个位置(可能在另一个服务器处)找到所请求的信息。在 LDAP v2 中,服务器应该处理引用而不是将它们返回给客户端。这是因为处理引用可能非常复杂,因此会导致更复杂的客户端。在构建和部署服务器时,发现引用很有用,但没有多少服务器支持服务器端引用处理。因此,我们找到了一种方法来改进协议以允许它返回引用。这是通过将引用置于“部分结果”错误响应的错误消息内部来完成的。
LDAP v3 明确支持引用,并允许服务器将引用直接返回给客户端。本课不会介绍推荐,但您可以随时参考 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/referral/index.html)来管理应用程序中的推荐。
......@@ -22,7 +22,7 @@ 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)
......
......@@ -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 都支持简单身份验证。
......
......@@ -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 身份验证中,您必须对特定域进行身份验证。您可以使用以下身份验证环境属性来指定域。如果未指定域,则将使用服务器提供的任何域。
......
......@@ -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 意味着没有首选大小:只有在没有空闲连接可用时,对池连接的请求才会导致新创建的连接。
请注意,最大池大小会覆盖初始池大小和首选池大小。例如,将首选池大小设置为大于最大池大小有效地将其设置为最大池大小。
......
......@@ -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 {
......
......@@ -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,7 +22,7 @@ public class Box {
## Box 类的通用版本
_ 泛型类*使用以下格式定义:
*泛型类*使用以下格式定义:
```java
class name<T1, T2, ..., Tn> { /* ... */ }
......
......@@ -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<T> {
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/java/generics/methods.html](https://docs.oracle.com/javase/tutorial/java/generics/methods.html)
_ 通用方法*是引入自己的类型参数的方法。这类似于声明泛型类型,但类型参数的范围仅限于声明它的方法。允许使用静态和非静态泛型方法,以及泛型类构造器。
*通用方法*是引入自己的类型参数的方法。这类似于声明泛型类型,但类型参数的范围仅限于声明它的方法。允许使用静态和非静态泛型方法,以及泛型类构造器。
泛型方法的语法包括一个类型参数列表,在尖括号内,它出现在方法的返回类型之前。对于静态泛型方法,类型参数部分必须出现在方法的返回类型之前。
......
......@@ -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`类型:
......
......@@ -11,11 +11,11 @@
* [具有不可恢复形式参数的 Varargs 方法的潜在漏洞](#vulnerabilities)
* [使用不可恢复的形式参数防止 Varargs 方法出现警告](#suppressing)
_ 可再生*类型是一种类型信息在运行时完全可用的类型。这包括基元,非泛型类型,原始类型和未绑定通配符的调用。
*可再生*类型是一种类型信息在运行时完全可用的类型。这包括基元,非泛型类型,原始类型和未绑定通配符的调用。
_ 不可再生类型*是在编译时通过类型擦除删除信息的类型 - 未定义为无界通配符的泛型类型的调用。不可重新生成的类型在运行时没有提供所有信息。不可再生类型的示例是`List&lt; String&gt;。``列表&lt; Number>` ; JVM 无法在运行时区分这些类型。如[对泛型的限制](restrictions.html)所示,在某些情况下不能使用不可再生类型:例如,在`表达式`表达式中,或作为数组中的元素。
*不可再生类型*是在编译时通过类型擦除删除信息的类型 - 未定义为无界通配符的泛型类型的调用。不可重新生成的类型在运行时没有提供所有信息。不可再生类型的示例是`List&lt; String&gt;。``列表&lt; Number>` ; JVM 无法在运行时区分这些类型。如[对泛型的限制](restrictions.html)所示,在某些情况下不能使用不可再生类型:例如,在`表达式`表达式中,或作为数组中的元素。
_ 当参数化类型的变量引用不是该参数化类型的对象时,会发生堆污染*。如果程序执行某些操作,在编译时产生未经检查的警告,则会出现这种情况。如果在编译时(在编译时类型检查规则的限制范围内)或在运行时,生成*未检查警告*,则涉及参数化类型的操作的正确性(例如,强制转换)或方法调用)无法验证。例如,在混合原始类型和参数化类型时,或者在执行未经检查的强制转换时,会发生堆污染。
*当参数化类型的变量引用不是该参数化类型的对象时,会发生堆污染*。如果程序执行某些操作,在编译时产生未经检查的警告,则会出现这种情况。如果在编译时(在编译时类型检查规则的限制范围内)或在运行时,生成*未检查警告*,则涉及参数化类型的操作的正确性(例如,强制转换)或方法调用)无法验证。例如,在混合原始类型和参数化类型时,或者在执行未经检查的强制转换时,会发生堆污染。
在正常情况下,当所有代码同时编译时,编译器会发出未经检查的警告,以引起您对潜在堆污染的注意。如果单独编译代码的各个部分,则很难检测到堆污染的潜在风险。如果确保代码在没有警告的情况下编译,则不会发生堆污染。
......
......@@ -40,7 +40,7 @@ C:\home\sally\statusReport
文件系统对象通常是目录或文件。每个人都熟悉这些对象。但是一些文件系统也支持符号链接的概念。符号链接也称为*符号链接*或*软链接*。
_ 符号链接*是一个特殊文件,用作对另一个文件的引用。在大多数情况下,符号链接对应用程序是透明的,符号链接上的操作会自动重定向到链接的目标。 (指向的文件或目录称为链接的*目标*。)例外情况是删除符号链接或重命名,在这种情况下链接本身被删除,或重命名而不是目标链接。
*符号链接*是一个特殊文件,用作对另一个文件的引用。在大多数情况下,符号链接对应用程序是透明的,符号链接上的操作会自动重定向到链接的目标。 (指向的文件或目录称为链接的*目标*。)例外情况是删除符号链接或重命名,在这种情况下链接本身被删除,或重命名而不是目标链接。
在下图中,`logFile`似乎是用户的常规文件,但它实际上是`dir/logs/HomeLogFile`的符号链接。 `HomeLogFile`是链接的目标。
......
......@@ -92,7 +92,7 @@ Files.move(source,
多个`Files`方法(如`move`)可以在某些文件系统中以原子方式执行某些操作。
_ 原子文件操作*是不能被中断或“部分”执行的操作。执行整个操作或操作失败。当您在文件系统的同一区域上运行多个进程时,这很重要,并且您需要保证每个进程都访问一个完整的文件。
*原子文件操作*是不能被中断或“部分”执行的操作。执行整个操作或操作失败。当您在文件系统的同一区域上运行多个进程时,这很重要,并且您需要保证每个进程都访问一个完整的文件。
许多文件 I / O 方法支持*方法链*的概念。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html](https://docs.oracle.com/javase/tutorial/essential/io/fileAttr.html)
_ 元数据*的定义是“关于其他数据的数据”。使用文件系统,数据包含在其文件和目录中,元数据跟踪有关每个对象的信息:它是常规文件,目录还是链接?它的大小,创建日期,上次修改日期,文件所有者,组所有者和访问权限是什么?
*元数据*的定义是“关于其他数据的数据”。使用文件系统,数据包含在其文件和目录中,元数据跟踪有关每个对象的信息:它是常规文件,目录还是链接?它的大小,创建日期,上次修改日期,文件所有者,组所有者和访问权限是什么?
文件系统的元数据通常称为其*文件属性*`Files`类包括可用于获取文件的单个属性或设置属性的方法。
......
......@@ -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 由一些易于使用的方法组成:
......
......@@ -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--) 来发送中断,以便中断线程。为使中断机制正常工作,被中断的线程必须支持自己的中断。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html)
_ 当不同的线程具有应该是相同数据的不一致视图时,会发生内存一致性错误*。内存一致性错误的原因很复杂,超出了本教程的范围。幸运的是,程序员不需要详细了解这些原因。所需要的只是避免它们的策略。
*当不同的线程具有应该是相同数据的不一致视图时,会发生内存一致性错误*。内存一致性错误的原因很复杂,超出了本教程的范围。幸运的是,程序员不需要详细了解这些原因。所需要的只是避免它们的策略。
避免内存一致性错误的关键是理解*发生在*关系之前。这种关系只是保证一个特定语句的内存写入对另一个特定语句可见。要查看此内容,请考虑以下示例。假设定义并初始化了一个简单的`int`字段:
......
......@@ -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)模拟了这种可能性:
......
......@@ -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) 的实例。此类提供以下方法:
......
......@@ -4,7 +4,7 @@
以下是一些其他配置实用程序的小结。
_ 首选项 API_ 允许应用程序在依赖于实现的后备存储中存储和检索配置数据。支持异步更新,并且多个线程甚至多个应用程序可以安全地更新同一组首选项。有关更多信息,请参阅[首选项 API 指南](https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/index.html)
*首选项 API_ 允许应用程序在依赖于实现的后备存储中存储和检索配置数据。支持异步更新,并且多个线程甚至多个应用程序可以安全地更新同一组首选项。有关更多信息,请参阅[首选项 API 指南](https://docs.oracle.com/javase/8/docs/technotes/guides/preferences/index.html)
部署在 _JAR 存档*中的应用程序使用*清单*来描述存档的内容。有关更多信息,请参阅 JAR 文件课程中的[打包程序。](../../deployment/jar/index.html)
......
......@@ -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 插件提供的安全管理器一起运行。除非应用程序本身定义一个,否则其他类型的应用程序通常在没有安全管理器的情如果没有安全管理器,则该应用程序没有安全策略,并且没有任何限制。
......
......@@ -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)
......
......@@ -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 中的正则表达式语法最相似。
......
......@@ -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`,一次或根本不匹配”。有一些细微的实现差异,将在本节末尾附近解释。
| 贪婪 | 不情愿的 | 所有格 | 含义 |
| --- | --- | --- | --- |
......
......@@ -4,7 +4,7 @@
[上一节](quant.html)中,我们看到量词一次如何附加到一个字符,字符类或捕获组。但到目前为止,我们还没有详细讨论过捕捉群体的概念。
_ 捕获组*是一种将多个字符视为一个单元的方法。它们是通过将要分组的字符放在一组括号中来创建的。例如,正则表达式`(dog)`创建一个包含字母`"d" "o"``"g"`的组。与捕获组匹配的输入字符串部分将保存在内存中,以便以后通过反向引用进行调用(如下面的 [Backreferences](#backref) 部分所述)。
*捕获组*是一种将多个字符视为一个单元的方法。它们是通过将要分组的字符放在一组括号中来创建的。例如,正则表达式`(dog)`创建一个包含字母`"d" "o"``"g"`的组。与捕获组匹配的输入字符串部分将保存在内存中,以便以后通过反向引用进行调用(如下面的 [Backreferences](#backref) 部分所述)。
## 编号
......
......@@ -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-) :实现终端追加和替换步骤。
......
......@@ -41,7 +41,7 @@ Java 编程语言是一种高级语言,可以通过以下所有流行语来表
## Java 平台
_ 平台*是程序运行的硬件或软件环境。我们已经提到了一些最受欢迎的平台,如 Microsoft Windows,Linux,Solaris OS 和 Mac OS。大多数平台可以描述为操作系统和底层硬件的组合。 Java 平台与大多数其他平台的不同之处在于,它是一个纯软件平台,可以在其他基于硬件的平台上运行。
*平台*是程序运行的硬件或软件环境。我们已经提到了一些最受欢迎的平台,如 Microsoft Windows,Linux,Solaris OS 和 Mac OS。大多数平台可以描述为操作系统和底层硬件的组合。 Java 平台与大多数其他平台的不同之处在于,它是一个纯软件平台,可以在其他基于硬件的平台上运行。
Java 平台有两个组件:
......
......@@ -6,7 +6,7 @@
## 表达式
_ 表达式*是由变量,运算符和方法调用组成的构造,它们是根据语言的语法构造的,其值为单个值。您已经看过表达式的示例,如下面的粗体所示:
*表达式*是由变量,运算符和方法调用组成的构造,它们是根据语言的语法构造的,其值为单个值。您已经看过表达式的示例,如下面的粗体所示:
```java
int **cadence = 0**;
......@@ -90,7 +90,7 @@ double aValue = 8933.234;
## 块
_ *是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。以下示例 [`BlockDemo`](examples/BlockDemo.java) 说明了块的使用:
*块*是平衡括号之间的一组零个或多个语句,可以在允许单个语句的任何地方使用。以下示例 [`BlockDemo`](examples/BlockDemo.java) 说明了块的使用:
```java
class BlockDemo {
......
......@@ -88,9 +88,9 @@ 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 作为前向焦点遍历键:
......
......@@ -117,7 +117,7 @@ public class AL extends Frame implements WindowListener,ActionListener {
更多示例:`Beeper`程序示例可在此跟踪事件简介[事件监听器简介](intro.html)中找到。您可以在 [`Beeper.java`](../examples/events/BeeperProject/src/events/Beeper.java) 中找到整个程序。该部分中描述的另一个例子 [`MultiListener.java`](../examples/events/MultiListenerProject/src/events/MultiListener.java) 有两个动作源和两个动作监听器,一个监听器监听两个源,另一个监听一个监听器。
_ 因为`ActionListener`只有一个方法,所以它没有相应的适配器类。_
*因为`ActionListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -54,7 +54,7 @@ protected class CaretListenerLabel extends JLabel
您可以在[示例索引中找到使用 Swing Components](../examples/components/index.html#TextComponentDemo)`TextComponentDemo`源文件的链接。有关该程序的插入符号监听器方面的讨论,请参阅 [](../components/generaltext.html) [文本组件功能](../components/generaltext.html)中的[听取插入符号和选择更改](../components/generaltext.html#caret)
_ 因为`CaretListener`只有一个方法,所以它没有相应的适配器类。_
*因为`CaretListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -26,7 +26,7 @@ class SliderListener implements ChangeListener {
您可以在[使用 Swing 组件](../examples/components/index.html#SliderDemo)的示例索引中找到`SliderDemo`的源文件。
_ 因为`ChangeListener`只有一个方法,所以它没有相应的适配器类。_
*因为`ChangeListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -132,7 +132,7 @@ public class ComponentEventDemo ... implements ComponentListener {
```
_ 所有这些方法也在适配器类中, [`ComponentAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ComponentAdapter.html) 。_
*所有这些方法也在适配器类中, [`ComponentAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ComponentAdapter.html) 。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -49,7 +49,7 @@ public class ContainerEventDemo ... implements ContainerListener ... {
```
_ 相应的适配器类是 [`ContainerAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ContainerAdapter.html) 。_
*相应的适配器类是 [`ContainerAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/ContainerAdapter.html) 。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -92,7 +92,7 @@ public class FocusEventDemo ... implements FocusListener ... {
```
_ 相应的适配器类是 [`FocusAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/FocusAdapter.html) 。_
*相应的适配器类是 [`FocusAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/FocusAdapter.html) 。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -87,7 +87,7 @@ public class InternalFrameEventDemo ...
```
_ 相应的适配器类是 [`InternalFrameAdapter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/InternalFrameAdapter.html) 。_
*相应的适配器类是 [`InternalFrameAdapter`](https://docs.oracle.com/javase/8/docs/api/javax/swing/event/InternalFrameAdapter.html) 。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -21,7 +21,7 @@ public void itemStateChanged(ItemEvent e) {
```
_ 因为`ItemListener`只有一个方法,所以它没有相应的适配器类。_
*因为`ItemListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -176,7 +176,7 @@ public class KeyEventDemo ... implements KeyListener ... {
```
_ 相应的适配器类是 [`KeyAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyAdapter.html) 。_
*相应的适配器类是 [`KeyAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/KeyAdapter.html) 。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -96,7 +96,7 @@ class SharedListSelectionHandler implements ListSelectionListener {
传递到`valueChanged``ListSelectionEvent`对象仅表示选择已更改。该事件不包含有关当前选择的信息。因此,此方法查询选择模型以确定当前选择。
_ 因为`ListSelectionListener`只有一个方法,所以它没有相应的适配器类。_
*因为`ListSelectionListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -95,7 +95,7 @@ private class MyListener extends MouseInputAdapter {
```
_ 相应的适配器类别为 [`MouseMotionAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseMotionAdapter.html) 和 [`MouseAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseAdapter.html ) 。_
*相应的适配器类别为 [`MouseMotionAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseMotionAdapter.html) 和 [`MouseAdapter`](https://docs.oracle.com/javase/8/docs/api/java/awt/event/MouseAdapter.html ) 。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -96,7 +96,7 @@ public class MouseWheelEventDemo ... implements MouseWheelListener ... {
```
_ 虽然`MouseWheelListener`只有一个方法,但它有相应的适配器类 - `MouseAdapter`。此功能使应用程序只有一个适配器类实例,以便组件从鼠标指针管理所有类型的事件。_
*虽然`MouseWheelListener`只有一个方法,但它有相应的适配器类 - `MouseAdapter`。此功能使应用程序只有一个适配器类实例,以便组件从鼠标指针管理所有类型的事件。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -75,7 +75,7 @@ class FormattedTextFieldListener implements PropertyChangeListener {
| [addPropertyChangeListener(PropertyChangeListener)](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#addPropertyChangeListener-java.beans.PropertyChangeListener-) | 将属性更改监听器添加到监听器列表。 |
| [addPropertyChangeListener(String,PropertyChangeListener)](https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#addPropertyChangeListener-java.lang.String-java.beans.PropertyChangeListener-) | 为特定属性添加属性更改监听器。只有在指定属性发生更改时才会调用监听器。 |
_ 因为`PropertyChangeListener`只有一个方法,所以它没有相应的适配器类。_
*因为`PropertyChangeListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -6,7 +6,7 @@
要检测由表模型对象管理的数据的更改,`JTable`类需要实现`TableModelListener`接口,调用`addTableModelListener()`来捕获事件,然后覆盖`tableChanged()`以响应监听器事件。有关详细信息,请参见[收听数据更改](../components/table.html#modelchange)
_ 因为`TableModelListener`只有一个方法,所以它没有相应的适配器类。_
*因为`TableModelListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -45,7 +45,7 @@ This is the mode used by the preceding example. At most one node can be selected
With this mode, only nodes in adjoining rows can be selected.
_ 因为`TreeSelectionListener`只有一个方法,所以它没有相应的适配器类。_
*因为`TreeSelectionListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -24,7 +24,7 @@ protected class MyUndoableEditListener implements UndoableEditListener {
您可以在[示例索引中找到使用 Swing 组件](../examples/components/index.html#TextComponentDemo)`TextComponentDemo`源文件的链接。有关程序的可撤消编辑监听器方面的讨论,请参阅[实现撤消和重做](../components/generaltext.html#undo)
_ 因为`UndoableEditListener`只有一个方法,所以它没有相应的适配器类。_
*因为`UndoableEditListener`只有一个方法,所以它没有相应的适配器类。*
| 方法 | 目的 |
| :-- | :-- |
......
......@@ -2,11 +2,11 @@
> 原文: [https://docs.oracle.com/javase/tutorial/collections/intro/index.html](https://docs.oracle.com/javase/tutorial/collections/intro/index.html)
_ 集合 _ - 有时称为容器 - 只是一个将多个元素组合成一个单元的对象。集合用于存储,检索,操作和传递聚合数据。通常,它们表示形成自然组的数据项,例如扑克牌(卡片集合),邮件文件夹(字母集合)或电话目录(名称到电话号码的映射)。如果您使用过 Java 编程语言 - 或者只使用其他任何编程语言 - 那么您已经熟悉了集合。
*集合 _ - 有时称为容器 - 只是一个将多个元素组合成一个单元的对象。集合用于存储,检索,操作和传递聚合数据。通常,它们表示形成自然组的数据项,例如扑克牌(卡片集合),邮件文件夹(字母集合)或电话目录(名称到电话号码的映射)。如果您使用过 Java 编程语言 - 或者只使用其他任何编程语言 - 那么您已经熟悉了集合。
## 什么是馆藏框架?
_ 集合框架*是用于表示和操作集合的统一架构。所有集合框架都包含以下内容:
*集合框架*是用于表示和操作集合的统一架构。所有集合框架都包含以下内容:
* **接口:**这些是表示集合的抽象数据类型。接口允许独立于其表示的细节来操纵集合。在面向对象语言中,接口通常形成层次结构。
* **实现:**这些是集合接口的具体实现。实质上,它们是可重用的数据结构。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html](https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html)
_ 核心集合接口*封装了不同类型的集合,如下图所示。这些接口允许独立于其表示的细节来操纵集合。核心集合接口是 Java 集合框架的基础。正如您在中看到的下图,核心集合接口形成层次结构。
*核心集合接口*封装了不同类型的集合,如下图所示。这些接口允许独立于其表示的细节来操纵集合。核心集合接口是 Java 集合框架的基础。正如您在中看到的下图,核心集合接口形成层次结构。
![Two interface trees, one starting with Collection and including Set, SortedSet, List, and Queue, and the other starting with Map and including SortedMap.](img/7a5ed10e7a4f3194580b9f165722a7c6.jpg)
......
......@@ -120,7 +120,7 @@ static void filter(Collection<?> c) {
## 集合接口批量操作
_ 批量操作*对整个`Collection`执行操作。您可以使用基本操作实现这些速记操作,但在大多数情况下,此类实现效率较低。以下是批量操作:
*批量操作*对整个`Collection`执行操作。您可以使用基本操作实现这些速记操作,但在大多数情况下,此类实现效率较低。以下是批量操作:
* `containsAll` - 如果目标`Collection`包含指定`Collection`中的所有元素,则返回`true`
* `addAll` - 将指定`Collection`中的所有元素添加到目标`Collection`
......
......@@ -280,7 +280,7 @@ Set<Employee> slackers = m.keySet();
## 屈德宁
_ 多图*就像`Map`,但它可以将每个键映射到多个值。 Java Collections Framework 不包含多重映射的接口,因为它们并未全部使用。将`List`实例的值作为多图使用`Map`是一件相当简单的事情。在下一个代码示例中演示了此技术,该示例读取每行包含一个单词(全部小写)的单词列表,并打印出符合大小标准的所有 anagram 组。 _anagram 组*是一堆单词,所有单词都包含完全相同的字母,但顺序不同。该程序在命令行上有两个参数:(1)字典文件的名称和(2)要打印的 anagram 组的最小大小。不打印包含少于指定最小值的单词组的 Anagram 组。
*多图*就像`Map`,但它可以将每个键映射到多个值。 Java Collections Framework 不包含多重映射的接口,因为它们并未全部使用。将`List`实例的值作为多图使用`Map`是一件相当简单的事情。在下一个代码示例中演示了此技术,该示例读取每行包含一个单词(全部小写)的单词列表,并打印出符合大小标准的所有 anagram 组。 _anagram 组*是一堆单词,所有单词都包含完全相同的字母,但顺序不同。该程序在命令行上有两个参数:(1)字典文件的名称和(2)要打印的 anagram 组的最小大小。不打印包含少于指定最小值的单词组的 Anagram 组。
找到 anagram 组有一个标准技巧:对于字典中的每个单词,按字母顺序排列单词中的字母(即将单词的字母重新排序为字母顺序)并将条目放入多图,将字母顺序排列的单词映射到原始单词字。例如,单词 _bad_ 导致条目映射 _abd_ 进入 _bad_ 被放入多图。片刻的反射将显示任何给定键映射形成 anagram 组的所有单词。迭代多图中的键,打印出符合大小约束的每个 anagram 组是一件简单的事情。
......
......@@ -59,7 +59,7 @@ roster
在示例 [`BulkDataOperationsExamples`](examples/BulkDataOperationsExamples.java) 中找到本节中描述的代码摘录。
_ 管道*是一系列聚合操作。以下示例使用由聚合操作`filter``forEach`组成的管道打印集合`roster`中包含的男性成员:
*管道*是一系列聚合操作。以下示例使用由聚合操作`filter``forEach`组成的管道打印集合`roster`中包含的男性成员:
```java
roster
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/datetime/iso/timezones.html](https://docs.oracle.com/javase/tutorial/datetime/iso/timezones.html)
_ 时区*是使用相同标准时间的地球区域。每个时区由标识符描述,并且通常具有格式*区域/城市*`亚洲/东京`)和格林威治/ UTC 时间的偏移。例如,东京的偏移是`+09:00`
*时区*是使用相同标准时间的地球区域。每个时区由标识符描述,并且通常具有格式*区域/城市*`亚洲/东京`)和格林威治/ UTC 时间的偏移。例如,东京的偏移是`+09:00`
## ZoneId 和 ZoneOffset
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/i18n/intro/index.html](https://docs.oracle.com/javase/tutorial/i18n/intro/index.html)
_ 国际化*是设计应用程序的过程,以便它可以适应各种语言和区域而无需进行工程更改。有时,国际化一词缩写为 i18n,因为第一个“i”和最后一个“n”之间有 18 个字母。
*国际化*是设计应用程序的过程,以便它可以适应各种语言和区域而无需进行工程更改。有时,国际化一词缩写为 i18n,因为第一个“i”和最后一个“n”之间有 18 个字母。
国际化计划具有以下特点:
......@@ -12,7 +12,7 @@ _ 国际化*是设计应用程序的过程,以便它可以适应各种语言
* 依赖于文化的数据(如日期和货币)以符合最终用户区域和语言的格式显示。
* 它可以快速本地化。
_ 本地化*是通过添加特定于语言环境的组件和翻译文本来调整特定区域或语言的软件的过程。术语本地化通常缩写为 l10n,因为“l”和“n”之间有 10 个字母。
*本地化*是通过添加特定于语言环境的组件和翻译文本来调整特定区域或语言的软件的过程。术语本地化通常缩写为 l10n,因为“l”和“n”之间有 10 个字母。
本地化的主要任务是翻译用户界面元素和文档。本地化不仅涉及改变语言交互,还涉及其他相关更改,如数字显示,日期,货币等。其他类型的数据(如声音和图像)如果具有文化敏感性,则可能需要进行本地化。应用程序的国际化程度越高,就越容易将其本地化为特定的语言和字符编码方案。
......
......@@ -26,7 +26,7 @@ public class BedAndBreakfast {
## 静态初始化块
_ 静态初始化块*是用大括号`{ }`括起来的正常代码块,前面是`static`关键字。这是一个例子:
*静态初始化块*是用大括号`{ }`括起来的正常代码块,前面是`static`关键字。这是一个例子:
```java
static {
......@@ -68,7 +68,7 @@ class Whatever {
Java 编译器将初始化程序块复制到每个构造器中。因此,该方法可用于在多个构造器之间共享代码块。
_ 最终方法*不能在子类中重写。这在接口和继承的课程中讨论。以下是使用 final 方法初始化实例变量的示例:
*最终方法*不能在子类中重写。这在接口和继承的课程中讨论。以下是使用 final 方法初始化实例变量的示例:
```java
class Whatever {
......
......@@ -4,7 +4,7 @@
我们都喜欢使用程序让我们知道发生了什么。通知我们的程序通常通过显示状态和错误消息来实现。当然,这些消息需要翻译,以便世界各地的最终用户能够理解这些消息。 [隔离特定于区域设置的数据](../resbundle/index.html)部分讨论了可翻译的文本消息。通常,在将消息`String`移动到`ResourceBundle`后就完成了。但是,如果您在消息中嵌入了可变数据,则必须采取一些额外步骤来准备翻译。
_ 复合消息*包含可变数据。在以下复合消息列表中,变量数据带有下划线:
*复合消息*包含可变数据。在以下复合消息列表中,变量数据带有下划线:
```java
The disk named MyDisk contains 300 files.
......
......@@ -2,13 +2,13 @@
> 原文: [https://docs.oracle.com/javase/tutorial/i18n/text/terminology.html](https://docs.oracle.com/javase/tutorial/i18n/text/terminology.html)
_ 字符*是具有语义值的文本的最小单位。
*字符*是具有语义值的文本的最小单位。
_ 字符集*是可能由多种语言使用的字符集合。例如,拉丁字符集由英语和大多数欧洲语言使用,尽管希腊语字符集仅由希腊语使用。
*字符集*是可能由多种语言使用的字符集合。例如,拉丁字符集由英语和大多数欧洲语言使用,尽管希腊语字符集仅由希腊语使用。
_ 编码字符集*是一个字符集,其中每个字符被分配一个唯一的编号。
*编码字符集*是一个字符集,其中每个字符被分配一个唯一的编号。
_ 代码点*是可以在编码字符集中使用的值。代码点是 32 位`int`数据类型,其中低 21 位表示有效代码点值,高 11 位表示 0。
*代码点*是可以在编码字符集中使用的值。代码点是 32 位`int`数据类型,其中低 21 位表示有效代码点值,高 11 位表示 0。
Unicode _ 代码单元*是 16 位`char`值。例如,假设一个`String`包含字母“abc”,后面跟着 Deseret LONG I,它用两个`char`值表示。该字符串包含四个字符,四个代码点,但包含五个代码单元。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html](https://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html)
_ 规范化*是一个过程,通过它您可以执行某些文本转换,使其可以以前所未有的方式进行协调。假设您想要搜索或排序文本,在这种情况下,您需要将该文本规范化以考虑应该表示为相同文本的代码点。
*规范化*是一个过程,通过它您可以执行某些文本转换,使其可以以前所未有的方式进行协调。假设您想要搜索或排序文本,在这种情况下,您需要将该文本规范化以考虑应该表示为相同文本的代码点。
什么可以归一化?当您需要使用变音符号转换字符,更改所有字母大小写,分解连字或将半角片假名字符转换为全角字符等时,标准化适用。
......
......@@ -12,7 +12,7 @@ Java 2D API 具有各种文本呈现功能,包括用于呈现字符串和用
字体用于表示字符串中字符的形状称为*字形*。特定字符或字符组合可以表示为一个或多个字形。例如,_á_ 可能由两个字形表示,而连字 _fi_ 可能由单个字形表示。
_ 字体*可以被认为是一组字形。单个字体可能有许多**,例如斜体和常规。字体中的所有面具有相似的印刷特征,并且可以被识别为相同**的成员。换句话说,具有特定样式的字形集合形成*字体*。字体面的集合形成*字体系列*。字体系列的集合形成了系统上可用的字体集。
*字体*可以被认为是一组字形。单个字体可能有许多*面*,例如斜体和常规。字体中的所有面具有相似的印刷特征,并且可以被识别为相同*族*的成员。换句话说,具有特定样式的字形集合形成*字体*。字体面的集合形成*字体系列*。字体系列的集合形成了系统上可用的字体集。
使用 Java 2D API 时,可以使用`Font`实例指定字体。您可以通过调用静态方法`GraphicsEnvironment.getLocalGraphicsEnvironment`然后查询返回的`GraphicsEnvironment`来确定可用的字体。 `getAllFonts`方法返回一个数组,其中包含系统上所有可用字体的`Font`实例。 `getAvailableFontFamilyNames`方法返回可用字体系列的列表。
......
......@@ -52,9 +52,9 @@ g2.fill (new Ellipse2D.Double(0, 0, 100, 50));
`BasicStroke`对象包含有关线宽,连接样式,端盖样式和破折号样式的信息。使用`draw`方法渲染`Shape`时使用此信息。
_ 线宽*是垂直于其轨迹测量的线的粗细。线宽指定为用户坐标单位的`float`值,当使用默认变换时,大致相当于 1/72 英寸。
*线宽*是垂直于其轨迹测量的线的粗细。线宽指定为用户坐标单位的`float`值,当使用默认变换时,大致相当于 1/72 英寸。
_ 连接样式*是在两个线段相交的地方应用的装饰。 `BasicStroke`支持以下三种连接样式:
*连接样式*是在两个线段相交的地方应用的装饰。 `BasicStroke`支持以下三种连接样式:
![Join bevel stroke style](img/00820c62bd27f5624c9cae9551ac10e8.jpg) `JOIN_BEVEL`
......@@ -62,7 +62,7 @@ _ 连接样式*是在两个线段相交的地方应用的装饰。 `BasicStroke`
![Join round stroke style](img/2b3970c32cd6fc4a898699e974832927.jpg) `JOIN_ROUND`
_ 端盖样式*是在线段结束时应用的装饰。 `BasicStroke`支持以下三种端盖样式:
*端盖样式*是在线段结束时应用的装饰。 `BasicStroke`支持以下三种端盖样式:
![Butt end-cap style](img/eee5947182e6d5b02b6f449fcd61ae01.jpg) `CAP_BUTT`
......@@ -70,7 +70,7 @@ _ 端盖样式*是在线段结束时应用的装饰。 `BasicStroke`支持以下
![Square end-cap style](img/6277f8f7f82c72f4eb2e5e2ae4eca22b.jpg) `CAP_SQUARE`
_ 破折号样式*定义沿线长度应用的不透明和透明部分的图案。破折号样式由破折号数组和破折号阶段定义。*破折号数组*定义破折号模式。数组中的交替元素表示短划线长度和用户坐标单位中虚线之间的空格长度。元素 0 表示第一个破折号,元素 1 表示第一个破折号,依此类推。*破折号阶段*是破折号模式的偏移量,也以用户坐标单位指定。破折号阶段指示破折号模式的哪个部分应用于行的开头。
*破折号样式*定义沿线长度应用的不透明和透明部分的图案。破折号样式由破折号数组和破折号阶段定义。*破折号数组*定义破折号模式。数组中的交替元素表示短划线长度和用户坐标单位中虚线之间的空格长度。元素 0 表示第一个破折号,元素 1 表示第一个破折号,依此类推。*破折号阶段*是破折号模式的偏移量,也以用户坐标单位指定。破折号阶段指示破折号模式的哪个部分应用于行的开头。
### 填充图案
......
......@@ -18,7 +18,7 @@
* [订购文字](#ordering_text)
* [测量和定位文字](#measuring_and_positioning_text)
_ 字形*是一个或多个字符的直观表示。字形的形状,大小和位置取决于其上下文。许多不同的字形可用于表示单个字符或字符组合,具体取决于字体和样式。
*字形*是一个或多个字符的直观表示。字形的形状,大小和位置取决于其上下文。许多不同的字形可用于表示单个字符或字符组合,具体取决于字体和样式。
例如,在手写草书文本中,特定字符可以采用不同的形状,具体取决于它与相邻字符的连接方式。
......
......@@ -13,7 +13,7 @@ Graphics.drawString(String s, int x, int y);
通常,此方法将每个字形绘制为一个纯色文本字符串,并且该字形中“on”的每个像素都设置为该颜色。这种类型的绘图产生最高对比度的文本,但有时会出现锯齿状(锯齿状)边缘。
_ 文本抗锯齿*是一种用于平滑屏幕上文本边缘的技术。 Java 2D API 使应用程序能够指定是否应该使用此技术以及通过将文本呈现提示应用于`Graphics`来使用的算法。
*文本抗锯齿*是一种用于平滑屏幕上文本边缘的技术。 Java 2D API 使应用程序能够指定是否应该使用此技术以及通过将文本呈现提示应用于`Graphics`来使用的算法。
最常见的渲染提示将前景(文本)颜色与文本边缘的屏幕背景像素混合在一起。要请求此提示,应用程序必须调用以下内容:
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/sound/capturing.html](https://docs.oracle.com/javase/tutorial/sound/capturing.html)
_ 捕获*是指从计算机外部获取信号的过程。音频捕获的常见应用是记录,例如将麦克风输入记录到声音文件中。但是,捕获并不是录制的同义词,因为录制意味着应用程序始终保存正在进入的声音数据。捕获音频的应用程序不一定存储音频。相反,它可能会对数据进行处理 - 例如将语音转录为文本 - 但是一旦完成该缓冲区就会丢弃每个音频缓冲区。
*捕获*是指从计算机外部获取信号的过程。音频捕获的常见应用是记录,例如将麦克风输入记录到声音文件中。但是,捕获并不是录制的同义词,因为录制意味着应用程序始终保存正在进入的声音数据。捕获音频的应用程序不一定存储音频。相反,它可能会对数据进行处理 - 例如将语音转录为文本 - 但是一旦完成该缓冲区就会丢弃每个音频缓冲区。
[Sampled Package 概述](sampled-overview.html)中所述,Java Sound API 实现中的典型音频输入系统包括:
......
......@@ -57,7 +57,7 @@
区分合成器可以同时播放的*音色*的数量和它可以同时播放的*音符*的数量很重要。前者在“频道”中有所描述。一次播放多个音符的能力被称为*复音*。即使是非多音色的合成器通常也可以一次播放多个音符(所有音色都具有相同的音色,但音高不同)。例如,演奏任何和弦,例如 G 大调三和或小调七小和弦,都需要复音。任何实时生成声音的合成器都会限制它可以立即合成的音符数量。在 Java Sound API 中,合成器通过`getMaxPolyphony`方法报告此限制。
_ 声音*是一连串的单音符,例如一个人可以唱的旋律。复调由多个声音组成,例如合唱团演唱的部分。例如,32 个语音合成器可以同时播放 32 个音符。 (但是,一些 MIDI 文学在不同意义上使用“声音”一词,类似于“乐器”或“音色”的含义。)
*声音*是一连串的单音符,例如一个人可以唱的旋律。复调由多个声音组成,例如合唱团演唱的部分。例如,32 个语音合成器可以同时播放 32 个音符。 (但是,一些 MIDI 文学在不同意义上使用“声音”一词,类似于“乐器”或“音色”的含义。)
将传入的 MIDI 音符分配给特定语音的过程称为*语音分配*。合成器维护一个声音列表,跟踪哪些声音是活动的(意味着它们当前有声音发声)。当音符停止发声时,语音将变为非活动状态,这意味着它现在可以自由接受合成器接收的下一个音符开启请求。传入的 MIDI 命令流可以轻松地请求比合成器能够生成的更多同时音符。当所有合成器的声音都处于活动状态时,如何处理下一个 Note On 请求?合成器可以实现不同的策略:可以忽略最近请求的注释;或者它可以通过停止另一个音符来播放,例如最近最少开始的音符。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html](https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)
_ 枚举类型*是一种特殊数据类型,它使变量成为一组预定义常量。变量必须等于为其预定义的值之一。常见示例包括罗盘方向(NORTH,SOUTH,EAST 和 WEST 的值)和星期几。
*枚举类型*是一种特殊数据类型,它使变量成为一组预定义常量。变量必须等于为其预定义的值之一。常见示例包括罗盘方向(NORTH,SOUTH,EAST 和 WEST 的值)和星期几。
因为它们是常量,所以枚举类型字段的名称是大写字母。
......
......@@ -36,7 +36,7 @@ public boolean isRunning() {
## 索引属性
_ 索引*属性是一个数组而不是单个值。在这种情况下,bean 类提供了获取和设置整个数组的方法。以下是名为`testGrades``int[]`属性的示例:
*索引*属性是一个数组而不是单个值。在这种情况下,bean 类提供了获取和设置整个数组的方法。以下是名为`testGrades``int[]`属性的示例:
```java
public int[] getTestGrades() {
......@@ -62,7 +62,7 @@ public void setTestGrades(int index, int grade) {
```
_ 绑定*属性会在监听器的值发生变化时通知它。这有两个含义:
*绑定*属性会在监听器的值发生变化时通知它。这有两个含义:
1. bean 类包括用于管理 bean 的监听器的`addPropertyChangeListener()``removePropertyChangeListener()`方法。
2. 当绑定属性发生更改时,bean 会向其注册的监听器发送`PropertyChangeEvent`
......@@ -109,7 +109,7 @@ public class FaceBean {
## 约束属性
_ 约束*属性是一种特殊的绑定属性。对于约束属性,bean 会跟踪一组*否决*监听器。当约束属性即将更改时,将向监听器咨询有关更改的信息。任何一个听众都有机会否决这一变化,在这种情况下,该财产保持不变。
*约束*属性是一种特殊的绑定属性。对于约束属性,bean 会跟踪一组*否决*监听器。当约束属性即将更改时,将向监听器咨询有关更改的信息。任何一个听众都有机会否决这一变化,在这种情况下,该财产保持不变。
否决听众与财产变更听众分开。幸运的是,`java.beans`包中包含一个`VetoableChangeSupport`类,可以大大简化约束属性。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/javabeans/advanced/longpersistence.html](https://docs.oracle.com/javase/tutorial/javabeans/advanced/longpersistence.html)
_ 长期持久性*是一种能够以 XML 格式保存 bean 的模型。
*长期持久性*是一种能够以 XML 格式保存 bean 的模型。
有关 XML 格式和如何实现非 bean 的长期持久性的信息可以在 [XML Schema](http://www.oracle.com/technetwork/java/persistence3-139471.html)[Using XMLEncoder](http://www.oracle.com/technetwork/java/persistence4-140124.html) 中找到。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html](https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html)
_ 定制*提供了一种在应用程序构建器中修改 bean 的外观和行为的方法,以满足您的特定需求。 bean 开发人员可以使用多个级别的自定义,以允许其他开发人员从 bean 的潜在功能中获得最大收益。
*定制*提供了一种在应用程序构建器中修改 bean 的外观和行为的方法,以满足您的特定需求。 bean 开发人员可以使用多个级别的自定义,以允许其他开发人员从 bean 的潜在功能中获得最大收益。
* * *
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/java/annotations/index.html](https://docs.oracle.com/javase/tutorial/java/annotations/index.html)
_ 注解*是一种元数据形式,它提供有关不属于程序本身的程序的数据。注解对它们注解的代码的操作没有直接影响。
*注解*是一种元数据形式,它提供有关不属于程序本身的程序的数据。注解对它们注解的代码的操作没有直接影响。
注解有许多用途,其中包括:
......
......@@ -138,7 +138,7 @@ ctx.bind("jdbc/fastCoffeeDB", ds);
此时,部署了`DataSource`对象,应用程序可以从该对象获得与数据库`COFFEEBREAK`的池连接。
_ 连接池*是数据库连接对象的缓存。对象表示应用程序可用于连接到数据库的物理数据库连接。在运行时,应用程序从池请求连接。如果池包含可以满足请求的连接,则它将返回与应用程序的连接。如果未找到任何连接,则会创建新连接并将其返回给应用程序。应用程序使用连接对数据库执行某些操作,然后将对象返回池。然后,该连接可用于下一个连接请求。
*连接池*是数据库连接对象的缓存。对象表示应用程序可用于连接到数据库的物理数据库连接。在运行时,应用程序从池请求连接。如果池包含可以满足请求的连接,则它将返回与应用程序的连接。如果未找到任何连接,则会创建新连接并将其返回给应用程序。应用程序使用连接对数据库执行某些操作,然后将对象返回池。然后,该连接可用于下一个连接请求。
连接池可以促进连接对象的重用,并减少创建连接对象的次数。连接池显着提高了数据库密集型应用程序的性能,因为创建连接对象在时间和资源方面都很昂贵。
......
......@@ -8,7 +8,7 @@ Java VM 具有内置检测功能,使您可以使用 JMX 技术监视和管理
## Platform MXBeans 和 Platform MBean Server
_ 平台 MXBeans_ 是一组 MXBeans,随 Java SE 平台一起提供,用于监视和管理 Java VM 以及 Java 运行时环境(JRE)的其他组件。每个平台 MXBean 都封装了 Java VM 功能的一部分,例如类加载系统,即时(JIT)编译系统,垃圾收集器等。通过使用符合 JMX 规范的监视和管理工具,可以显示和交互这些 MXBean,使您能够监视和管理这些不同的 VM 功能。一个这样的监视和管理工具是 Java SE 平台的 JConsole 图形用户界面(GUI)。
*平台 MXBeans_ 是一组 MXBeans,随 Java SE 平台一起提供,用于监视和管理 Java VM 以及 Java 运行时环境(JRE)的其他组件。每个平台 MXBean 都封装了 Java VM 功能的一部分,例如类加载系统,即时(JIT)编译系统,垃圾收集器等。通过使用符合 JMX 规范的监视和管理工具,可以显示和交互这些 MXBean,使您能够监视和管理这些不同的 VM 功能。一个这样的监视和管理工具是 Java SE 平台的 JConsole 图形用户界面(GUI)。
Java SE 平台提供了一个标准的*平台 MBean 服务器*,其中注册了这些平台 MXBean。平台 MBean 服务器还可以注册您要创建的任何其他 MBean。
......
......@@ -61,7 +61,7 @@ grant SignedBy "chris" {
## 密钥库条目
_ 密钥库*是密钥和证书的存储库,用于查找策略文件中指定的签名者的公钥(本例中为`"terry"``"chris"`)。
*密钥库*是密钥和证书的存储库,用于查找策略文件中指定的签名者的公钥(本例中为`"terry"``"chris"`)。
`keytool`实用程序用于创建和管理密钥库。
......
......@@ -24,7 +24,7 @@
* [ServiceLoader API](#limitations-of-the-service-loader-api) 的限制
* [摘要](#summary)
_ 可扩展*应用程序是您可以在不修改其原始代码库的情况下扩展的应用程序。您可以使用新的插件或模块增强其功能。开发人员,软件供应商和客户可以通过将新的 Java Archive(JAR)文件添加到应用程序类路径或特定于应用程序的扩展目录中来添加新功能或应用程序编程接口(API)。
*可扩展*应用程序是您可以在不修改其原始代码库的情况下扩展的应用程序。您可以使用新的插件或模块增强其功能。开发人员,软件供应商和客户可以通过将新的 Java Archive(JAR)文件添加到应用程序类路径或特定于应用程序的扩展目录中来添加新功能或应用程序编程接口(API)。
本节介绍如何使用可扩展服务创建应用程序,使您或其他人能够提供不需要修改原始应用程序的服务实现。通过设计可扩展的应用程序,您可以在不更改核心应用程序的情况下提供升级或增强产品特定部分的方法。
......
......@@ -4,7 +4,7 @@
类和接口之间的一个显着区别是类可以有字段而接口不能。此外,您可以实例化一个类来创建一个对象,这是您无法使用接口进行的。如[部分所述,什么是对象?](../../java/concepts/object.html) ,一个对象将其状态存储在字段中,这些字段在类中定义。 Java 编程语言不允许扩展多个类的一个原因是为了避免*多重继承状态*的问题,这是从多个类继承字段的能力。例如,假设您能够定义一个扩展多个类的新类。通过实例化该类来创建对象时,该对象将继承所有类的超类中的字段。如果来自不同超类的方法或构造器实例化相同的字段会怎样?哪个方法或构造器优先?由于接口不包含字段,因此您不必担心多重继承状态所导致的问题。
_ 实现的多重继承*是从多个类继承方法定义的能力。这种类型的多重继承会出现问题,例如名称冲突和歧义。当支持这种类型的多重继承的编程语言的编译器遇到包含具有相同名称的方法的超类时,它们有时无法确定要访问或调用的成员或方法。此外,程序员可以通过向超类添加新方法而无意中引入名称冲突。 [默认方法](../../java/IandI/defaultmethods.html)引入了一种形式的多重继承实现。一个类可以实现多个接口,该接口可以包含具有相同名称的默认方法。 Java 编译器提供了一些规则来确定特定类使用哪种默认方法。
*实现的多重继承*是从多个类继承方法定义的能力。这种类型的多重继承会出现问题,例如名称冲突和歧义。当支持这种类型的多重继承的编程语言的编译器遇到包含具有相同名称的方法的超类时,它们有时无法确定要访问或调用的成员或方法。此外,程序员可以通过向超类添加新方法而无意中引入名称冲突。 [默认方法](../../java/IandI/defaultmethods.html)引入了一种形式的多重继承实现。一个类可以实现多个接口,该接口可以包含具有相同名称的默认方法。 Java 编译器提供了一些规则来确定特定类使用哪种默认方法。
Java 编程语言支持*类型*的多重继承,这是一个类实现多个接口的能力。一个对象可以有多种类型:它自己的类的类型以及该类实现的所有接口的类型。这意味着如果将变量声明为接口的类型,则其值可以引用从实现接口的任何类实例化的任何对象。这在[使用接口作为类型](../../java/IandI/interfaceAsType.html)一节中讨论。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/reflect/member/field.html](https://docs.oracle.com/javase/tutorial/reflect/member/field.html)
_ 字段*是具有关联值的类,接口或枚举。 [`java.lang.reflect.Field`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html) 类中的方法可以检索有关该字段的信息,例如其名称,类型,修饰符和注释。 ([](../class/index.html)课程中的[检查类修饰符和类型](../class/classModifiers.html)部分描述了如何检索注释。)还有一些方法可以动态访问和修改字段的值。以下各节介绍了这些任务:
*字段*是具有关联值的类,接口或枚举。 [`java.lang.reflect.Field`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Field.html) 类中的方法可以检索有关该字段的信息,例如其名称,类型,修饰符和注释。 ([](../class/index.html)课程中的[检查类修饰符和类型](../class/classModifiers.html)部分描述了如何检索注释。)还有一些方法可以动态访问和修改字段的值。以下各节介绍了这些任务:
* [获取字段类型](fieldTypes.html)描述了如何获取字段的声明类型和泛型类型
* [检索和解析字段修饰符](fieldModifiers.html)显示如何获取字段声明的部分,如`public``transient`
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/reflect/member/method.html](https://docs.oracle.com/javase/tutorial/reflect/member/method.html)
_ 方法*包含可以调用的可执行代码。方法是继承的,并且在非反射代码行为中,例如重载,重写和隐藏由编译器强制执行。相反,反射代码使得方法选择可以被限制在特定的类而不考虑其超类。可以访问超类方法,但可以确定它们的声明类;如果没有反射,这是不可能以编程方式发现的,并且是许多微妙错误的根源。
*方法*包含可以调用的可执行代码。方法是继承的,并且在非反射代码行为中,例如重载,重写和隐藏由编译器强制执行。相反,反射代码使得方法选择可以被限制在特定的类而不考虑其超类。可以访问超类方法,但可以确定它们的声明类;如果没有反射,这是不可能以编程方式发现的,并且是许多微妙错误的根源。
[`java.lang.reflect.Method`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html) 类提供 API 以访问有关方法修饰符,返回类型,参数,注释和抛出异常的信息。它还用于调用方法。以下各节介绍了这些主题:
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/reflect/member/ctor.html](https://docs.oracle.com/javase/tutorial/reflect/member/ctor.html)
_ 构造器*用于创建作为类实例的对象。通常,它会在调用方法或访问字段之前执行初始化类所需的操作。构造器永远不会被继承。
*构造器*用于创建作为类实例的对象。通常,它会在调用方法或访问字段之前执行初始化类所需的操作。构造器永远不会被继承。
与方法类似,反射提供 API 来发现和检索类的构造器,并获取声明信息,例如修饰符,参数,注释和抛出异常。也可以使用指定的构造器创建类的新实例。使用构造器时使用的关键类是 [`Class`](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html)[`java.lang.reflect.Constructor`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html) 。涉及构造器的常见操作将在以下部分中介绍:
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html](https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html)
_ 多态性*的字典定义是指生物学中的原理,其中生物体或物种可以具有许多不同的形式或阶段。这个原则也可以应用于面向对象的编程和 Java 语言之类的语言。类的子类可以定义它们自己的唯一行为,但仍然共享父类的一些相同功能。
*多态性*的字典定义是指生物学中的原理,其中生物体或物种可以具有许多不同的形式或阶段。这个原则也可以应用于面向对象的编程和 Java 语言之类的语言。类的子类可以定义它们自己的唯一行为,但仍然共享父类的一些相同功能。
可以通过对`Bicycle`类的微小修改来证明多态性。例如,可以将`printDescription`方法添加到显示当前存储在实例中的所有数据的类中。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/reflect/special/array.html](https://docs.oracle.com/javase/tutorial/reflect/special/array.html)
_ 数组*是参考类型的对象,其包含固定数量的相同类型的组件;数组的长度是不可变的。创建数组实例需要了解长度和组件类型。每个组分可以是原始类型(例如`byte``int``double`),参考类型(例如 [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html)[`Object`](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html)[`java.nio.CharBuffer`](https://docs.oracle.com/javase/8/docs/api/java/nio/CharBuffer.html) )或数组。多维数组实际上只是包含数组类型组件的数组。
*数组*是参考类型的对象,其包含固定数量的相同类型的组件;数组的长度是不可变的。创建数组实例需要了解长度和组件类型。每个组分可以是原始类型(例如`byte``int``double`),参考类型(例如 [`String`](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html)[`Object`](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html)[`java.nio.CharBuffer`](https://docs.oracle.com/javase/8/docs/api/java/nio/CharBuffer.html) )或数组。多维数组实际上只是包含数组类型组件的数组。
数组在 Java 虚拟机中实现。数组上唯一的方法是从 [`Object`](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) 继承的方法。数组的长度不是其类型的一部分;数组有`length`字段,可通过 [`java.lang.reflect.Array.getLength()`](https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Array.html#getLength-java.lang.Object-) 访问。
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/networking/overview/alreadyknow.html](https://docs.oracle.com/javase/tutorial/networking/overview/alreadyknow.html)
_ 网络*这个词在许多程序员的心中引起了恐惧。不要害怕!使用 Java 环境中提供的网络功能非常简单。事实上,您可能已经使用网络甚至没有意识到它!
*网络*这个词在许多程序员的心中引起了恐惧。不要害怕!使用 Java 环境中提供的网络功能非常简单。事实上,您可能已经使用网络甚至没有意识到它!
## 从网络加载小程序
......
......@@ -20,7 +20,7 @@
**Definition:** 
_ 套接字*是网络上运行的两个程序之间的双向通信链路的一个端点。套接字绑定到端口号,以便 TCP 层可以标识要发送到的数据的应用程序。
*套接字*是网络上运行的两个程序之间的双向通信链路的一个端点。套接字绑定到端口号,以便 TCP 层可以标识要发送到的数据的应用程序。
* * *
......
......@@ -10,7 +10,7 @@
**Definition:** 
_ 数据报*是通过网络发送的独立,自包含的消息,其到达,到达时间和内容不能得到保证。
*数据报*是通过网络发送的独立,自包含的消息,其到达,到达时间和内容不能得到保证。
* * *
......
......@@ -2,7 +2,7 @@
> 原文: [https://docs.oracle.com/javase/tutorial/networking/nifs/definition.html](https://docs.oracle.com/javase/tutorial/networking/nifs/definition.html)
_ 网络接口*是计算机与私有或公共网络之间的互连点。网络接口通常是网络接口卡(NIC),但不必具有物理形式。相反,网络接口可以用软件实现。例如,环回接口(IPv4 的`127.0.0.1`和 IPv6 的`:: 1` )不是物理设备,而是模拟网络接口的软件。环回接口通常用于测试环境。
*网络接口*是计算机与私有或公共网络之间的互连点。网络接口通常是网络接口卡(NIC),但不必具有物理形式。相反,网络接口可以用软件实现。例如,环回接口(IPv4 的`127.0.0.1`和 IPv6 的`:: 1` )不是物理设备,而是模拟网络接口的软件。环回接口通常用于测试环境。
[`java.net.NetworkInterface`](https://docs.oracle.com/javase/8/docs/api/java/net/NetworkInterface.html) 类表示两种类型的接口。
......
......@@ -2,9 +2,9 @@
> 原文: [https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html](https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)
_ 抽象类*是一个声明为`abstract`的类 - 它可能包含也可能不包含抽象方法。抽象类无法实例化,但可以进行子类化。
*抽象类*是一个声明为`abstract`的类 - 它可能包含也可能不包含抽象方法。抽象类无法实例化,但可以进行子类化。
_ 抽象方法*是一个声明没有实现的方法(没有大括号,后跟分号),如下所示:
*抽象方法*是一个声明没有实现的方法(没有大括号,后跟分号),如下所示:
```java
abstract void moveTo(double deltaX, double deltaY);
......
......@@ -60,7 +60,7 @@ DNS 包含将计算机名称映射到 IP 地址的绑定。 LDAP 名称绑定到
## 上下文
_ 上下文*是一组名称到对象的绑定。每个上下文都有一个相关的命名约定。上下文始终提供返回对象的查找(*解析*)操作,它通常还提供诸如绑定名称,解除绑定名称和列出绑定名称的操作。一个上下文对象中的名称可以绑定到具有相同命名约定的另一个上下文对象(称为*子上下文*)。
*上下文*是一组名称到对象的绑定。每个上下文都有一个相关的命名约定。上下文始终提供返回对象的查找(*解析*)操作,它通常还提供诸如绑定名称,解除绑定名称和列出绑定名称的操作。一个上下文对象中的名称可以绑定到具有相同命名约定的另一个上下文对象(称为*子上下文*)。
![Several examples of contexts, bound to subcontexts.](img/62086fc2065763b608516d9adc409443.jpg)
......@@ -70,10 +70,10 @@ UNIX 文件系统中的文件目录(例如`/ usr` )表示上下文。相对
## 命名系统和命名空间
_ 命名系统*是相同类型的连接的一组上下文(它们具有相同的命名约定)并提供一组通用操作。
*命名系统*是相同类型的连接的一组上下文(它们具有相同的命名约定)并提供一组通用操作。
实现 DNS 的系统是命名系统。使用 LDAP 进行通信的系统是命名系统。
命名系统为其客户提供*命名服务*,以执行与命名相关的操作。命名服务通过其自己的接口访问。 DNS 提供命名服务,将机器名称映射到 IP 地址。 LDAP 提供了一个命名服务,可将 LDAP 名称映射到 LDAP 条目。文件系统提供命名服务,将文件名映射到文件和目录。
_ 命名空间*是命名系统中所有可能名称的集合。 UNIX 文件系统具有一个名称空间,该名称空间由该文件系统中的所有文件和目录名称组成。 DNS 命名空间包含 DNS 域和条目的名称。 LDAP 名称空间包含 LDAP 条目的名称。
\ No newline at end of file
*命名空间*是命名系统中所有可能名称的集合。 UNIX 文件系统具有一个名称空间,该名称空间由该文件系统中的所有文件和目录名称组成。 DNS 命名空间包含 DNS 域和条目的名称。 LDAP 名称空间包含 LDAP 条目的名称。
\ No newline at end of file
......@@ -12,7 +12,7 @@
一个例子是电话公司的目录服务。它将订户的姓名映射到他的地址和电话号码。计算机的目录服务非常类似于电话公司的目录服务,因为它们都可用于存储诸如电话号码和地址之类的信息。然而,计算机的目录服务功能更强大,因为它可以在线获得,并且可以用于存储可供用户,程序甚至计算机本身和其他计算机使用的各种信息。
_ 目录对象*表示计算环境中的对象。例如,可以使用目录对象来表示打印机,人,计算机或网络。目录对象包含*属性*,用于描述它所代表的对象。
*目录对象*表示计算环境中的对象。例如,可以使用目录对象来表示打印机,人,计算机或网络。目录对象包含*属性*,用于描述它所代表的对象。
## 属性
......@@ -28,7 +28,7 @@ Attribute Identifier : Attribute Value
## 目录和目录服务
_ 目录*是一组连接的目录对象。*目录服务*是一种服务,它提供用于创建,添加,删除和修改与目录中的对象相关联的属性的操作。该服务通过自己的接口访问。
*目录*是一组连接的目录对象。*目录服务*是一种服务,它提供用于创建,添加,删除和修改与目录中的对象相关联的属性的操作。该服务通过自己的接口访问。
许多目录服务的例子都是可能的。
......
......@@ -18,7 +18,7 @@ JNDI 包含在 Java SE 平台中。
JNDI API 是用于访问任何命名或目录服务的通用 API。通过在 JNDI 下插入服务供应器,可以实现对命名或目录服务的实际访问。有关 JNDI 体系结构和服务提供者角色的概述,请参见 [JNDI 概述](../overview/index.html)课程。
_ 服务提供商*是将 JNDI API 映射到命名或目录服务器的实际调用的软件。通常,服务提供者的角色与命名/目录服务器的角色不同。在客户端/服务器软件的术语中,JNDI 和服务提供者是*客户端*(称为 _JNDI 客户端*),命名/目录服务器是*服务器 _ ]。
*服务提供商*是将 JNDI API 映射到命名或目录服务器的实际调用的软件。通常,服务提供者的角色与命名/目录服务器的角色不同。在客户端/服务器软件的术语中,JNDI 和服务提供者是*客户端*(称为 _JNDI 客户端*),命名/目录服务器是*服务器 _ ]。
客户端和服务器可以以多种方式进行交互。在一种常见的方式中,它们使用网络协议,以便客户端和服务器可以在网络环境中自主存在。只要客户端符合指定的协议,服务器通常支持许多不同的客户端,而不仅仅是 JNDI 客户端。 JNDI 没有规定 JNDI 客户端和服务器之间的任何特定交互方式。例如,在一个极端,客户端和服务器可以是同一个实体。
......
......@@ -10,7 +10,7 @@
4. 使用所需内容填充目录服务器。要使用本教程中的示例,需要在服务器上填充特殊的[内容](#LDIF)
5. 编写 JNDI 应用程序以访问 Directory,编译并运行 Directory Server 以获得所需的结果。 JNDI 示例将在下一个[课程](../ops/index.html)中介绍。
_ 前两个*步骤将在前一节中介绍。本课程的其余部分讨论了步骤**和步骤**的一部分。涉及编写 JNDI 应用程序的步骤**将在下一课中介绍,该课程演示如何编写 JNDI 应用程序以对目录执行各种操作。
*前两个*步骤将在前一节中介绍。本课程的其余部分讨论了步骤*三*和步骤*四*的一部分。涉及编写 JNDI 应用程序的步骤*五*将在下一课中介绍,该课程演示如何编写 JNDI 应用程序以对目录执行各种操作。
一旦您设置了目录,或者已经指示您的程序与现有目录进行通信,您可以在那里找到哪种信息?
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册