Java 无疑是本世纪最流行的编程语言之一。然而,每当我们必须快速探索新的算法或新的应用程序域时,Java 并没有为我们提供执行代码片段和打印结果的简单方法。由于这一限制,许多开发人员开始使用其他提供 REPL(Read-Evaluate-Print-Loop)实用程序的编程语言,如 Scala 和 Python。然而,很多时候,在探索阶段结束并且需求和算法明确之后,有必要回到 Java。
Java9 引入了 JShell,这是一个新的实用程序,允许我们轻松地运行 Java9 代码片段并打印结果。这个实用程序是一个 REPL,它使我们可以像开发人员使用 Scala 和 Python 一样轻松地使用 Java。JShell 使学习 Java9 及其最重要的特性变得更加容易。
面向对象编程,也称为 OOP,绝对是现代软件开发人员每项工作所必需的技能。这很有意义,因为 OOP 允许您最大限度地提高代码重用率并最小化维护成本。然而,学习面向对象编程是一项挑战,因为它包含了太多的抽象概念,需要现实生活中的示例来易于理解。此外,不遵循最佳实践的面向对象代码很容易成为维护的噩梦。
Java 是一种多范式编程语言,OOP 是其最重要的范式之一。如果您想使用 Java9,您需要掌握 Java 中的 OOP。此外,由于 Java9 还具有函数式编程语言中的优秀特性,因此了解如何将 OOP 代码与函数式编程代码混合使用非常方便。
本书将允许您使用 JShell 在 Java9 中开发高质量的可重用面向对象代码。您将学习面向对象编程原理以及 Java9 如何结合现代函数式编程技术实现它们。您将学习如何从现实世界的元素中捕获对象,并创建表示这些对象的面向对象代码。您将了解 Java 实现面向对象代码的方法。您将最大化代码重用并降低维护成本。您的代码将易于理解,并可用于实际元素的表示。
此外,您还将学习如何使用 Java9 中引入的新模块化特性组织代码,并准备好创建复杂的应用程序。
第 1 章JShell–Java 9的一个读取-评估-打印循环,开启了我们使用 Java 9 进行面向对象编程的旅程。我们将学习如何启动和使用 Java9 引入的新实用程序:JShell,该实用程序将允许我们轻松运行 Java9 代码片段并打印其结果。这个实用程序将使我们学习面向对象编程变得容易。
第 2 章通过 JShell将现实世界的对象转换为 UML 图和 Java 9,教授如何从现实生活中识别对象。我们将理解,使用对象可以更容易地编写易于理解和重用的代码。我们将学习如何识别真实世界的元素,并将它们转换为 Java 支持的面向对象范例的不同组件。我们将开始用 UML(统一建模语言)图组织类。
第三章、类和实例展示了类代表蓝图或模板来生成对象,这些对象也称为实例。我们将设计几个类来表示现实对象的蓝图。我们将了解对象的生命周期。我们将使用许多示例来了解初始化是如何工作的。我们将声明第一个类来生成对象的蓝图。我们将定制它的初始化,并使用 JShell 中的实例测试它的个性化行为。我们将了解垃圾收集是如何工作的。
第 4 章数据封装向您介绍 Java 9 中类的不同成员,以及它们如何反映在类生成的实例成员中。我们将使用实例字段、类字段、setter、getter、实例方法和类方法。我们将使用 setter 和 getter 生成计算属性。我们将利用访问修饰符来隐藏数据。我们将创建一个类的所有共享值的静态字段。
第五章可变类和不可变类介绍了变异对象和非变异对象的区别。首先,我们将创建一个可变类,然后我们将构建该类的不可变版本。在编写并发代码时,我们将学习非变异对象的优点。
第 6 章继承、抽象、扩展和特化讨论了如何利用简单继承来特化或扩展基类。我们将自上而下设计许多类,并使用链式构造函数。我们将使用 UML 图来设计从另一个类继承的类。我们将在交互式 JShell 中编码这些类。我们将重写和重载方法。我们将运行代码以了解我们编写的所有东西是如何工作的。
第 7 章、成员继承和多态性教您如何控制子类是否可以覆盖成员。我们将利用最令人兴奋的面向对象特性之一:多态性。我们将利用 JShell 轻松理解类型转换。我们将声明使用类实例执行操作的方法。
第 8 章契约式编程与接口介绍了接口如何与 Java 9 中的类结合工作。在 Java9 中实现多重继承的唯一方法是使用接口。我们将学习多个蓝图的声明和组合以生成单个实例。我们将声明具有不同类型需求的接口。然后,我们将声明许多实现所创建接口的类。我们将结合接口和类,以利用 Java9 中的多重继承。我们将结合接口继承和类继承。
第 9 章带接口的高级合约编程深入探讨了带接口的合约编程。我们将使用接收接口作为参数的方法。我们将了解向下转换如何处理接口和类,并将接口类型的实例视为不同的子类。JShell 将使我们能够轻松理解类型转换和向下转换的复杂性。我们将处理更复杂的场景,其中我们将结合类继承和接口继承。
第 10 章泛型代码重用的最大化介绍了如何使用参数多态性。我们将学习如何通过编写能够处理不同类型对象的代码来最大化代码重用,这些对象是实现特定接口或类层次结构包含特定超类的类的实例。我们将使用接口和泛型。我们将创建一个使用受约束泛型类型的类。由于泛型,我们将对多种类型使用泛型类。
第 11 章高级多态深入研究参数多态性。我们将声明一个与两个受约束泛型类型一起工作的类。我们将在 JShell 中使用带有两个泛型类型参数的泛型类。我们将利用 Java9 中的泛型来泛化现有类。
第 12 章、面向对象、函数式编程和 Lambda 表达式讨论了函数是 Java 9 中的一级公民。我们将在类中使用函数接口。我们将使用 Java9 中包含的许多函数式编程特性,并将它们与我们在前几章中学习的关于面向对象编程的内容结合起来。这样,我们将能够充分利用这两个世界。我们将分析许多算法的命令式编程方法和函数式编程方法之间的差异。我们将利用 lambda 表达式并将映射操作与 reduce 结合起来。
第 13 章中,Java 9 中的模块化将面向对象难题的所有部分放在一起。我们将重构现有代码以利用面向对象编程。我们将了解模块化源代码在 Java9 中的用法。我们将使用模块创建一个新的 Java 9 解决方案,用 Java 9 中的新模块性组织面向对象代码,并学习调试面向对象代码的许多技术。
您需要一台具有双核 CPU 和至少 4 GB RAM 的计算机,能够运行 JDK 9 Windows Vista SP2、Windows 7、Windows 8.x、Windows 10 或更高版本、macOS 10.9 或更高版本,以及 JDK 9 支持的任何 Linux 发行版。任何能够运行 JDK 9 的物联网设备也将非常有用。
这本书可以被任何计算机科学毕业生或刚开始从事软件工程师工作的人理解。基本上,理解面向对象的编程语言,如 Python、C++或实际上是较早的 java 版本就足够了。参与软件工程项目的整个产品周期会很有帮助。
在这本书中,你会发现许多不同类型的文本可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。
文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:文本中的代码字如下所示:“JShell 允许我们调用System.out.printf
方法来轻松格式化要打印的输出。”
代码块设置如下:
double getGeneratedRectangleHeight() {
final Rectangle rectangle = new Rectangle(37, 87);
return rectangle.height;
}
当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
double getGeneratedRectangleHeight() {
final Rectangle rectangle = new Rectangle(37, 87);
return rectangle.height;
}
任何命令行输入或输出的编写方式如下:
javac -version
新术语和重要词语以粗体显示。您在屏幕上看到的单词,例如在菜单或对话框中,会出现如下文本:“单击接受,然后单击退出。”
警告或重要注释显示在这样的框中。
提示和技巧如下所示。
我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢或可能不喜欢什么。读者反馈对于我们开发您真正从中获益最多的标题非常重要。
要向我们发送一般反馈,只需向<[feedback@packtpub.com](mailto:feedback@packtpub.com)>
发送电子邮件,并通过邮件主题提及书名即可。
如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南,网址为www.packtpub.com/authors。
既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。
您可以从您的帐户下载本书的示例代码文件 http://www.packtpub.com 。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。
通过以下步骤,您可以下载以下文件:
- 使用您的电子邮件地址和密码登录或注册我们的网站。
- 将鼠标指针悬停在顶部的支架选项卡上。
- 点击代码下载&勘误表。
- 在搜索框中输入图书名称。
- 选择要下载代码文件的书籍。
- 从您购买本书的下拉菜单中选择。
- 点击代码下载。
您也可以通过点击 Packt 出版网站上该书网页上的代码文件按钮下载代码文件。在搜索框中输入图书名称即可访问此页面。请注意,您需要登录到您的 Packt 帐户。
下载文件后,请确保使用以下最新版本解压或解压缩文件夹:
- WinRAR/7-Zip for Windows
- 适用于 Mac 的 Zipeg/iZip/UnRarX
- 适用于 Linux 的 7-Zip/PeaZip
该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Java-9-with-JShell 。我们在上还提供了丰富的书籍和视频目录中的其他代码包 https://github.com/PacktPublishing/ 。看看他们!
我们还为您提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。彩色图像将帮助您更好地了解输出中的更改。您可以从下载此文件 https://www.packtpub.com/sites/default/files/downloads/Java9withJShell_ColorImages.pdf 。
虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。
要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。
在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。
请致电<[copyright@packtpub.com](mailto:copyright@packtpub.com)>
与我们联系,并提供可疑盗版材料的链接。
我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。
如果您对本书的任何方面有任何问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>
与我们联系,我们将尽力解决该问题。