# 零、前言 JDK 在版本 8 和版本 12 之间的超快发展增加了现代 Java 的学习曲线,因此增加了将开发人员置于生产力平台所需的时间。它的新特性和新概念可以用来解决各种现代问题。这本书使您能够通过解释有关复杂性、性能、可读性等方面的正确实践和决策,对常见问题采取客观的方法。 《Java 编程问题》将帮助您完成日常任务并在截止日期前完成。本书中包含 1000 多个示例的 300 多个应用涵盖了共同和基本的兴趣领域:字符串、数字、数组、集合、数据结构、日期和时间、不变性、类型推断、`Optional`、Java I/O、Java 反射、函数式编程、并发和 HTTP 客户端 API。把你的技能和问题放在一起,这些问题是经过精心设计的,以突出和涵盖日常工作中获得的核心知识。换句话说(不管你的任务是简单的、中等的还是复杂的),在你的工具带下掌握这些知识是必须的,而不是一个选择。 在本书的最后,您将对 Java 概念有了深刻的理解,并有信心为您的问题开发和选择正确的解决方案。 # 这本书是给谁的 《Java 编程问题》对于初学者和中级 Java 开发人员特别有用。然而,这里看到的问题是任何 Java 开发人员在日常工作中都会遇到的 所需的技术背景相当薄弱。主要来说,你应该是一个 Java 爱好者,并且在跟随一段 Java 代码方面有很好的技巧和直觉 # 充分利用这本书 您应该具备 Java 语言的基本知识。您应该安装以下组件: * IDE(推荐 [Apache NetBeans 11.x](https://netbeans.apache.org/),但不是必须的) * JDK12 和 Maven 3.3.x * 需要在适当的时候安装其他第三方库(无特殊要求) # 下载示例代码文件 您可以从您的帐户[下载本书的示例代码文件](http://www.packt.com)。如果您在其他地方购买了本书,您可以访问[这个页面](https://www.packtpub.com/support)并注册,将文件直接通过电子邮件发送给您。 您可以通过以下步骤下载代码文件: 1. 登录或注册[这个页面](http://www.packt.com)。 2. 选择“支持”选项卡。 3. 点击代码下载。 4. 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。 下载文件后,请确保使用最新版本的解压缩或解压缩文件夹: * 用于 Windows 的 WinRAR/7-Zip * Mac 的 Zipeg/iZip/UnRarX * 用于 Linux 的 7-Zip/PeaZip 这本书的代码包也托管[在 GitHub 上](https://github.com/PacktPublishing/Java-Coding-Problems)。如果代码有更新,它将在现有 GitHub 存储库中更新。 我们的丰富书籍和视频目录中还有其他代码包,可在[这个页面](https://github.com/PacktPublishing/)上找到。看看他们! # 下载彩色图像 我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。[您可以在这里下载](_ColorImages.pdf)。 # 行为准则 要查看正在执行的代码,[请访问以下链接](http://bit.ly/2kSgFKf)。 # 使用的约定 这本书中使用了许多文本约定。 `CodeInText`:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个例子:“如果当前字符存在于`Map`实例中,那么只需使用`(character, occurrences+1)`将其出现次数增加 1。” 代码块设置如下: ```java public Map countDuplicateCharacters(String str) { Map result = new HashMap<>(); // or use for(char ch: str.toCharArray()) { ... } for (int i = 0; i (v == null) ? 1 : ++v); } return result; } ``` 当我们希望提请您注意代码块的特定部分时,相关行或项以粗体显示: ```java for (int i = 0; i < str.length(); i++) { int cp = str.codePointAt(i); String ch = String.valueOf(Character.toChars(cp)); if(Character.charCount(cp) == 2) { // 2 means a surrogate pair i++; } } ``` 任何命令行输入或输出的编写方式如下: ```java $ mkdir css $ cd css ``` **粗体**:表示一个新术语、一个重要单词或屏幕上显示的单词。例如,菜单或对话框中的单词会像这样出现在文本中。这里有一个例子:“在 Java 中,逻辑的**和**运算符表示为`&&`,逻辑的**或**运算符表示为`||`,逻辑的**异或**运算符表示为`^|`。” 警告或重要提示如下所示。 提示和窍门是这样出现的。