Java经典实例(第五版)
Java经典实例(第五版)
Ian F. Darwin
苏钰涵, 林琪 译
出版时间:2025年12月
页数:726
“Ian非常出色地讨论了Java开发人员可能遇到的每一个主题。强烈推荐阅读这本书,及时掌握新Java版本中的特性,因为可以应用这些新特性解决老问题。”
——Andrew Slice,Red Hat
“每个Java开发团队都应该至少有这样一本书。”
——George Ball,J&G Services Ltd.
“本书第五版对程序员日常生活中的经典解决方案做了充分更新。它提供了大量关于最新Java版本的详细信息,使你能快速掌握从I/O到网络编程的正确方法,并提供了经过精心研究、简洁明了的技巧。”
——Jason R. Clark,软件工程师,GitHub

随着Java继续发展和演进,这本书也在不断修订和改版。利用这本指南,你会快速掌握数百个实战技巧,内容涵盖诸多Java主题。作者Ian Darwin将帮助开发人员快速上手,掌握从字符串处理、函数式编程到网络通信和AI等一切有用的技术。
如果你熟悉Java的任何一个版本,这本经典实例将增进你的Java知识,让你了解Java的最新变化,包括如何在日常开发中运用这些知识。每个技巧都包含完整的代码解决方案,可以免费使用这些代码,另外每个技巧还讨论了如何做以及为什么可以这样做。
所有代码示例都可以从GitHub下载。更新的这一版涵盖了直到Java 23的全部内容和Java 24的部分内容,并列出直到Java 24的所有主要变化。
● 学习如何应用众多Java API,包括新老版本。
● 使用最新Java版本中的新语言特性。
● 理解所维护的代码。
● 探索当前Java开发的全新世界。
  1. 前言
  2. 第1章 入门:编译和运行Java
  3. 1.0 引言
  4. 1.1 编译和运行Java:标准JDK
  5. 1.2 用无类Main实现Hello, World
  6. 1.3 下载和使用代码示例
  7. 1.4 用IDE编译、运行和测试
  8. 1.5 用JShell 11探索Java
  9. 1.6 有效使用CLASSPATH
  10. 1.7 用Javadoc建立类文档
  11. 1.8 超越Javadoc:注解/元数据
  12. 1.9 打包和运行JAR文件
  13. 1.10 创建支持多个Java版本的JAR
  14. 1.11 将Web层组件打包到WAR文件
  15. 1.12 编译和运行Java:GraalVM 提高性能
  16. 1.13 获得环境、操作系统和运行时环境信息
  17. 第2章 软件开发、测试与维护
  18. 2.0 引言
  19. 2.1 设计应用:包和模块
  20. 2.2 使用Java模块系统
  21. 2.3 使用JPMS创建模块
  22. 2.4 用Apache Maven自动管理编译、测试和部署
  23. 2.5 用Gradle自动管理编译、测试和部署
  24. 2.6 用Maven和Gradle自动实现依赖管理
  25. 2.7 处理废弃警告
  26. 2.8 批量重构处理警告和迁移
  27. 2.9 利用单元测试维护代码正确性:JUnit
  28. 2.10 用模拟对象和Mockito隔离测试目标
  29. 2.11 日志:网络或本地
  30. 2.12 创建SLF4J
  31. 2.13 使用Log4j生成网络日志
  32. 2.14 用java.util.logging生成网络日志
  33. 2.15 利用持续集成维护代码
  34. 2.16 性能测量(计时)
  35. 2.17 用jlink创建定制JDK发布包
  36. 2.18 用jpackage创建平台特定安装工具
  37. 第3章 字符串相关问题
  38. 3.0 引言
  39. 3.1 利用子串、词法分析和修剪方法分解字符串
  40. 3.2 用Formatter和printf格式化字符串
  41. 3.3 用StringBuilder建立字符串
  42. 3.4 逐字符处理字符串
  43. 3.5 字符串对齐、缩进和取消缩进
  44. 3.6 Unicode字符与字符串之间的转换
  45. 3.7 按单词或字符逆转字符串
  46. 3.8 展开和压缩制表符
  47. 3.9 控制大小写
  48. 3.10 为字符串增加不可打印字符
  49. 3.11 使用国际化资源创建消息
  50. 3.12 使用特定的本地化环境
  51. 3.13 创建资源包
  52. 3.14 程序:一个简单的文本格式化工具
  53. 第4章 使用正则表达式实现字符串匹配
  54. 4.0 引言
  55. 4.1 正则表达式语法
  56. 4.2 检查字符串是否与正则表达式匹配
  57. 4.3 分组:指定正则表达式的部分
  58. 4.4 查找匹配文本
  59. 4.5 替换匹配文本
  60. 4.6 打印一个模式的所有匹配
  61. 4.7 正则表达式中控制大小写
  62. 4.8 匹配重音或组合字符
  63. 4.9 匹配文本中的换行符
  64. 4.10 程序:完整的Grep
  65. 第5章 数字
  66. 5.0引言
  67. 5.1 检查字符串是否是一个合法的数
  68. 5.2 数字与对象的转换
  69. 5.3 直接使用分数而不使用浮点数
  70. 5.4 处理浮点数
  71. 5.5 格式化数字
  72. 5.6 二进制、八进制、十进制和十六进制间的转换
  73. 5.7 处理整数序列
  74. 5.8 格式化为正确的复数形式
  75. 5.9 生成随机数
  76. 5.10 矩阵乘法
  77. 5.11 用Vector操作优化大数算术运算
  78. 5.12 使用复数
  79. 5.13 处理非常大的数
  80. 5.14 程序:TempConverter
  81. 第6章 日期和时间
  82. 6.0 引言
  83. 6.1 获得当天日期
  84. 6.2 格式化日期和时间
  85. 6.3 日期/时间和纪元秒之间的转换
  86. 6.4 将字符串解析为日期
  87. 6.5 两个日期之差
  88. 6.6 日期加上或减去一个时间段
  89. 6.7 计算重复事件
  90. 6.8 计算涉及时区的日期
  91. 6.9 与遗留Date和Calendar类交互
  92. 第7章 Java数据结构
  93. 7.0 引言
  94. 7.1 用数组建立数据结构
  95. 7.2 调整数组大小
  96. 7.3 用Arrays类简化数组处理
  97. 7.4 集合框架
  98. 7.5 列表:类似数组,但更动态
  99. 7.6 自己的类中使用泛型类型:堆栈演示
  100. 7.7 如何迭代?所有迭代方法
  101. 7.8 用Set避免重复值
  102. 7.9 用Hashtable和HashMap建立映射
  103. 7.10 在Properties和Preferences中存储字符串
  104. 7.11 集合排序
  105. 7.12 在集合中查找对象
  106. 7.13 Collection与数组的转换
  107. 7.14 使自己的数据结构可迭代
  108. 7.15 多维结构
  109. 第8章 面向对象技术
  110. 8.0 引言
  111. 8.1 对象方法:用toString()格式化对象,用equals比较对象
  112. 8.2 构造器简化:super(...)前的语句
  113. 8.3 使用内部类
  114. 8.4 用Record(或Lombok)简化数据对象
  115. 8.5 通过接口提供回调
  116. 8.6 多态/抽象方法
  117. 8.7 用默认、静态和私有方法改进接口
  118. 8.8 使用类型安全的枚举
  119. 8.9 使用类型模式匹配
  120. 8.10 用“Optional”避免NPE
  121. 8.11 用密封类型控制派生
  122. 8.12 强制单例模式
  123. 8.13 创建自己的异常
  124. 8.14 使用依赖注入
  125. 8.15 结合Java特性实现面向数据编程
  126. 第9章 函数式编程技术:函数接口、流和并行集合
  127. 9.0 引言
  128. 9.1 使用Lambda/Closures而不是内部类
  129. 9.2 使用lambda预定义接口或创建自己的接口
  130. 9.3 用Stream简化处理
  131. 9.4 用Collector简化流
  132. 9.5 用流采集器简化流
  133. 9.6 用你自己的流采集器简化流
  134. 9.7 用并行流和集合提高吞吐量
  135. 9.8 利用方法引用将已有代码用作为函数式接口
  136. 9.9 Java Mixins:方法混入
  137. 9.10 使用Flow和响应式流实现函数式编程
  138. 第10章 输入和输出:读、写和目录技巧
  139. 10.0 引言
  140. 10.1 发现文件系统路径
  141. 10.2 获取和设置文件与目录信息:Files和Path
  142. 10.3 创建和删除文件或目录
  143. 10.4 改变文件名或其他属性
  144. 10.5 关于InputStream/OutputStream和Reader/Writer
  145. 10.6 读写文件
  146. 10.7 用StreamTokenizer、Scanner和Parser扫描输入
  147. 10.8 从标准输入或控制台/控制终端读取
  148. 10.9 复制文件
  149. 10.10 重新分配标准流
  150. 10.11 写时复制流
  151. 10.12 读/写不同的字符集
  152. 10.13 讨厌的行尾字符
  153. 10.14 当心依赖平台的文件代码
  154. 10.15 读写JAR或ZIP归档
  155. 10.16 使用getResource()和getResourceAsStream()采用文件系统中立的方式读取文件
  156. 10.17 创建瞬时/临时文件
  157. 10.18 获得目录的根
  158. 10.19 使用文件监视器服务得到文件变更通知
  159. 10.20 遍历文件树(类似Find)
  160. 第11章 Java线程
  161. 11.0 引言
  162. 11.1 在不同线程中运行代码
  163. 11.2 使用虚拟线程提高性能
  164. 11.3 交会和超时
  165. 11.4 用synchronized关键字同步线程
  166. 11.5 用锁简化同步
  167. 11.6 用一个写者多个读者锁定
  168. 11.7 线程间共享数据——ThreadLocal和ScopedValue:结构化并发
  169. 11.8 用Queue接口简化生产者/消费者
  170. 11.9 用Fork/Join优化并行处理
  171. 11.10 调度任务:将来,编辑器的后台保存
  172. 第12章 数据科学与R
  173. 12.0 引言
  174. 12.1 在Apache Spark中使用数据
  175. 12.2 交互式使用R
  176. 12.3 比较/选择R实现
  177. 12.4 在Java应用中使用R:Renjin
  178. 12.5 从R会话使用Java
  179. 12.6 在Web应用中使用R
  180. 第13章 机器学习/人工智能
  181. 13.0 引言
  182. 13.1 一些主要AI软件
  183. 13.2 直接使用ChatGPT
  184. 13.3 通过LangChain4j使用ChatGPT
  185. 13.4 用LangChain4j建议AI服务
  186. 13.5 用Shadows转换
  187. 13.6 用LangChain4j生成图像
  188. 13.7 混合媒体提示:使用LangChain4j解释图像
  189. 13.8 使用ollama本地运行AI
  190. 第14章 网络客户端
  191. 14.0 引言
  192. 14.1 HTTP/REST Web客户端——Modern API
  193. 14.2 连接socket服务器
  194. 14.3 查找和报告网络地址
  195. 14.4 处理网络错误
  196. 14.5 读写文本数据
  197. 14.6 读写二进制或串行化数据
  198. 14.7 互联网的明信片:使用UDP数据报
  199. 14.8 URI, URL还是URN
  200. 14.9 程序:基于Socket的聊天客户端
  201. 第15章 服务器端Java
  202. 15.0 引言
  203. 15.1 打开服务器Socket
  204. 15.2 查找网络接口
  205. 15.3 返回响应(字符串或二进制数据)
  206. 15.4 处理多个客户端
  207. 15.5 提供HTTP协议
  208. 15.6 用TLS(原来的SSL)和JSSE保护Web服务器
  209. 15.7 用JAX-RS创建REST服务/微服务
  210. 15.8 UNIX域Socket——甚至包括Windows!
  211. 第16章 处理JSON数据
  212. 16.0 引言
  213. 16.1 直接生成JSON
  214. 16.2 用Jackson解析和写JSON
  215. 16.3 用org.json解析和写JSON
  216. 16.4 用JSON-B解析和写JSON
  217. 16.5 用JSON Pointer查找JSON元素
  218. 第17章 反射或“名为Class的类”
  219. 17.0 引言
  220. 17.1 动态加载和实例化一个类
  221. 17.2 打印类信息
  222. 17.3 获得类描述符
  223. 17.4 查找和使用方法和字段
  224. 17.5 通过MethodHandle调用类成员
  225. 17.6 列出一个包中的类
  226. 17.7 访问同一个类中的嵌套成员
  227. 17.8 通过反射访问私有方法和字段
  228. 17.9 用ClassLoader从头构造一个类
  229. 17.10 用JavaCompiler从头构造一个类
  230. 17.11 用Class-File API构造或修改类文件
  231. 17.12 使用和定义注解
  232. 17.13 通过注解查找类似插件的类
  233. 17.14 一个计时程序
  234. 17.15 程序:CrossRef
  235. 第18章 结合使用Java和其他语言
  236. 18.0 引言
  237. 18.1 从Java运行外部程序
  238. 18.2 运行程序并捕获输出
  239. 18.3 通过javax.script调用其他语言
  240. 18.4 用GraalVM混合语言
  241. 18.5 用外部函数与内存API在Java和原生代码间来回调用
  242. 18.6 通过原生代码(JNI)调用其他语言
  243. 18.7 从原生代码调用Java
  244. 后记
  245. 附录 Java前世今生
书名:Java经典实例(第五版)
作者:Ian F. Darwin
译者:苏钰涵, 林琪 译
国内出版社:中国电力出版社
出版时间:2025年12月
页数:726
书号:978-7-5239-0533-3
原版书书名:Java Cookbook, 5th Edition
原版书出版商:O'Reilly Media
Ian F. Darwin
 
Ian F. Darwin在计算机行业已经工作了30年。他编写了用于Linux和BSD的免费软件file(1),是《Checking C Programs with Lint》(http://shop.oreilly.com/product/9780937175309.do)、《Java Cookbook》(http://shop.oreilly.com/product/9780596007010.do)的作者并撰写了一百多篇有关C、UNIX、Java及Android的文章和教程。除了编程和顾问工作之外,Ian还为世界最大的技术培训公司——Learning Tree International服务,讲授UNIX、Java和Android技术。
 
 
本书封面上的动物是一只家养的鸡(高卢鸡,Gallus domesticus)。家鸡是亚洲野生红丛林禽类的后代。经过了8000多年的驯化,人们养鸡是为了吃肉和鸡蛋。
由于它们身体大而笨重,翅膀很小,所以只能飞很短的距离。它们非常适合在地面上生存。它们的四趾爪子用来刨土,在泥土中可以找到它们平常吃的美味:虫子、甲虫、种子和各种植物碎屑。
雄性叫作公鸡,雌性叫作母鸡。鸡蛋的孵化期约为三周;刚孵出的小鸡能独立活动,这意味着它们有毛茸茸的羽毛,从蛋壳里出来后就能自己行走。它们也不依赖妈妈喂食;小鸡不仅可以自己觅食,出生后靠着留在肚子里的蛋黄还能存活一周。
鸡的话题在古代作品中经常出现。中国文献记载,鸡是在公元前1400年传入中国的,巴比伦公元前600年的雕刻中就有鸡,古希腊作家阿里斯托芬(Aristophanes)在公元前400年也写过鸡。长期以来,公鸡一直是勇气的象征:罗马人认为鸡是战神Mars的圣物,法兰西第一共和国选择公鸡作为共和国象征。
购买选项
定价:198.00元
书号:978-7-5239-0533-3
出版社:中国电力出版社