# Java SE 8 程序员 II 考试

> 原文： [https://docs.oracle.com/javase/tutorial/extra/certification/javase-8-programmer2.html](https://docs.oracle.com/javase/tutorial/extra/certification/javase-8-programmer2.html)

此页面将 Java 教程中的部分映射到 Java SE 8 Programmer II 考试中涵盖的主题。此考试与 Oracle Certified Professional，Java SE 8 Programmer 证书相关联。本次考试涉及的主题是：

1.  [Java 类设计](#classDesign)
2.  [高级类设计](#advancedClassDesign)
3.  [泛型和收藏](#generics)
4.  [Lambda 内置函数式接口](#lambda)
5.  [Java Stream API](#stream)
6.  [异常和断言](#exceptions)
7.  [使用 Java SE 8 日期/时间 API](#datetime)
8.  [Java I / O 基础](#io)
9.  [Java 文件 I / O（NIO.2）](#nio2)
10.  [并发](#concurrency)
11.  [使用 JDBC 构建数据库应用程序](#jdbc)
12.  [本地化](#localization)

**第 1 项：**实现封装。

*   [什么是对象？](../../java/concepts/object.html)

**第 2 项：**实现继承，包括可见性修饰符和组合。

*   [继承](../../java/IandI/subclasses.html)
*   [覆盖和隐藏方法](../../java/IandI/override.html)

**第 3 项：**实现多态性。

*   [多态性](../../java/IandI/polymorphism.html)

**第 4 项：**从 `Object` 类覆盖 `hasCode` ，`等于`和 `toString` 方法。

*   [对象作为超类](../../java/IandI/objectclass.html)

**第 5 项：**创建并使用单例类和不可变类。

*   [单例设计模式](../../ext/basics/spi.html#singleton)
*   [定义不可变对象的策略](../../essential/concurrency/imstrat.html)

**第 6 项：**开发在初始化块，变量，方法和类时使用`静态`关键字的代码。

*   [了解类成员](../../java/javaOO/classvars.html)
*   [初始化字段](../../java/javaOO/initial.html)
*   [覆盖和隐藏方法](../../java/IandI/override.html)
*   [默认方法](../../java/IandI/defaultmethods.html)

**第 1 项：**开发使用抽象类和方法的代码。

*   [摘要方法和类](../../java/IandI/abstract.html)

**第 2 项：**开发使用 `final` 的代码。

*   [变量](../../java/nutsandbolts/variables.html)
*   [了解类成员](../../java/javaOO/classvars.html)

**第 3 项：**创建内部类，包括静态内部类，本地类，嵌套类和匿名内部类。

*   [嵌套类](../../java/javaOO/nested.html)
*   [内部类示例](../../java/javaOO/innerclasses.html)
*   [本地类](../../java/javaOO/localclasses.html)
*   [匿名类](../../java/javaOO/anonymousclasses.html)
*   [何时使用嵌套类，本地类，匿名类和 Lambda 表达式](../../java/javaOO/whentouse.html)

**第 4 项：**使用枚举类型，包括 `enum` 类型中的方法和构造函数

*   [枚举类型](../../java/javaOO/enum.html)
*   [默认方法](../../java/IandI/defaultmethods.html)
*   [枚举类型](../../reflect/special/enum.html)

**第 5 项：**开发声明，实现和/或扩展接口并使用 `@Override` 注释的代码。

*   [预定义注释类型](../../java/annotations/predefined.html)

**第 6 项：**创建并使用 lambda 表达式。

*   [Lambda 表达式](../../java/javaOO/lambdaexpressions.html)

[Generics（更新）](../../java/generics/index.html)课程， [Collections](../../collections/index.html) 路径，特别是指定页面。

**第 1 项**：创建并使用泛型类。

*   [泛型类型](../../java/generics/types.html)

**第 2 项**：创建并使用 `ArrayList` ， `TreeSet` ， `TreeMap` 和 `ArrayDeque` 对象。

*   [列表接口](../../collections/interfaces/list.html)
*   [集合接口](../../collections/interfaces/set.html)
*   [映射接口](../../collections/interfaces/map.html)
*   [Deque 接口](../../collections/interfaces/deque.html)

**第 3 项**：使用 `java.util.Comparator` 和 `java.lang.Comparable` 接口。

*   [对象排序](../../collections/interfaces/order.html)

**第 4 项**：集合，流和过滤器。

*   [流式操作](../../collections/streams/index.html)

**项目 5** ：使用`对 `Streams` 和 `List` 的每种`方法进行迭代。

*   [`collection`接口](../../collections/interfaces/collection.html)
*   [流式操作](../../collections/streams/index.html)

**第 6 项**：描述 `Stream` 接口和 `Stream` 管道。

*   [流式操作](../../collections/streams/index.html)

**第 7 项**：使用 lambda 表达式过滤集合。

*   [`collection`接口](../../collections/interfaces/collection.html)
*   [流式操作](../../collections/streams/index.html)

**第 8 项**：对流使用方法引用。

*   [方法参考](../../java/javaOO/methodreferences.html)

[Lambda 表达式](../../java/javaOO/lambdaexpressions.html)和[聚合操作](../../collections/streams/index.html)部分涵盖以下某些项目：

**第 1 项**：使用 `java.util.function` 软件包中包含的内置接口，如 `Predicate` ， `Consumer` ， `]功能`和`供应商`。

**第 2 项**：开发使用原始版本的函数式接口的代码。

**第 3 项**：开发使用二进制版本的函数式接口的代码。

**第 4 项**：开发使用 `UnaryOperator` 接口的代码。

[Lambda 表达式](../../java/javaOO/lambdaexpressions.html)和[聚合操作](../../collections/streams/index.html)部分涵盖以下某些项目：

**第 1 项**：开发代码，使用 peek（）和 map（）方法从对象中提取数据，包括 map（）方法的原始版本。

**第 2 项**：使用 Stream 类的搜索方法搜索数据，包括 findFirst，findAny，anyMatch，allMatch，noneMatch。

**第 3 项**：开发使用 Optional 类的代码。

**第 4 项**：开发使用 Stream 数据方法和计算方法的代码。

**第 5 项**：使用 Stream API 对集合进行排序。

**第 6 项**：使用 Collectors 类使用 collect 方法和组/分区数据将结果保存到集合中。

**第 7 项**：在 Stream API 中使用 flatMap（）方法。

**第 1 项：**使用`尝试` - `捕捉`和`抛出`语句。

*   [指定方法](../../essential/exceptions/declaring.html)引发的异常
*   [如何抛出异常](../../essential/exceptions/throwing.html)

**第 2 项：**使用`捕获`，`多次捕获`和`最终`子句。

*   [捕获和处理异常](../../essential/exceptions/handling.html)
*   [`try`块](../../essential/exceptions/try.html)
*   [`catch`块](../../essential/exceptions/catch.html)
*   [`finally`块](../../essential/exceptions/finally.html)
*   [全部放在一起](../../essential/exceptions/putItTogether.html)

**第 3 项：**使用`try-with-resources`语句使用 autoclose 资源。

*   [`try-with-resources`](../../essential/exceptions/tryResourceClose.html)

**第 4 项：**创建自定义例外和自动关闭资源。

*   [创建异常类](../../essential/exceptions/creating.html)

**第 5 项：**使用断言测试不变量。

*   [问题和练习：类（断言示例）](../../java/javaOO/QandE/creating-questions.html)

**第 1 项：**使用 `LocalDate` ， `LocalTime` ，`创建和管理基于日期和基于时间的事件，包括将日期和时间组合成单个对象] LocalDateTime` ， `Instant` ， `Period` 和 `Duration` 。

*   [日期类](../../datetime/iso/date.html)
*   [日期和时间类](../../datetime/iso/datetime.html)
*   [即时班](../../datetime/iso/instant.html)
*   [期间和持续时间](../../datetime/iso/period.html)

**第 2 项：**处理跨时区的日期和时间，并管理夏令时产生的变化，包括格式日期和时间值。

*   [时区和偏移类](../../datetime/iso/timezones.html)

**第 3 项：**使用 `Instant` ， `Period` ， `Duration` 和`定义并创建和管理基于日期和基于时间的事件] TemporalUnit` 。

*   [即时班](../../datetime/iso/instant.html)
*   [期间和持续时间](../../datetime/iso/period.html)
*   [时间包](../../datetime/iso/temporal.html)

**项目 1** ：从控制台读取和写入数据。

[I / O Streams](../../essential/io/streams.html) 课程，特别是以下页面：

*   [Byte Streams](../../essential/io/bytestreams.html)
*   来自命令行的 [I / O](../../essential/io/cl.html)

**第 2 项**：使用 `BufferedReader` ， `BufferedWriter` ， `File` ， `FileReader` ， `FileWriter` ， `FileInputStream` ， `FileOutputStream` ， `ObjectOutputStream` ， `ObjectInputStream` 和 `PrintWriter` 在 `java.io 包中`。

[文件 I / O（具有 NIO.2）](../../essential/io/fileio.html)课程，特别是以下页面：

*   [阅读，写作和创建文件](../../essential/io/file.html)
*   [创建和阅读目录](../../essential/io/dirs.html)
*   [随机存取文件](../../essential/io/rafs.html)

**第 1 项**：使用 `Path` 接口操作文件和目录路径。

*   [路径是什么？ （和其他文件系统事实）](../../essential/io/path.html)
*   [路径操作](../../essential/io/pathOps.html)

**第 2 项**：使用`文件`类检查，读取，删除，复制，移动和管理文件或目录的元数据。

*   [文件操作](../../essential/io/fileOps.html)
*   [检查文件或目录](../../essential/io/check.html)
*   [删除文件或目录](../../essential/io/delete.html)
*   [复制文件或目录](../../essential/io/copy.html)
*   [移动文件或目录](../../essential/io/move.html)
*   [管理元数据（文件和文件存储属性）](../../essential/io/fileAttr.html)
*   [走文件树](../../essential/io/walk.html)
*   [查找文件](../../essential/io/find.html)
*   [什么是 Glob？](../../essential/io/fileOps.html#glob)
*   [观看目录变更](../../essential/io/notification.html)

**第 3 项**：使用流 API 与 NIO.2。

Java 教程不涉及设计模式主题。以下参考资料介绍了使用 Java 编程语言的设计模式：

*   _ 头部优先设计模式 _ 由 Elizabeth Freeman 等人。
*   _Tony Bevis 的 Java Design Pattern Essentials_

**第 1 项：**编写声明，实现和/或扩展接口的代码。

*   [定义接口](../../java/IandI/interfaceDef.html)
*   [接口](../../java/IandI/createinterface.html)
*   [实现接口](../../java/IandI/usinginterface.html)

**第 2 项：**在接口继承和类继承之间进行选择。

**第 3 项：**开发实现“is-a”和/或“has-a”关系的代码。

**第 4 项：**应用对象组成原则。

**第 5 项：**使用 Singleton 设计模式设计一个类。

**项目 6：**编写实现 DAO 模式的代码。

**第 7 项：**使用工厂设计和创建对象，并使用 API​​中的工厂。

**第 1 项：**搜索，解析和构建字符串。

*   [字符串](../../java/data/strings.html)
*   [在数字和字符串之间转换](../../java/data/converting.html)
*   [比较字符串和字符串部分](../../java/data/comparestrings.html)
*   [操纵字符串中的字符](../../java/data/manipstrings.html)

**第 2 项：**使用正则表达式搜索，解析和替换字符串。

*   [模式类](../../essential/regex/pattern.html)的方法
*   [匹配类](../../essential/regex/matcher.html)的方法

**第 3 项：**使用字符串格式。

*   [字符串](../../java/data/strings.html)
*   [格式化数字打印输出](../../java/data/numberformat.html)

**项目 1：**使用 `Runnable` ， `Callable` 创建工作线程并使用 `ExecutorService` 同时执行任务。

*   [执行人](../../essential/concurrency/executors.html)
*   [执行器接口](../../essential/concurrency/exinter.html)
*   [线程池](../../essential/concurrency/pools.html)

**第 2 项：**识别死锁，饥饿，活锁和竞争条件中潜在的线程问题。

*   [内存一致性错误](../../essential/concurrency/memconsist.html)
*   [死锁](../../essential/concurrency/deadlock.html)

**第 3 项：**使用 synchronized 关键字和 java.util.concurrent.atomic 包来控制线程执行的顺序。

*   [原子变量](../../essential/concurrency/atomicvars.html)

**第 4 项：**使用 java.util.concurrent 集合和类，包括 CyclicBarrier 和 CopyOnWriteArrayList。

*   [并发收藏](../../essential/concurrency/collections.html)

**第 5 项：**使用并行 Fork / Join Framework。

*   [叉/加入](../../essential/concurrency/forkjoin.html)

**项目 6：**使用并行流，包括缩减，分解，合并过程，流水线和性能。

**第 1 项：**描述构成 JDBC API 核心的接口，包括`驱动程序`，`连接`，`语句`和 `] ResultSet` 接口及其与提供程序实现的关系。

*   [JDBC 基础知识：入门](../../jdbc/basics/gettingstarted.html)

**第 2 项：**使用 DriverManager 类（包括 JDBC URL）标识连接数据库所需的组件。

*   [建立连接](../../jdbc/basics/connecting.html)
*   [连接数据源对象](../../jdbc/basics/sqldatasources.html)

**第 3 项：**提交查询并从数据库中读取结果，包括创建语句，返回结果集，迭代结果以及正确关闭结果集，语句和连接。

*   [使用 JDBC 处理 SQL 语句](../../jdbc/basics/processingsqlstatements.html)
*   [使用交易](../../jdbc/basics/transactions.html)
*   [使用 RowSet 对象](../../jdbc/basics/rowset.html)
*   [使用 JdbcRowSet 对象](../../jdbc/basics/jdbcrowset.html)

**第 1 项：**使用 `Locale` 对象读取并设置语言环境。

*   [设置区域设置](../../i18n/locale/index.html)
*   [创建区域设置](../../i18n/locale/create.html)

**第 2 项：**创建并读取`属性`文件。

*   [关于 ResourceBundle 类](../../i18n/resbundle/concept.html)
*   [使用属性文件](../../i18n/resbundle/propfile.html)备份 ResourceBundle

**第 3 项：**为每个语言环境构建资源包并在应用程序中加载资源包。

*   [自定义资源包加载](../../i18n/resbundle/control.html)