写点什么

java 布道者耗尽 20 年的功力整理完结 java 实战第 2 版文档

发布于: 1 小时前
java布道者耗尽20年的功力整理完结java实战第2版文档

前言

简单地说,Java 8 中的新增功能以及 Java 9 引入的变化(虽然并不显著)是自 Java 1.0 发布 21 年以来,Java 发生的最大变化。这一演进没有去掉任何东西,因此你原有的 Java 代码都能工作,但新功能提供了更强大的新习语和新设计模式,能帮助你编写更清晰、更简洁的代码。就像遇到所有新功能时那样,你一开始可能会想:“为什么又要去改我的语言呢?”但稍加练习之后,你就会发觉自己只用预期的一半时间,就用新功能写出了更短、更清晰的代码,这时你会意识到自己永远无法返回到“旧 Java”了。

本文会帮助你跨过“原理听起来不错,但还是有点儿新,不太适应”的门槛,从而熟练地编程。

“也许吧,”你可能会想,“可是 Lambda、函数式编程,这些不是那些留着胡子、穿着凉鞋的学究们在象牙塔里面琢磨的东西吗?”或许是的,但 Java 8 中加入的新想法的分量刚刚好,它们带来的好处也可以被普通的 Java 程序员所理解。

本文会从普通程序员的角度来叙述,偶尔谈谈“这是怎么来的”。

“Lambda,听起来跟天书一样!”是的,也许是这样,但它是一个很好的想法,让你可以编写简明的 Java 程序。许多人都熟悉事件处理器和回调函数,即注册一个对象,它包含会在事件发生时使用的一个方法。

Lambda 使人更容易在 Java 中广泛应用这种思想。简单来说,Lambda 和它的朋友“方法引用”让你在做其他事情的过程中,可以简明地将代码或方法作为参数传递进去执行。

在本文中,你会看到这种思想出现得比预想的还要频繁:从加入做比较的代码来简单地参数化一个排序方法,到利用新的 Stream API 在一组数据上表达复杂的查询指令。

“流(stream)是什么?”这是 Java 8 的一个新功能。它的特点和集合(collection)差不多,但有几个明显的优点,让我们可以使用新的编程风格。首先,如果你使用过 SQL 等数据库查询语言,就会发现用几行代码写出的查询语句要是换成 Java 要写好长。Java 8 的流支持这种简明的数据库查询式编程——但用的是 Java 语法,而无须了解数据库!其次,流被设计成无须同时将所有的数据调入内存(甚至根本无须计算),这样就可以处理无法装入计算机内存的流数据了。但 Java 8 可以对流做一些集合所不能的优化操作,例如,它可以将对同一个流的若干操作组合起来,从而只遍历一次数据,而不是花很大成本去多次遍历它。更妙的是,Java 可以自动将流操作并行化(集合可不行)。

“还有函数式编程,这又是什么?”就像面向对象编程一样,它是另一种编程风格,其核心是把函数作为值,前面在讨论 Lambda 的时候提到过。

Java 8 的好处在于,它把函数式编程中一些最好的想法融入到了大家熟悉的 Java 语法中。有了这个优秀的设计选择,你可以把函数式编程看作 Java 8 中一个额外的设计模式和习语,让你可以用更少的时间,编写更清晰、更简洁的代码。想想你的编程兵器库中的利器又多了一样。

当然,除了这些在概念上对 Java 有很大扩充的功能,我们也会解释很多其他有用的 Java 8 功能和更新,如默认方法、新的 Optional 类、CompletableFuture,以及新的日期和时间 API。

Java 9 的更新包括一个支持通过 Flow API 进行反应式编程的模块系统,以及其他各种增强功能。


下面将带大家,从目录、主要内容一步步来走进 java 实战第二版,因为全文包含的内容比较多,所以小编只把部分知识点拿出来给大家做一个介绍,需要完整版的小伙伴,可以转发此文关注小编,**点击这里,获得文档领取方式**!!希望本文能够得到大家的喜欢!!

目录


主要内容

本文分为六个部分,分别是:“基础知识”“使用流进行函数式数据处理”“使用流和 Lambda 进行高效编程”“无所不在的 Java”“提升 Java 的并发性”和“函数式编程以及 Java 未来的演进”。我们强烈建议你按顺序阅读前两部分的内容,因为很多概念都需要前面的章节作为基础,后面四个部分的内容你可以按照任意顺序阅读。大多数章节都附有几个测验,可以帮助你学习和掌握这些内容。

第一部分旨在帮助你初步使用 Java 8。学完这一部分,你将会对 Lambda 表达式有充分的了解,并可以编写简洁而灵活的代码,能够轻松适应不断变化的需求。

第 1 章总结 Java 的主要变化(Lambda 表达式、方法引用、流和默认方法),为学习后面的内容做准备。

本章内容

  • Java 怎么又变了

  • 日新月异的计算应用背景

  • Java 改进的压力

  • Java 8 和 Java 9 的核心新特性


第 2 章介绍行为参数化,这是 Java 8 非常依赖的一种软件开发模式,也是引入 Lambda 表达式的主要原因。

本章内容

  • 应对不断变化的需求

  • 行为参数化

  • 匿名类

  • Lambda 表达式预览

  • 真实示例:Comparator、Runnable 和 GUI


第 3 章对 Lambda 表达式和方法引用进行全面介绍,每一步都提供了代码示例和测验。

本章内容

  • Lambda 管中窥豹

  • 在哪里以及如何使用 Lambda

  • 环绕执行模式

  • 函数式接口,类型推断

  • 方法引用

  • Lambda 复合


第二部分详细讨论新的 Stream API。通过 Stream API,你将能够写出功能强大的代码,以声明性方式处理数据。学完这一部分,你将充分理解流是什么,以及如何在 Java 应用程序中使用它们来简洁而高效地处理数据集。

第 4 章介绍流的概念,并解释它们与集合有何异同。

本章内容

  • 什么是流

  • 集合与流

  • 内部迭代与外部迭代

  • 中间操作与终端操作


第 5 章详细讨论为了表达复杂的数据处理查询可以使用的流操作。其间会谈到很多模式,如筛选、切片、查找、匹配、映射和归约。

本章内容

  • 筛选、切片和映射

  • 查找、匹配和归约

  • 使用数值范围等数值流

  • 从多个源创建流

  • 无限流


第 6 章介绍收集器——Stream API 的一个功能,可以让你表达更为复杂的数据处理查询。

本章内容

  • 用 Collectors 类创建和使用收集器

  • 将数据流归约为一个值

  • 汇总:归约的特殊情况

  • 数据分组和分区

  • 开发你的自定义收集器


第 7 章探讨流如何得以自动并行执行,并利用多核架构的优势。此外,你还会学到为正确而高效地使用并行流,要避免的若干陷阱。

本章内容

  • 用并行流并行处理数据

  • 并行流的性能分析

  • 分支/合并框架

  • 使用 Spliterator 分割流


第三部分探索 Java 8 和 Java 9 的多个主题,这些主题中的技巧能让你的 Java 代码更高效,并能帮助你利用现代的编程习语改进代码库。这一部分的出发点是介绍高级编程思想,本书后续内容并不依赖于此。

第 8 章是这一版新增的,作为 Java 程序员,如果你不知道或者没有使用过 Collection API,就太孤陋寡闻了。几乎每一个 Java 应用都或多或少会用到 Collection。通过前面章节的学习,你已经看到将 Collection API 和 Stream API 结合起来构造数据处理查询有多强大。不过,Collection API 也存在种种不尽如人意的地方,使其使用起来比较烦琐,很多时候还容易出错。

通过本章,你会了解 Java 8 和 Java 9 中 Collection API 的新特性,这些特性能让你的编程工作事半功倍。首先,我们会介绍 Java 9 新引入的集合工厂,它可以极大地简化创建小规模 List、Set 以及 Map 的流程。接下来会介绍如何使用 Java 8 的增强功能,移除或者替换 List 和 Set 中的元素。最后会学习处理 Map 的一些新方法

本章内容

  • 如何使用集合工厂

  • 学习使用新的惯用模式处理 List 和 Set

  • 学习通过惯用模式处理 Map


第 9 章探讨如何利用 Java 8 的新功能和一些秘诀来改善你现有的代码。此外,该章还探讨了一些重要的软件开发技术,如设计模式、重构、测试和调试。

通过本文的前八章,我们了解了 Lambda 和 Stream API 的强大威力。你可能主要在新项目的代码中使用这些特性。如果你创建的是全新的 Java 项目,这是极好的时机,你可以轻装上阵,迅速地将新特性应用到项目中。然而不幸的是,大多数情况下你没有机会从头开始一个全新的项目。很多时候,你不得不面对的是用老版 Java 接口编写的遗留代码。

这些就是本章要讨论的内容。我们会介绍几种方法,帮助你重构代码,以适配使用 Lambda 表达式,让你维护的代码具备更好的可读性和灵活性。除此之外,还会讨论目前比较流行的几种面向对象的设计模式,包括策略模式、模板方法模式、观察者模式、责任链模式,以及工厂模式,在结合 Lambda 表达式之后变得更简洁的情况。最后会介绍如何测试和调试使用 Lambda 表达式和 Stream API 的代码。

本章内容

  • 如何使用 Lambda 表达式重构代码

  • Lambda 表达式对面向对象的设计模式的影响

  • Lambda 表达式的测试

  • 如何调试使用 Lambda 表达式和 Stream API 的代码


第 10 章也是这一版新增的,介绍依据领域特定语言(domain-specific language,DSL)实现 API 的思想。这不仅是一种强大的 API 设计方法,而且正变得越来越流行。Java 中已经有 API 采用这种模式实现,譬如 Comparator、Stream 以及 Collector 接口。

本章内容

  • 领域特定语言(domain-specifc language, DSL)及其形式

  • 为你的 API 添加 DSL 都有哪些优缺点

  • 除了简单的基于 Java 的 DSL 之外,JVM 还有哪些领域特定语言可供选择

  • 从现代 Java 接口和类中学习领域特定语言

  • 高效实现基于 Java 的 DSL 都有哪些模式和技巧

  • 常见 Java 库以及工具是如何使用这些模式的


第四部分介绍 Java 8 和 Java 9 中新增的多个特性,这些特性能帮助程序员事半功倍地编写代码,让程序更加稳定可靠。我们首先从 Java 8 新增的两个 API 入手。

第 11 章介绍 java.util.Optional 类,它能让你设计出更好的 API,并减少空指针异常。

本章内容

  • null 引用引发的问题,以及为什么要避免 null 引用

  • 从 null 到 Optional:以 null 安全的方式重写你的域模型

  • 让 Optional 发光发热: 去除代码中对 null 的检查

  • 读取 Optional 中可能值的几种方法

  • 对可能缺失值的再思考


第 12 章探讨新的日期和时间 API,这相对于以前涉及日期和时间时容易出错的 API 是一大改进。

本章内容

  • 为什么在 Java 8 中需要引入新的日期和时间库

  • 同时为人和机器表示日期和时间

  • 定义时间的度量

  • 操纵、格式化以及解析日期

  • 处理不同的时区和历法


第 13 章讨论默认方法是什么,如何利用它们来以兼容的方式演变 API,一些实际的应用模式,以及有效使用默认方法的规则。

本章内容

  • 什么是默认方法

  • 如何以一种兼容的方式改进 API

  • 默认方法的使用模式

  • 解析规则


第 14 章是这一版新增的,探讨 Java 的模块系统——它是 Java 9 的主要改进,使大型系统能够以文档化和可执行的方式进行模块化,而不是简单地将一堆包杂乱无章地堆在一起。

本章内容

  • 推进 Java 模块化之路的动力

  • 模块的主体结构:模块声明以及 requires 和 exports 指令

  • 针对 Java 归档文件(JAR)的自动模块

  • 模块化以及 JDK 库

  • 使用 Maven 构建多个模块

  • 概述 requires 和 exports 之外的模块指令


第五部分探讨如何使用 Java 的高级特性构建并发程序——注意,我们要讨论的不是第 6 章和第 7 章中介绍的流的并发处理。

第 15 章是这一版新增的,从宏观的角度介绍异步 API 的思想,包括 Future、反应式编程背后的“发布–订阅”协议(封装在 Java 9 的 Flow API 中)。

本章内容

  • 线程、Future 以及推动 Java 支持更丰富的并发 API 的进化动力

  • 异步 API

  • 从“线框与管道”的角度看并发计算

  • 使用 CompletableFuture 结合器动态地连接线框

  • 构成 Java 9 反应式编程 Flow API 基础的“发布–订阅”协议

  • 反应式编程和反应式系统


第 16 章探讨 CompletableFuture,它可以让你用声明性方式表达复杂的异步计算,从而让 StreamAPI 的设计并行化。

本章内容

  • 创建异步计算,并获取计算结果

  • 使用非阻塞操作提升吞吐量

  • 设计和实现异步 API

  • 如何以异步的方式使用同步的 API

  • 如何对两个或多个异步操作进行流水线和合并操作

  • 如何处理异步操作的完成状态


第 17 章也是这一版新增的,详细介绍 Java 9 的 Flow API,并提供反应式编程的实战代码解析。

本章内容

  • 什么是反应式编程以及反应式宣言的原则

  • 应用级和系统级的反应式编程

  • 采用反应式流(reactive stream)以及 Java 9 Flow API 实现的一个例子

  • 一种广泛采用的反应式库——RxJava

  • 如何使用 RxJava 转换和整合多个反应式流

  • 如何使用弹珠图可视化地记录反应式流上的操作


第六部分是本书最后一部分,我们会谈谈怎么用 Java 编写高效的函数式程序,还会将 Java 的功能和 Scala 做比较。

第 18 章是一个完整的函数式编程教程,会介绍一些术语,并解释如何在 Java 8 中编写函数式风格的程序。

本章内容

  • 为什么要进行函数式编程

  • 什么是函数式编程

  • 声明式编程以及引用透明性

  • 编写函数式 Java 的准则

  • 迭代和递归


第 19 章涵盖更高级的函数式编程技巧,包括高阶函数、柯里化、持久化数据结构、延迟列表和模式匹配。这一章既提供了可以用在代码库中的实际技术,也提供了能让你成为更渊博的程序员的学术知识。

本章内容

  • 一等成员、高阶方法、柯里化以及局部应用

  • 持久化数据结构

  • 生成 Java Stream 时的延迟计算和延迟列表

  • 模式匹配以及如何在 Java 中应用

  • 引用透明性和缓存


第 20 章将对比 Java 与 Scala 的功能。Scala 和 Java 一样,是一种在 JVM 上实现的语言,近年来发展迅速,在编程语言生态系统中已经威胁到了 Java 的一些方面。

本章内容

  • 什么是 Scala 语言

  • Java 与 Scala 是如何相生相承的

  • Scala 中的函数与 Java 中的函数有哪些区别

  • 类和 trait


第 21 章会回顾这段学习 Java 8 并慢慢走向函数式编程的历程。此外,我们还会猜测,在 Java 8、9 以及 10 中添加的小功能之后,未来可能会有哪些增强和新功能出现。

本章内容

  • Java 8 的新特性以及其对编程风格颠覆性的影响

  • 全新的 Java 9 模块系统

  • 每六个月一次的 Java 递增–发布生命周期

  • 构成 Java 10 的第一个递增发布

  • 未来的 Java 版本中还可能有哪些新东西


这份【java 实战第 2 版】共有 615 页,因为内容过多在这里就不做过多的介绍了,需要完整版的小伙伴,可以转发此文关注小编,**点击这里,获得文档领取方式**

希望本文能够帮助到大家的学习,仔细地品读并且能够灵活运用,争取达到精通的效果,也希望本文能够得到大家的喜欢!

用户头像

还未添加个人签名 2020.09.25 加入

还未添加个人简介

评论

发布
暂无评论
java布道者耗尽20年的功力整理完结java实战第2版文档