随着 Java8 的引入,Java 发生了巨大的变化,这个变化随着新版本 Java8 以及 Java8 和 11 被提升到了一个全新的水平。Java 有着悠久的历史,已经有 20 多年的历史了,但同时,它是新的、函数式的、反应式的和性感的。这是一种开发人员喜爱的语言,同时也是许多企业项目开发人员语言的首选。
从 Java11 开始,现在学习 Java 可能比以前更有利可图。我们鼓励您通过学习 Java 开始您的专业开发生涯,在本书中我们已经尽了最大的努力来帮助您沿着这条道路前进。我们把这本书的主题组合起来,这样就很容易开始,而且你可以感觉到事情进展得很快。同时,我们也尝试着走得更远,为专业开发人员指明了前进的道路。
时间的沙子不停地移动,我发现了函数式编程。
我很清楚为什么写副作用免费代码有效!我被迷住了,开始和 Skara、克鲁和埃尔朗一起玩。不可变性是这里的标准,但是,我想知道传统算法是如何在函数环境中看到的,并开始学习它。
数据结构永远不会原地突变。相反,将创建数据结构的新版本。最大化共享的复制和写作策略是一个有趣的策略!所有这些小心的同步根本不需要!这些语言配备了垃圾收集。因此,如果不再需要某个版本,运行时将负责回收内存。不过,一切都来得正是时候!阅读这本书将帮助你看到,我们不需要牺牲算法性能,同时避免原地变异!
这本书是给任何想学习 Java 编程语言的人准备的。无需编程经验。如果你有先例,它将帮助你更容易地读完这本书。
第 1 章“Java11 入门”,为您提供 Java 入门,帮助您在计算机上安装 Java,并使用新的 JShell 运行第一个交互式程序。
第 2 章、“第一个真正的 Java 程序-排序名称”,教您如何创建开发项目。我们将创建程序文件并编译代码。
第 3 章、“优化专业排序代码”,进一步开发代码,使代码可重用,不仅是玩具。
第 4 章、“策划者——创造一个游戏*”,就是乐趣开始的时候。我们开发了一个有趣的游戏应用,并不像最初看起来那么简单,但我们会做到的。
第 5 章、“扩展游戏——跑得并行,跑得更快”,展示如何利用现代架构的多处理器功能。这是一个非常重要的章节,详细介绍了只有少数开发人员真正了解的技术。
第 6 章、“让我们的游戏专业化——做一个 Web 应用*”,将用户界面从命令行转变为基于 Web 浏览器,提供更好的用户体验。
第 7 章“使用 REST 构建一个商业 Web 应用”,带领您完成一个具有许多商业应用特性的应用的开发。我们将使用标准的 REST 协议,它已经在企业计算领域取得了进展。
第 8 章“扩展我们的电子商务应用”,利用脚本和 Lambda 表达式等现代语言特性,帮助您进一步开发应用。
第 9 章“使用反应式编程构建会计应用”,教您如何使用反应式编程解决一些问题。
第 10 章“将 Java 知识提升到专业水平”,对 Java 开发人员生活中起重要作用的开发人员话题进行了鸟瞰,这将指导您进一步成为专业开发人员。
为了让自己沉浸在这本书的内容中并吸收技能和知识,我们假设您已经有了一些编程经验。我们不做太多假设,但希望您已经知道什么是变量,计算机有内存、磁盘、网络接口,以及它们通常是什么。 除了这些基本技能外,还有一些技术要求你需要尝试一下书中的代码和例子。你需要一台今天可以使用的电脑,可以运行 Windows、Linux 或 OSX。你需要一个操作系统,也许,这就是你需要支付的全部费用。您需要的所有其他工具和服务都是开源的,并且是免费的。其中一些还可以作为带有扩展特性集的商业产品提供,但是在本书的范围内,开始学习 Java9 编程时,这些特性是不需要的。Java、开发环境、构建工具以及我们使用的所有其他软件组件都是开源的。
您可以从您的帐户下载本书的示例代码文件 www.packtpub.com。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,将文件直接通过电子邮件发送给您。
您可以通过以下步骤下载代码文件:
- 在登录或注册 www.packtpub.com。
- 选择“支持”选项卡。
- 点击代码下载和勘误表。
- 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用最新版本的解压缩或解压缩文件夹:
- 用于 Windows 的 WinRAR/7-Zip
- Mac 的 Zipeg/iZip/UnRarX
- 用于 Linux 的 7-Zip/PeaZip
这本书的代码包也托管在 GitHub 上。如果代码有更新,它将在现有 GitHub 存储库中更新。
我们的丰富书籍和视频目录中还有其他代码包,可在这个页面上找到。看看他们!
我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载。
这本书中使用了许多文本约定。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄。下面是一个例子:“最简单的方法是启动new Thread()
,然后在线程上调用start()
方法。”
代码块设置如下:
private boolean isNotUnique(Color[] guess) {
final var alreadyPresent = new HashSet<Color>();
for (final var color : guess) {
if (alreadyPresent.contains(color)) {
return true;
}
alreadyPresent.add(color);
}
return false;
}
当我们希望提请您注意代码块的特定部分时,相关行或项以粗体显示:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObjectJava7 that = (MyObjectJava7) o;
return Objects.equals(field1, that.field1) &&
Objects.equals(field2, that.field2) &&
Objects.equals(field3, that.field3);
}
任何命令行输入或输出的编写方式如下:
Benchmark (nrThreads) (queueSize) Score Error
playParallel 1 -1 15,636 ± 1,905
playParallel 1 1 15,316 ± 1,237
playParallel 1 10 15,425 ± 1,673
playParallel 1 100 16,580 ± 1,133
playParallel 1 1000000 15,035 ± 1,148
playParallel 4 -1 25,945 ± 0,939
粗体:表示一个新术语、一个重要单词或屏幕上显示的单词。例如,菜单或对话框中的单词会像这样出现在文本中。下面是一个例子:“如果您启动了 VisualVM,您可以选择任何 JVM 进程的 Threads 选项卡,并查看 JVM 中的实际线程
警告或重要提示如下所示。
提示和窍门是这样出现的。