商品详情
书名:Java经典实例(第五版)
书号:978-7-5239-0393-3
定价:198元
作者:[加]伊恩·F. 达尔文(Ian F. Darwin) 著 苏钰涵 林琪 译
出版时间:2025-12-16
出版社:中国电力出版社
页码: 744 字数(千字):860
开本:16开 版次:1 印次:1
品牌介绍
中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。
编辑推荐
随着Java继续发展和演进,这本书也在不断修订和改版。利用这本指南,你会快速掌握数百个实战技巧,内容涵盖诸多Java主题。作者Ian Darwin将帮助开发人员快速上手,掌握从字符串处理、函数式编程到网络通信和AI等一切有用的技术。
如果你熟悉Java的任何一个版本,这本经典实例将增进你的Java知识,让你了解Java的最新变化,包括如何在日常开发中运用这些知识。每个技巧都包含完整的代码解决方案,可以免费使用这些代码,另外每个技巧还讨论了如何做以及为什么可以这样做。
专家推荐
“Ian非常出色地讨论了Java开发人员可能遇到的每一个主题。强烈推荐阅读这本书,及时掌握最新Java版本的特性,因为可以应用这些新特性解决老问题。” ——Andrew Slice, Red Hat
“每个Java开发团队都应该至少有这样一本书。”——George Ball, J&G Services Ltd.
“本书第五版对程序员日常生活中的经典解决方案做了充分更新。它提供了大量关于最新Java版本的详细信息,使你能快速掌握从I/O到网络编程的正确方法,并提供了经过精心研究、简洁明了的技巧。” ——Jason R. Clark, 软件工程师, GitHub
产品特色
Java开发常见问题与解决方案。
作者简介
Ian Darwin在软件行业积累了丰富的经验,从Java的第一版直到现在,从桌面版、企业版到移动版,他在很多平台和不同类型的软件上使用过Java。
内容简介
如果你熟悉Java的任何一个版本,这本经典实例将增进你的Java知识,让你了解Java的最新变化,包括如何在日常开发中运用这些知识。每个技巧都包含完整的代码解决方案,可以免费使用这些代码,另外每个技巧还讨论了如何做以及为什么可以这样做。本书的主要内容有:学习如何应用众多Java API,包括新老版本。使用最新Java版本的新语言特性。理解所维护的代码。使用标准API和最佳实践开发代码。探索当前Java开发的全新世界。
目录
目录
前言 1
第1 章 入门:编译和运行Java 17
1.0 引言 .17
1.1 编译和运行Java:标准JDK 18
1.2 用无类Main 实现Hello, World 20
1.3 下载和使用代码示例 24
1.4 用IDE 编译、运行和测试 30
1.5 用JShell 11 探索Java .38
1.6 有效使用CLASSPATH 41
1.7 用Javadoc 建立类文档 43
1.8 超越Javadoc: 注解/ 元数据 .51
1.9 打包和运行JAR 文件 .53
1.10 创建支持多个Java 版本的JAR 56
1.11 将Web 层组件打包到WAR 文件 59
1.12 编译和运行Java:GraalVM 提高性能 61
1.13 获得环境、操作系统和运行时环境信息 64
第2 章 软件开发、测试与维护 .73
2.0 引言 .73
2.1 设计应用:包和模块 73
2.2 使用Java 模块系统 .76
2.3 使用JPMS 创建模块 81
2.4 用Apache Maven 自动管理编译、测试和部署 .86
2.5 用Gradle 自动管理编译、测试和部署 92
2.6 用Maven 和Gradle 自动实现依赖管理.95
2.7 处理废弃警告 100
2.8 批量重构处理警告和迁移 .102
2.9 利用单元测试维护代码正确性:JUnit 105
2.10 用模拟对象和Mockito 隔离测试目标 109
2.11 日志:网络或本地 111
2.12 创建SLF4J . 113
2.13 使用Log4j 生成网络日志 115
2.14 用java.util.logging 生成网络日志 121
2.15 利用持续集成维护代码 126
2.16 性能测量(计时) 131
2.17 用jlink 创建定制JDK 发布包 135
2.18 用jpackage 创建平台特定安装工具 137
第3 章 字符串相关问题 141
3.0 引言 141
3.1 利用子串、词法分析和修剪方法分解字符串 145
3.2 用Formatter 和printf 格式化字符串 148
3.3 用StringBuilder 建立字符串 155
3.4 逐字符处理字符串 .158
3.5 字符串对齐、缩进和取消缩进 160
3.6 Unicode 字符与字符串之间的转换 165
3.7 按单词或字符逆转字符串 .167
3.8 展开和压缩制表符 .169
3.9 控制大小写 174
3.10 为字符串增加不可打印字符 176
3.11 使用国际化资源创建消息 178
3.12 使用特定的本地化环境 181
3.13 创建资源包 .183
3.14 程序:一个简单的文本格式化工具 184
第4 章 使用正则表达式实现字符串匹配 185
4.0 引言 185
4.1 正则表达式语法 .188
4.2 检查字符串是否与正则表达式匹配195
4.3 分组:指定正则表达式的部分 200
4.4 查找匹配文本 202
4.5 替换匹配文本 205
4.6 打印一个模式的所有匹配 .209
4.7 正则表达式中控制大小写 212
4.8 匹配重音或组合字符 214
4.9 匹配文本中的换行符 215
4.10 程序:完整的Grep .217
第5 章 数字 219
5.0 引言 219
5.1 检查字符串是否是一个合法的数 222
5.2 数字与对象的转换 .224
5.3 直接使用分数而不使用浮点数 226
5.4 处理浮点数 227
5.5 格式化数字 232
5.6 二进制、八进制、十进制和十六进制间的转换 .238
5.7 处理整数序列 239
5.8 格式化为正确的复数形式 .241
5.9 生成随机数 243
5.10 矩阵乘法 247
5.11 用Vector 操作优化大数算术运算 .249
5.12 使用复数 253
5.13 处理非常大的数 256
5.14 程序:TempConverter 258
第6 章 日期和时间 . 261
6.0 引言 261
6.1 获得当天日期 265
6.2 格式化日期和时间 .266
6.3 日期/ 时间和纪元秒之间的转换 273
6.4 将字符串解析为日期 274
6.5 两个日期之差 277
6.6 日期加上或减去一个时间段 .279
6.7 计算重复事件 280
6.8 计算涉及时区的日期 282
6.9 与遗留Date 和Calendar 类交互 .284
第7 章 Java 数据结构 287
7.0 引言 287
7.1 用数组建立数据结构 288
7.2 调整数组大小 290
7.3 用Arrays 类简化数组处理 292
7.4 集合框架.294
7.5 列表:类似数组,但更动态 .296
7.6 自己的类中使用泛型类型:堆栈演示 .301
7.7 如何迭代?所有迭代方法 .306
7.8 用Set 避免重复值 .309
7.9 用Hashtable 和HashMap 建立映射 . 311
7.10 在Properties 和Preferences 中存储字符串 314
7.11 集合排序 319
7.12 在集合中查找对象 326
7.13 Collection 与数组的转换 .329
7.14 使自己的数据结构可迭代330
7.15 多维结构 333
第8 章 面向对象技术 337
8.0 引言 337
8.1 对象方法:用toString() 格式化对象,用equals 比较对象341
8.2 构造器简化:super() 前的语句 .349
8.3 使用内部类 350
8.4 用Record(或Lombok)简化数据对象 352
8.5 通过接口提供回调 .356
8.6 多态/ 抽象方法 360
8.7 用默认、静态和私有方法改进接口362
8.8 使用类型安全的枚举 364
8.9 使用类型模式匹配 .369
8.10 用“Optional”避免NPE 371
8.11 用密封类型控制派生 .374
8.12 强制单例模式 376
8.13 创建自己的异常 379
8.14 使用依赖注入 380
8.15 结合Java 特性实现面向数据编程 383
第9 章 函数式编程技术:函数接口、流和并行集合 387
9.0 引言 387
9.1 使用Lambda/Closures 而不是内部类 390
9.2 使用lambda 预定义接口或创建自己的接口 396
9.3 用Stream 简化处理 398
9.4 用Collector 简化流 400
9.5 用流采集器简化流 404
9.6 用你自己的流采集器简化流 406
9.7 用并行流和集合提高吞吐量 .408
9.8 利用方法引用将已有代码用作为函数式接口 410
9.9 Java Mixins:方法混入 415
9.10 使用Flow 和响应式流实现函数式编程 417
第10 章 输入和输出:读、写和目录技巧 . 421
10.0 引言 421
10.1 发现文件系统路径 424
10.2 获取和设置文件与目录信息:Files 和Path 426
10.3 创建和删除文件或目录 438
10.4 改变文件名或其他属性 443
10.5 关于InputStream/OutputStream 和Reader/Writer .446
10.6 读写文件 448
10.7 用StreamTokenizer、Scanner 和Parser 扫描输入 452
10.8 从标准输入或控制台/ 控制终端读取 461
10.9 复制文件 465
10.10 重新分配标准流.467
10.11 写时复制流 468
10.12 读/ 写不同的字符集 471
10.13 讨厌的行尾字符.472
10.14 当心依赖平台的文件代码 .473
10.15 读写JAR 或ZIP 归档 .474
10.16 使用getResource() 和getResourceAsStream() 采用文件系统中立的
方式读取文件 .479
10.17 创建瞬时/ 临时文件 483
10.18 获得目录的根 .485
10.19 使用文件监视器服务得到文件变更通知 487
10.20 遍历文件树(类似Find) 489
第11 章 Java 线程 . 493
11.0 引言 493
11.1 在不同线程中运行代码 495
11.2 使用虚拟线程提高性能 502
11.3 交会和超时 .504
11.4 用synchronized 关键字同步线程.505
11.5 用锁简化同步 509
11.6 用一个写者多个读者锁定 511
11.7 线程间共享数据—— ThreadLocal 和ScopedValue:结构化并发 514
11.8 用Queue 接口简化生产者/ 消费者 518
11.9 用Fork/Join 优化并行处理 .521
11.10 调度任务:将来,编辑器的后台保存 526
第12 章 数据科学与R . 531
12.0 引言 531
12.1 在Apache Spark 中使用数据 .532
12.2 交互式使用R 536
12.3 比较/ 选择R 实现 539
12.4 在Java 应用中使用R:Renjin .540
12.5 从R 会话使用Java .543
12.6 在Web 应用中使用R 544
第13 章 机器学习/ 人工智能 . 547
13.0 引言 547
13.1 一些主要AI 软件 550
13.2 直接使用ChatGPT .555
13.3 通过LangChain4j 使用ChatGPT 558
13.4 用LangChain4j 建议AI 服务 560
13.5 用Shadows 转换 562
13.6 用LangChain4j 生成图像 564
13.7 混合媒体提示:使用LangChain4j 解释图像 566
13.8 使用ollama 本地运行AI .568
第14 章 网络客户端 571
14.0 引言 571
14.1 HTTP/REST Web 客户端—— Modern API .574
14.2 连接socket 服务器 .577
14.3 查找和报告网络地址 .578
14.4 处理网络错误 581
14.5 读写文本数据 583
14.6 读写二进制或串行化数据585
14.7 互联网的明信片:使用UDP 数据报 .589
14.8 URI, URL 还是URN .592
14.9 程序:基于Socket 的聊天客户端 594
第15 章 服务器端Java 597
15.0 引言 597
15.1 打开服务器Socket598
15.2 查找网络接口 601
15.3 返回响应(字符串或二进制数据) .603
15.4 处理多个客户端 607
15.5 提供HTTP 协议 611
15.6 用TLS(原来的SSL)和JSSE 保护Web 服务器 .615
15.7 用JAX-RS 创建REST 服务/ 微服务 618
15.8 UNIX 域Socket —— 甚至包括Windows ! 622
第16 章 处理JSON 数据 627
16.0 引言 627
16.1 直接生成JSON .629
16.2 用Jackson 解析和写JSON .630
16.3 用org.json 解析和写JSON .633
16.4 用JSON-B 解析和写JSON 636
16.5 用JSON Pointer 查找JSON 元素 637
第17 章 反射或“名为Class 的类” 641
17.0 引言 641
17.1 动态加载和实例化一个类642
17.2 打印类信息 .645
17.3 获得类描述符 647
17.4 查找和使用方法和字段 648
17.5 通过MethodHandle 调用类成员 653
17.6 列出一个包中的类 654
17.7 访问同一个类中的嵌套成员 657
17.8 通过反射访问私有方法和字段 .659
17.9 用ClassLoader 从头构造一个类 660
17.10 用JavaCompiler 从头构造一个类 .662
17.11 用Class-File API 构造或修改类文件 665
17.12 使用和定义注解.670
17.13 通过注解查找类似插件的类 674
17.14 一个计时程序 .677
17.15 程序:CrossRef .679
第18 章 结合使用Java 和其他语言 681
18.0 引言 681
18.1 从Java 运行外部程序 682
18.2 运行程序并捕获输出 .687
18.3 通过javax.script 调用其他语言 691
18.4 用GraalVM 混合语言 695
18.5 用外部函数与内存API 在Java 和原生代码间来回调用 .697
18.6 通过原生代码(JNI) 调用其他语言 .701
18.7 从原生代码调用Java .708
后记 . 711
附录 Java 前世今生 713
- 有电书房
- 扫描二维码,访问我们的微信店铺