Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
apachecn-java-zh
提交
f1e71311
A
apachecn-java-zh
项目概览
OpenDocCN
/
apachecn-java-zh
11 个月 前同步成功
通知
5
Star
53
Fork
13
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-java-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f1e71311
编写于
5月 12, 2021
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2021-05-12 21:49:50
上级
bbec2994
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
37 addition
and
37 deletion
+37
-37
new/master-java11/11.md
new/master-java11/11.md
+36
-36
new/master-java11/18.md
new/master-java11/18.md
+1
-1
未找到文件。
new/master-java11/11.md
浏览文件 @
f1e71311
...
...
@@ -116,7 +116,7 @@ JDK1.1 版引入了支持 HTTP 特定特性的`HttpURLConnection`API。这是一
原来的 HTTP 客户机存在一些问题,这些问题使得它适合用新的 Java 平台进行更新。这些问题如下:
*
基本的
`URLConnection`
API 已经失效了一些协议,比如 Gopher 和 FTP,这些年来成为了一个日益严重的问题
*
`HttpURLConnection`
API 早于
http
1.1,过于抽象,使其不易使用
*
`HttpURLConnection`
API 早于
HTTP
1.1,过于抽象,使其不易使用
*
HTTP 客户机的文档记录严重不足,使得 API 令人沮丧,难以使用
*
客户端一次只能在一个线程上运行
*
由于 API 早于 HTTP1.1,并且缺乏足够的文档,因此维护起来非常困难
...
...
@@ -237,11 +237,11 @@ public class HttpUrlConnectionExample {
# 了解 Javadoc 和 Doclet API
Javadoc 和 Doclet API 密切相关。Javadoc 是一个文档工具,
docletAPI 提供了一些功能,以便我们可以检查嵌入在库和程序源代码级别的 Javadoc 注释。在本节中,我们将回顾 docletapi(Java9 之前)的早期状态,然后探讨在当前 Java 平台中引入 d
ocletAPI 的更改。最后,我们将回顾 Javadoc。
Javadoc 和 Doclet API 密切相关。Javadoc 是一个文档工具,
DocletAPI 提供了一些功能,以便我们可以检查嵌入在库和程序源代码级别的 Javadoc 注释。在本节中,我们将回顾 DocletAPI(Java9 之前)的早期状态,然后探讨在当前 Java 平台中引入 D
ocletAPI 的更改。最后,我们将回顾 Javadoc。
# Java9 之前的 Doclet API
java9d
ocletAPI 之前的版本,或者
`com.sun.javadoc`
包,使我们能够查看源代码中的 Javadoc 注释。调用 Doclet 是通过使用
`start`
方法完成的。此方法的签名为
`public static boolean start(RootDoc root)`
。我们将使用
`RootDoc`
实例作为程序结构信息的容器。
Java9 D
ocletAPI 之前的版本,或者
`com.sun.javadoc`
包,使我们能够查看源代码中的 Javadoc 注释。调用 Doclet 是通过使用
`start`
方法完成的。此方法的签名为
`public static boolean start(RootDoc root)`
。我们将使用
`RootDoc`
实例作为程序结构信息的容器。
为了调用 Javadoc,我们需要传递以下信息:
...
...
@@ -320,7 +320,7 @@ TYPE: <exception type> | NAME: <exception name> | COMMENT: <exception comment>
# API 枚举
API 由一个
enum
`LanguageVersion`
组成,它提供 Java 编程语言版本。此枚举的常量是
`Java_1_1`
和
`Java_1_5`
。
API 由一个
枚举
`LanguageVersion`
组成,它提供 Java 编程语言版本。此枚举的常量是
`Java_1_1`
和
`Java_1_5`
。
# API 类
...
...
@@ -490,7 +490,7 @@ Doclet API 包含以下列出的接口。接口名称是不言自明的。有关
下面三节将进一步探讨这些语言模型 API 组件中的每一个。
#
AnnotatedConstruct
接口
#
`AnnotatedConstruction`
接口
`AnnotatedConstruction`
接口为语言模型 API 提供了一个可注释的构造,该 API 自版本 1.8 以来一直是 Java 平台的一部分。适用于元素(接口
`Element`
)或类型(接口
`TypeMirror`
)的构造,每个构造的注释不同,如下表所示:
...
...
@@ -504,7 +504,7 @@ Doclet API 包含以下列出的接口。接口名称是不言自明的。有关
*
`getAnnotationMirrors()`
:此方法返回构造上的注释列表
*
`getAnnotationsByType(Class<A> annotationType)`
:此方法返回构造的相关注释
#
SourceVersion
枚举
#
`SourceVersion`
枚举
`SourceVersion`
枚举由以下常量组成:
...
...
@@ -519,7 +519,7 @@ Doclet API 包含以下列出的接口。接口名称是不言自明的。有关
*
`RELEASE_8`
*
`RELEASE_9`
预计随着 Java 平台的正式发布,
`SourceVersion`
enum
将更新为包含
`RELEASE_10`
和
`RELEASE_11`
。
预计随着 Java 平台的正式发布,
`SourceVersion`
枚举
将更新为包含
`RELEASE_10`
和
`RELEASE_11`
。
此枚举还包含以下几种方法:
...
...
@@ -618,7 +618,7 @@ protected UnknownEntityException(String message)
*
`notifyAll()`
*
`wait()`
# 使用
html5javad
oc
# 使用
HTML5 JavaD
oc
Javadoc 工具已针对现代 Java 平台(定义为 Java9 及更高版本)进行了更新。除了 HTML4 之外,它还可以生成 HTML5 标记输出。Javadoc 工具提供了对 HTML4 和 HTML5 的支持。从 Java10 开始,HTML5 是默认的输出标记格式。
...
...
@@ -644,9 +644,9 @@ public class JavadocExample {
}
```
完成包或类后,可以使用 Javadoc 工具生成 Javadoc,可以从命令行或 IDE 中运行位于 JDK
`/bin`
目录中的 Javadoc 工具。每个 IDE 处理 Javadoc 生成的方式都不同。例如,在 Eclipse 中,您可以从下拉菜单中选择
Project,然后选择 generatejavadoc。在 IntelliJ IDEA IDEA 中,选择 Tools 下拉菜单,然后选择 Generate Javadoc
。
完成包或类后,可以使用 Javadoc 工具生成 Javadoc,可以从命令行或 IDE 中运行位于 JDK
`/bin`
目录中的 Javadoc 工具。每个 IDE 处理 Javadoc 生成的方式都不同。例如,在 Eclipse 中,您可以从下拉菜单中选择
“项目”,然后选择“生成 JavaDoc”。在 IntelliJ IDEA IDEA 中,选择“工具”下拉菜单,然后选择“生成 JavaDoc”
。
下面的截图显示了
Generate
Javadoc 功能的 IntelliJ IDEA 接口。如您所见,
`-html5`
命令行参数已包含:
下面的截图显示了
生成
Javadoc 功能的 IntelliJ IDEA 接口。如您所见,
`-html5`
命令行参数已包含:
![](
img/ee0c059a-46ae-45ba-8171-347dbb1e8a78.png
)
...
...
@@ -733,11 +733,11 @@ Javadoc 目录树
# 引入案例搜索
Javadoc 搜索功能通过使用
Camel Case search
提供了一个很好的快捷方式。例如,我们可以搜索
`openED`
来找到
`openExternalDatabase()`
方法。
Javadoc 搜索功能通过使用
驼峰大小写搜索
提供了一个很好的快捷方式。例如,我们可以搜索
`openED`
来找到
`openExternalDatabase()`
方法。
# 对多 JRE 功能的更改
**mJRE**
(简称
**Multiple
JRE**
)特性以前用于指定启动应用程序的特定 JRE 版本或版本范围。我们可以通过命令行选项
`-version`
或者通过 JAR 文件清单中的一个条目来实现这一点。以下流程图说明了根据我们的选择所发生的情况:
**mJRE**
(简称
**多重
JRE**
)特性以前用于指定启动应用程序的特定 JRE 版本或版本范围。我们可以通过命令行选项
`-version`
或者通过 JAR 文件清单中的一个条目来实现这一点。以下流程图说明了根据我们的选择所发生的情况:
![](
img/e96e35e9-c105-4eaf-b741-0e69b856ac91.png
)
...
...
@@ -758,7 +758,7 @@ Java 平台最近的一个变化是为 Nashorn 的 ECMAScript AST 创建了一
# 犀牛
oraclen
ashorn 是 Oracle 用 Java 开发的 JVM 的 JavaScript 引擎。它是与 Java8 一起发布的,旨在为开发人员提供一个高效、轻量级的 JavaScript 运行时引擎。使用这个引擎,开发人员能够在 Java 应用程序中嵌入 JavaScript 代码。在 Java8 之前,开发人员可以访问 Netscape 创建的 JavaScript 引擎。该引擎于 1997 年推出,由 Mozilla 维护。
Oracle N
ashorn 是 Oracle 用 Java 开发的 JVM 的 JavaScript 引擎。它是与 Java8 一起发布的,旨在为开发人员提供一个高效、轻量级的 JavaScript 运行时引擎。使用这个引擎,开发人员能够在 Java 应用程序中嵌入 JavaScript 代码。在 Java8 之前,开发人员可以访问 Netscape 创建的 JavaScript 引擎。该引擎于 1997 年推出,由 Mozilla 维护。
Nashorn 既可以用作命令行工具,也可以用作 Java 应用程序中的嵌入式解释器。让我们看看这两个例子
...
...
@@ -776,7 +776,7 @@ Nashorn 可执行文件的位置
![](
img/c363b799-e305-4757-ac57-55a76dadfaad.png
)
用
jjs
命令启动 Nashorn
用
`jjs`
命令启动 Nashorn
接下来,让我们创建一个简短的 JavaScript 并使用 Nashorn 运行它。考虑以下具有三行简单输出的简单 JavaScript 代码:
...
...
@@ -800,7 +800,7 @@ addtest();
![](
img/c4349d9a-0284-4fcd-a5b5-5ca4a3eec19e.png
)
-help
组件
`-help`
组件
如您所见,使用
`-scripting`
选项使我们能够通过使用 Nashorn 作为文本编辑器来创建脚本。使用 Nashorn 时,有几个内置函数非常有用:
...
...
@@ -881,7 +881,7 @@ Java 平台最近的一个变化是为 Nashorn 的 ECMAScript 抽象语法树提
![](
img/9f08b304-b258-4cc9-b27d-9927d409d174.png
)
这个 JDK.nashorn.API 文件.tree
类层次结构
`jdk.nashorn.api.tree`
类层次结构
下图说明了新 API 的复杂性,具有完整的接口层次结构:
...
...
@@ -978,19 +978,19 @@ JVMCI 实际上在某种程度上存在于 Java8 中。JVMCIAPI 只能通过在
Oracle 将 JVMCI 保持在 Java9 中的实验性,以允许进一步的测试,并为开发人员提供最高级别的保护。
#
BeanInfo
注释
#
`BeanInfo`
注释
`@beaninfo`
Javadoc 标签已经被更合适的注释所取代。此外,这些新注释现在在运行时被处理,这样就可以动态生成
`BeanInfo`
类。Java 的模块化导致了这种变化。自定义
`BeanInfo`
类的创建已经简化,客户机库已经模块化。
为了充分把握这一变化,我们将在进一步讨论本 JEP 之前回顾
`JavaBean`
、
`BeanProperty`
和
`SwingContainer`
。
#
Java豆
#
`JavaBean`
`JavaBean`
是一个 Java 类。与其他 Java 类一样,
`JavaBean`
是可重用代码。它们在设计上是独特的,因为它们将多个对象封装成一个对象。
`JavaBean`
类必须遵循三个约定:
*
构造器不应接受任何参数
*
它必须是可序列化的
*
它的属性必须包含
mutator 和 accessor
方法
*
它的属性必须包含
更改器和访问器
方法
下面是一个例子
`JavaBean`
类:
...
...
@@ -1027,9 +1027,9 @@ public class MyBean implements java.io.Serializable {
}
```
访问
`JavaBean`
类就像使用
mutator 和 accessor
方法一样简单。这对您来说可能并不新鲜,但很可能您不知道您创建的那些经过仔细编码的类被称为
`JavaBean`
类。
访问
`JavaBean`
类就像使用
更改器和访问器
方法一样简单。这对您来说可能并不新鲜,但很可能您不知道您创建的那些经过仔细编码的类被称为
`JavaBean`
类。
#
Bean 属性
#
`BeanProperty`
`BeanProperty`
是注释类型。我们使用这个注释来指定一个属性,这样我们就可以自动生成
`BeanInfo`
类。这是一个相对较新的 Java 注释,从 Java9 开始
...
...
@@ -1046,16 +1046,16 @@ public class MyBean implements java.io.Serializable {
# 旋转容器
`SwingContainer`
是注释类型。我们使用这个注释来指定与
s
wing 相关的属性,这样我们就可以自动生成
`BeanInfo`
类。
`SwingContainer`
是注释类型。我们使用这个注释来指定与
S
wing 相关的属性,这样我们就可以自动生成
`BeanInfo`
类。
SwingContainer
注释具有以下可选元素:
`SwingContainer`
注释具有以下可选元素:
*
`String delegate`
*
`boolean value`
现在我们已经复习了
`JavaBean`
、
`BeanProperty`
和
`SwingContainer`
,让我们来看看
`BeanInfo`
类。
#
BeanInfo
类
#
`BeanInfo`
类
在大多数情况下,
`BeanInfo`
类是在运行时自动生成的。例外是
`Swing`
类。这些类基于
`@beaninfo`
Javadoc 标记生成
`BeanInfo`
类。这是在编译时完成的,而不是在运行时。从 Java9 开始,
`@beaninfo`
标记被
`@interface JavaBean`
、
`@interface BeanProperty`
和
`@interface SwingContainer`
注释所取代。
...
...
@@ -1114,7 +1114,7 @@ public @interface SwingContainer {
*
扫描应用程序类路径以查找插件
*
加载插件服务提供程序类
*
在
iOr
egistry 中注册服务提供程序实例
*
在
IOR
egistry 中注册服务提供程序实例
|
|
`setCacheDirectory(File cacheDirectory)`
| 这是缓存文件的存储位置。 |
...
...
@@ -1139,7 +1139,7 @@ public @interface SwingContainer {
现代 Java 平台包括一个日志 API,它使平台类能够记录消息,并提供相应的服务来操作日志。在我们深入了解日志 API 和服务的新特性之前,让我们回顾一下 Java7 中引入的
`java.util.logging.api`
。
#
这个 Java.util.logging 文件包裹
#
`java.util.logging`包
`java.util.logging`
包包括类和接口,这些类和接口共同构成了 Java 的核心日志功能。创建此功能的目的如下:
...
...
@@ -1186,26 +1186,26 @@ public @interface SwingContainer {
# 登录现代 Java 平台
在 Java9 之前,有多种日志模式可用,包括
`java.util.logging`
、
`SLF4J`
和
`Log4J`
。后两种是第三方框架,它们有单独的
facade
和实现组件。这些模式已经在当前的 Java 平台中得到了复制。
在 Java9 之前,有多种日志模式可用,包括
`java.util.logging`
、
`SLF4J`
和
`Log4J`
。后两种是第三方框架,它们有单独的
外观
和实现组件。这些模式已经在当前的 Java 平台中得到了复制。
`java.base`
模块已更新以处理日志记录功能,不依赖
`java.util.logging`
API。它有一个独立的
facade
和实现组件。这意味着,当使用第三方框架时,JDK 只需要提供实现组件并返回与请求日志框架一起工作的平台日志记录器。
`java.base`
模块已更新以处理日志记录功能,不依赖
`java.util.logging`
API。它有一个独立的
外观
和实现组件。这意味着,当使用第三方框架时,JDK 只需要提供实现组件并返回与请求日志框架一起工作的平台日志记录器。
如下图所示,我们使用
`java.util.ServiceLoader`
API 加载
`LoggerFinder`
实现。如果在使用系统类加载器时找不到具体实现,JDK 将使用默认实现:
![](
img/46ceb6ca-1454-4b78-83a4-fb32470de09b.png
)
ServiceLoader API 的 LoggerFinder
实现
`ServiceLoader`
API 的
`LoggerFinder`
实现
# XML 目录
现代 Java 平台包括一个标准的 XML
catalogapi,以支持 oasisxmlcatalogs 标准 v1.1。新的 API 定义了 catalog 和 catalog
解析抽象,以便 JAXP 处理器可以使用它们。在本节中,我们将了解以下内容:
现代 Java 平台包括一个标准的 XML
CatalogAPI,以支持 OasisXMLCatalogs 标准 v1.1。新的 API 定义了目录和目录
解析抽象,以便 JAXP 处理器可以使用它们。在本节中,我们将了解以下内容:
*
o
asisXML 目录标准
*
O
asisXML 目录标准
*
JAXP 处理器
*
早期的 XML 目录
*
当前 XML 目录
#
o
asisXML 目录标准
#
O
asisXML 目录标准
**XML**
(
**可扩展标记语言**
)目录是由目录项组成的 XML 文档。每个条目将一个标识符与另一个位置配对。OASIS 是一个非盈利的财团,其使命是推进开放标准。他们在 2005 年发布了 XML 目录标准 1.1 版。本标准有两个基本用例:
...
...
@@ -1442,7 +1442,7 @@ MacOSX`com.apple.eawt`包是一个内部 API,从 Java9 开始,就不能再
有关查找函数的更改包括:
*
`MethodHandles`
现在可以绑定到接口中的非抽象方法
*
l
ookupAPI 允许从不同的上下文进行类查找
*
L
ookupAPI 允许从不同的上下文进行类查找
`MethodHandles.Lookup.findSpecial(Class<?> refs, String name, MethodType type, Class<?> specialCaller)`
类已被修改,以允许在接口上定位超级可调用方法。
...
...
@@ -1503,12 +1503,12 @@ MacOSX`com.apple.eawt`包是一个内部 API,从 Java9 开始,就不能再
*
`forRemoval()`
:
*
返回布尔值
`true`
,如果 API 元素已被安排在将来删除
*
如果 API 元素未被指定为将来删除,但已弃用,则返回布尔值
`false`
*
默认为
false
`
`
*
默认为
`false
`
*
`since()`
:
*
返回包含版本号或版本号的字符串,此时指定的 API 被标记为已弃用
#
@Deprecated
注释的真正含义
#
`@Deprecated`
注释的真正含义
当一个 API 或 API 中的方法已标记有
`@Deprecated`
注释时,通常存在以下一个或多个条件:
...
...
@@ -1517,7 +1517,7 @@ MacOSX`com.apple.eawt`包是一个内部 API,从 Java9 开始,就不能再
*
API 已被另一个 API 替换
*
API 是实验性的
# 本机头生成工具(
javah
)
# 本机头生成工具(
`javah`
)
Java 头工具(
`javah`
是用 Java8 引入 Java 平台的。它为开发人员提供了编写本机头的能力。从 Java10 开始,
`javah`
工具被 Java 编译器(
`javac`
中包含的功能所取代
...
...
new/master-java11/18.md
浏览文件 @
f1e71311
...
...
@@ -222,7 +222,7 @@
10.
构造器不应接受任何参数。
*
它必须是可序列化的
*
它的属性必须包含
mutator 和 accessor
方法
*
它的属性必须包含
更改器和访问器
方法
# 第十二章
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录