| 作者 |
| (美)Bruce Eckel(美)Joshua Bloch(美)凯S. 霍斯特曼(Cay S. Horstmann)(美)凯S.霍斯特曼(Cay S. Horstmann) |
| 丛书名 |
| 计算机科学丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9787180918107 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------Java编程思想(第4版)--------------------------- 《Java编程思想(第4版)》赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),《Java编程思想(第4版)》都能逐步指导你轻松掌握。 从java编程思想这本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。《Java编程思想(第4版)》共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。 第4版特点: Java编程思想(第4版)这本书特别适合初学者与专业人员的经典的面向对象叙述方式,为更新的Java SE5/6增加了新的示例和章节。 测验框架显示程序输出。 设计模式贯穿于众多示例中:适配器、桥接器、职责链、命令、装饰器、外观、工厂方法、享元、点名、数据传输对象、空对象、代理、单例、状态、策略、模板方法以及访问者。 为数据传输引入了XML,为用户界面引入了SWT和Flash。 重新撰写了有关并发的章节,有助于读者掌握线程的相关知识。 专门为第4版以及Java SE5/6重写了700多个编译文件中的500多个程序。 支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。 覆盖了所有基础知识,同时论述了高级特性。 详细地阐述了面向对象原理。 在线可获得Java讲座CD,其中包含Bruce Eckel的全部多媒体讲座。 在www.MindView.net网站上可以观看现场讲座、咨询和评论。 . 专门为第4版以及Java SE5/6重写了700多个编译文件中的500多个程序。 支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。 覆盖了所有基础知识,同时论述了高级特性。 详细地阐述了面向对象原理。 在线可获得Java讲座CD,其中包含Bruce Eckel的全部多媒体讲座。 在www.MindView.net网站上可以观看现场讲座、咨询和评论。 ---------------------------Java核心技术卷Ⅰ基础知识(原书第10版)--------------------------- Java领域*有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与《Java编程思想》齐名,10余年全球畅销不衰,广受好评。第10版根据Java SE 8全面更新,同时修正了第9版中的不足,系统全面讲解了Java语言的核心概念、语法、重要特性和开发方法,包含大量案例,实践性强。 本书共14章。第1章概述Java语言与其他程序设计语言不同的性能;第2章讲解如何下载和安装JDK及本书的程序示例;第3章介绍变量、循环和简单的函数;第4章讲解类和封装;第5章介绍继承;第6章解释接口和内部类;第7章讨论异常处理,并给出大量实用的调试技巧;第8章概要介绍泛型程序设计;第9章讨论Java平台的集合框架;第10章介绍GUI程序设计,讨论如何建立窗口、如何在窗口中绘图、如何利用几何图形绘图、如何采用多种字体格式化文本,以及如何显示图像;第11章详细讨论抽象窗口工具包的事件模型;第12章详细讨论Swing GUI工具包;第13章介绍如何将程序部署为应用或applet;第14章讨论并发。本书最后还有一个附录,其中列出了Java语言的保留字。 ---------------------------Java核心技术卷Ⅱ高级特性(原书第10版)--------------------------- 本书是Java领域有影响力和价值的著作之一,由拥有20多年教学与研究经验的Java技术专家撰写(获Jolt大奖),与《Java编程思想》齐名,10余年全球畅销不衰,广受好评。第10版根据JavaSE8全面更新,同时修正了第9版中的不足,系统全面讲解了Java语言的核心概念、语法、重要特性和开发方法,包含大量案例,实践性强。 ---------------------------Effective Java中文版(第2版)(第12届Jolt震撼大奖获奖图书)(Java领域四大名著之一)--------------------------- 本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。 本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。 |
| 目录 |
---------------------------Java编程思想(第4版)--------------------------- 读者评论 前言 简介 第1章 对象导论 1.1 抽象过程 1.2 每个对象都有一个接口 1.3 每个对象都提供服务 1.4 被隐藏的具体实现 1.5 复用具体实现 1.6 继承 1.6.1 “是一个”(is-a)与“像是一个”(is-like-a)关系 1.7 伴随多态的可互换对象 1.8 单根继承结构 1.9 容器 1.9.1 参数化类型(范型) 1.10 对象的创建和生命期 1.11 异常处理:处理错误 1.12 并发编程 1.13 Java与Internet 1.13.1 Web是什么 1.13.2 客户端编程 1.13.3 服务器端编程 1.22 总结 第2章 一切都是对象 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.2.1 存储到什么地方 2.2.2 特例:基本类型 2.2.3 Java中的数组 2.3 永远不需要销毁对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 创建新的数据类型:类 2.4.1 域和方法 2.4.2 基本成员默认值 2.5 方法、参数和返回值 2.5.1 参数列表 2.6 构建一个Java程序 2.6.1 名字可见性 2.6.2 运用其他构件 2.6.3 static 关键字 2.7 你的第一个Java程序 编译和运行 2.8 注释和嵌入式文档 2.8.1 注释文档 2.8.2 语法 2.8.3 嵌入式HTML 2.8.4 一些标签示例 2.8.5 文档示例 2.9 编码风格 2.10 总结 2.11 练习 第3章 操作符 3.1 更简单的打印语句 3.2 使用Java操作符 3.3 优先级 3.4 赋值 3.4.1 方法调用中的别名问题 3.5 算术操作符 3.5.1 一元加、减操作符 3.6 自动递增和递减 3.7 关系操作符 3.7.1 测试对象的等价性 3.8 逻辑操作符 3.8.1 短路 3.9 直接常量 3.9.1 指数记数法 3.10 按位操作符 3.11 移位操作符 3.12 三元操作符 if-else 3.13 字符串操作符 + 和 += 3.14 使用操作符时常犯的错误 3.15 类型转换操作符 3.15.1 截尾和舍入 3.15.2提升 3.16 Java没有“sizeof” 3.17 操作符小结 3.18 总结 第4章 控制执行流程 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-while 4.3.2 for 4.3.3 逗号操作符 4.4 Foreach语法 4.5 return 4.6 break和 continue 4.7 臭名昭著的“goto” 4.8 switch 4.9 总结 第5章 初始化与清理 5.1 用构造器确保初始化 5.2 方法重载 5.2.1 区分重载方法 5.2.2 涉及基本类型的重载 5.2.3 以返回值区分重载方法 5.3 缺省构造器 5.4 this关键字 5.4.1 在构造器中调用构造器 5.4.2 static的含义 5.5 清理:终结处理和垃圾回收 5.5.1 finalize()的用途何在 5.5.2 你必须实施清理 5.5.3 终结条件 5.5.4 垃圾回收器如何工作 5.6 成员初始化 5.6.1 指定初始化 5.7 构造器初始化 5.7.1 初始化顺序 5.7.2. 静态数据的初始化 5.7.3. 显式的静态初始化 5.7.4. 非静态实例初始化 5.8 数组初始化 5.8.1 可变参数列表 5.9 枚举类型 5.10 总结 第6章 访问权限控制 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第14章 类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java编程思想 研讨课 Hands-on Java研讨课CD Thinking in Objects研讨课 Thinking in Enterprise Java Thinking in Patterns(with Java) Thinking in Patterns研讨课 设计咨询与复审 附录B 资源 软件 编辑器与IDE 书籍 分析与设计 Python 我的著作列表 索引 ---------------------------Java核心技术 卷Ⅰ 基础知识(原书第10版)--------------------------- 译者序 前言 致谢 第1章 Java程序设计概述 1 1.1 Java程序设计平台 1 1.2 Java“白皮书”的关键术语 2 1.2.1 简单性 2 1.2.2 面向对象 2 1.2.3 分布式 3 1.2.4 健壮性 3 1.2.5 安全性 3 1.2.6 体系结构中立 4 1.2.7 可移植性 4 1.2.8 解释型 5 1.2.9 高性能 5 1.2.10 多线程 5 1.2.11 动态性 5 1.3 Java applet与Internet 6 1.4 Java发展简史 7 1.5 关于Java的常见误解 9 第2章 Java程序设计环境 12 2.1 安装Java开发工具包 12 2.1.1 下载JDK 12 2.1.2 设置JDK 13 2.1.3 安装库源文件和文档 15 2.2 使用命令行工具 16 2.3 使用集成开发环境 18 2.4 运行图形化应用程序 21 2.5 构建并运行applet 23 第3章 Java的基本程序设计结构 28 3.1 一个简单的Java应用程序 28 3.2 注释 31 3.3 数据类型 32 3.3.1 整型 32 3.3.2 浮点类型 33 3.3.3 char类型 34 3.3.4 Unicode和char类型 35 3.3.5 boolean类型 35 3.4 变量 36 3.4.1 变量初始化 37 3.4.2 常量 37 3.5 运算符 38 3.5.1 数学函数与常量 39 3.5.2 数值类型之间的转换 40 3.5.3 强制类型转换 41 3.5.4 结合赋值和运算符 42 3.5.5 自增与自减运算符 42 3.5.6 关系和boolean运算符 42 3.5.7 位运算符 43 3.5.8 括号与运算符级别 44 3.5.9 枚举类型 45 3.6 字符串 45 3.6.1 子串 45 3.6.2 拼接 46 3.6.3 不可变字符串 46 3.6.4 检测字符串是否相等 47 3.6.5 空串与Null串 48 3.6.6 码点与代码单元 49 3.6.7 String API 50 3.6.8 阅读联机API文档 52 3.6.9 构建字符串 54 3.7 输入输出 55 3.7.1 读取输入 55 3.7.2 格式化输出 58 3.7.3 文件输入与输出 61 3.8 控制流程 63 3.8.1 块作用域 63 3.8.2 条件语句 63 3.8.3 循环 66 3.8.4 确定循环 69 3.8.5 多重选择:switch语句 72 3.8.6 中断控制流程语句 74 3.9 大数值 76 3.10 数组 78 3.10.1 for each循环 79 3.10.2 数组初始化以及匿名数组 80 3.10.3 数组拷贝 81 3.10.4 命令行参数 81 3.10.5 数组排序 82 3.10.6 多维数组 85 3.10.7 不规则数组 88 第4章 对象与类 91 4.1 面向对象程序设计概述 91 4.1.1 类 92 4.1.2 对象 93 4.1.3 识别类 93 4.1.4 类之间的关系 94 4.2 使用预定义类 95 4.2.1 对象与对象变量 95 4.2.2 Java类库中的LocalDate类 98 4.2.3 更改器方法与访问器方法 100 4.3 用户自定义类 103 4.3.1 Employee类 103 4.3.2 多个源文件的使用 105 4.3.3 剖析Employee类 106 4.3.4 从构造器开始 106 4.3.5 隐式参数与显式参数 108 4.3.6 封装的优点 109 4.3.7 基于类的访问权限 111 4.3.8 私有方法 111 4.3.9 final实例域 112 4.4 静态域与静态方法 112 4.4.1 静态域 112 4.4.2 静态常量 113 4.4.3 静态方法 114 4.4.4 工厂方法 115 4.4.5 main方法 115 4.5 方法参数 118 4.6 对象构造 123 4.6.1 重载 123 4.6.2 默认域初始化 123 4.6.3 无参数的构造器 124 4.6.4 显式域初始化 125 4.6.5 参数名 125 4.6.6 调用另一个构造器 126 4.6.7 初始化块 127 4.6.8 对象析构与finalize方法 130 4.7 包 131 4.7.1 类的导入 131 4.7.2 静态导入 133 4.7.3 将类放入包中 133 4.7.4 包作用域 136 4.8 类路径 137 4.8.1 设置类路径 139 4.9 文档注释 140 4.9.1 注释的插入 140 4.9.2 类注释 140 4.9.3 方法注释 141 4.9.4 域注释 142 4.9.5 通用注释 142 4.9.6 包与概述注释 143 4.9.7 注释的抽取 143 4.10 类设计技巧 144 第5章 继承 147 5.1 类、超类和子类 147 5.1.1 定义子类 147 5.1.2 覆盖方法 149 5.1.3 子类构造器 150 5.1.4 继承层次 153 5.1.5 多态 154 5.1.6 理解方法调用 155 5.1.7 阻止继承:final类和方法 157 5.1.8 强制类型转换 158 5.1.9 抽象类 160 5.1.10 受保护访问 165 5.2 Object:所有类的超类 166 5.2.1 equals方法 166 5.2.2 相等测试与继承 167 5.2.3 hashCode方法 170 5.2.4 toString方法 172 5.3 泛型数组列表 178 5.3.1 访问数组列表元素 180 5.3.2 类型化与原始数组列表的兼容性 183 5.4 对象包装器与自动装箱 184 5.5 参数数量可变的方法 187 5.6 枚举类 188 5.7 反射 190 5.7.1 Class类 190 5.7.2 捕获异常 192 5.7.3 利用反射分析类的能力 194 5.7.4 在运行时使用反射分析对象 198 5.7.5 使用反射编写泛型数组代码 202 5.7.6 调用任意方法 205 5.8 继承的设计技巧 208 第6章 接口、lambda表达式与内部类 211 6.1 接口 211 6.1.1 接口概念 211 6.1.2 接口的特性 217 6.1.3 接口与抽象类 218 6.1.4 静态方法 218 6.1.5 默认方法 219 6.1.6 解决默认方法冲突 220 6.2 接口示例 222 6.2.1 接口与回调 222 6.2.2 Comparator接口 224 6.2.3 对象克隆 225 6.3 lambda表达式 231 6.3.1 为什么引入lambda表达式 231 6.3.2 lambda表达式的语法 232 6.3.3 函数式接口 234 6.3.4 方法引用 235 6.3.5 构造器引用 237 6.3.6 变量作用域 237 6.3.7 处理lambda表达式 239 6.3.8 再谈Comparator 242 6.4 内部类 242 6.4.1 使用内部类访问对象状态 244 6.4.2 内部类的特殊语法规则 247 6.4.3 内部类是否有用、必要和安全 248 6.4.4 局部内部类 250 6.4.5 由外部方法访问变量 250 6.4.6 匿名内部类 252 6.4.7 静态内部类 255 6.5 代理 258 6.5.1 何时使用代理 259 6.5.2 创建代理对象 259 6.5.3 代理类的特性 262 第7章 异常、断言和日志 264 7.1 处理错误 264 7.1.1 异常分类 265 7.1.2 声明受查异常 267 7.1.3 如何抛出异常 269 7.1.4 创建异常类 270 7.2 捕获异常 271 7.2.1 捕获异常 271 7.2.2 捕获多个异常 273 7.2.3 再次抛出异常与异常链 274 7.2.4 finally子句 275 7.2.5 带资源的try语句 278 7.2.6 分析堆栈轨迹元素 280 7.3 使用异常机制的技巧 282 7.4 使用断言 285 7.4.1 断言的概念 285 7.4.2 启用和禁用断言 286 7.4.3 使用断言完成参数检查 287 7.4.4 为文档假设使用断言 288 7.5 记录日志 289 7.5.1 基本日志 289 7.5.2 高级日志 289 7.5.3 修改日志管理器配置 291 7.5.4 本地化 292 7.5.5 处理器 293 7.5.6 过滤器 296 7.5.7 格式化器 296 7.5.8 日志记录说明 296 7.6 调试技巧 304 第8章 泛型程序设计 309 8.1 为什么要使用泛型程序设计 309 8.1.1 类型参数的好处 309 8.1.2 谁想成为泛型程序员 310 8.2 定义简单泛型类 311 8.3 泛型方法 313 8.4 类型变量的限定 314 8.5 泛型代码和虚拟机 316 8.5.1 类型擦除 316 8.5.2 翻译泛型表达式 317 8.5.3 翻译泛型方法 318 8.5.4 调用遗留代码 319 8.6 约束与局限性 320 8.6.1 不能用基本类型实例化类型参数 320 8.6.2 运行时类型查询只适用于原始类型 321 8.6.3 不能创建参数化类型的数组 321 8.6.4 Varargs警告 322 8.6.5 不能实例化类型变量 323 8.6.6 不能构造泛型数组 323 8.6.7 泛型类的静态上下文中类型变量无效 325 8.6.8 不能抛出或捕获泛型类的实例 325 8.6.9 可以消除对受查异常的检查 326 8.6.10 注意擦除后的冲突 327 8.7 泛型类型的继承规则 328 8.8 通配符类型 330 8.8.1 通配符概念 330 8.8.2 通配符的超类型限定 331 8.8.3 无限定通配符 334 8.8.4 通配符捕获 334 8.9 反射和泛型 337 8.9.1 泛型Class类 337 8.9.2 使用Class参数进行类型匹配 338 8.9.3 虚拟机中的泛型类型信息 338 第9章 集合 344 9.1 Java集合框架 344 9.1.1 将集合的接口与实现分离 344 9.1.2 Collection接口 346 9.1.3 迭代器 347 9.1.4 泛型实用方法 349 9.1.5 集合框架中的接口 352 9.2 具体的集合 353 9.2.1 链表 355 9.2.2 数组列表 362 9.2.3 散列集 363 9.2.4 树集 366 9.2.5 队列与双端队列 369 9.2.6 优先级队列 371 9.3 映射 372 9.3.1 基本映射操作 372 9.3.2 更新映射项 375 9.3.3 映射视图 376 9.3.4 弱散列映射 377 9.3.5 链接散列集与映射 378 9.3.6 枚举集与映射 379 9.3.7 标识散列映射 380 9.4 视图与包装器 381 9.4.1 轻量级集合包装器 382 9.4.2 子范围 382 9.4.3 不可修改的视图 383 9.4.4 同步视图 384 9.4.5 受查视图 384 9.4.6 关于可选操作的说明 385 9.5 算法 388 9.5.1 排序与混排 389 9.5.2 二分查找 391 9.5.3 简单算法 392 9.5.4 批操作 394 9.5.5 集合与数组的转换 394 9.5.6 编写自己的算法 395 9.6 遗留的集合 396 9.6.1 Hashtable类 397 9.6.2 枚举 397 9.6.3 属性映射 398 9.6.4 栈 399 9.6.5 位集 399 第10章 图形程序设计 403 10.1 Swing概述 403 10.2 创建框架 407 10.3 框架定位 409 10.3.1 框架属性 411 10.3.2 确定合适的框架大小 411 10.4 在组件中显示信息 415 10.5 处理2D图形 419 10.6 使用颜色 426 10.7 文本使用特殊字体 429 10.8 显示图像 435 第11章 事件处理 439 11.1 事件处理基础 439 11.1.1 实例:处理按钮点击事件 441 11.1.2 简洁地指定监听器 445 11.1.3 实例:改变观感 447 11.1.4 适配器类 450 11.2 动作 453 11.3 鼠标事件 459 11.4 AWT事件继承层次 465 11.4.1 语义事件和底层事件 466 第12章 Swing用户界面组件 469 12.1 Swing和模型–视图–控制器设计模式 469 12.1.1 设计模式 469 12.1.2 模型–视图–控制器模式 470 12.1.3 Swing按钮的模型–视图–控制器分析 473 12.2 布局管理概述 474 12.2.1 边框布局 477 12.2.2 网格布局 478 12.3 文本输入 481 12.3.1 文本域 482 12.3.2 标签和标签组件 483 12.3.3 密码域 484 12.3.4 文本区 485 12.3.5 滚动窗格 485 12.4 选择组件 488 12.4.1 复选框 488 12.4.2 单选钮 490 12.4.3 边框 493 12.4.4 组合框 496 12.4.5 滑动条 499 12.5 菜单 504 12.5.1 菜单创建 504 12.5.2 菜单项中的图标 507 12.5.3 复选框和单选钮菜单项 508 12.5.4 弹出菜单 508 12.5.5 快捷键和加速器 510 12.5.6 启用和禁用菜单项 511 12.5.7 工具栏 515 12.5.8 工具提示 516 12.6 复杂的布局管理 518 12.6.1 网格组布局 520 12.6.2 组布局 528 12.6.3 不使用布局管理器 537 12.6.4 定制布局管理器 537 12.6.5 遍历顺序 541 12.7 对话框 541 12.7.1 选项对话框 542 12.7.2 创建对话框 551 12.7.3 数据交换 554 12.7.4 文件对话框 559 12.7.5 颜色选择器 569 12.8 GUI程序排错 573 12.8.1 调试技巧 573 12.8.2 让AWT机器人完成工作 576 第13章 部署Java应用程序 580 13.1 JAR文件 580 13.1.1 创建JAR文件 580 13.1.2 清单文件 581 13.1.3 可执行JAR文件 582 13.1.4 资源 583 13.1.5 密封 585 13.2 应用首选项的存储 586 13.2.1 属性映射 586 13.2.2 首选项API 591 13.3 服务加载器 596 13.4 applet 598 13.4.1 一个简单的applet 599 13.4.2 applet HTML标记和属性 602 13.4.3 使用参数向applet传递信息 603 13.4.4 访问图像和音频文件 608 13.4.5 applet上下文 609 13.4.6 applet间通信 609 13.4.7 在浏览器中显示信息项 610 13.4.8 沙箱 611 13.4.9 签名代码 612 13.5 Java Web Start 614 13.5.1 发布Java Web Start应用 614 13.5.2 JNLP API 617 第14章 并发 624 14.1 什么是线程 624 14.1.1 使用线程给其他任务提供机会 629 14.2 中断线程 632 14.3 线程状态 635 14.3.1 新创建线程 635 14.3.2 可运行线程 635 14.3.3 被阻塞线程和等待线程 636 14.3.4 被终止的线程 636 14.4 线程属性 638 14.4.1 线程优先级 638 14.4.2 守护线程 639 14.4.3 未捕获异常处理器 639 14.5 同步 640 14.5.1 竞争条件的一个例子 641 14.5.2 竞争条件详解 644 14.5.3 锁对象 646 14.5.4 条件对象 648 14.5.5 synchronized关键字 653 14.5.6 同步阻塞 656 14.5.7 监视器概念 657 14.5.8 Volatile域 658 14.5.9 final变量 659 14.5.10 原子性 659 14.5.11 死锁 661 14.5.12 线程局部变量 663 14.5.13 锁测试与超时 665 14.5.14 读/写锁 666 14.5.15 为什么弃用stop和suspend方法 667 14.6 阻塞队列 668 14.7 线程安全的集合 673 14.7.1 高效的映射、集和队列 674 14.7.2 映射条目的原子更新 675 14.7.3 对并发散列映射的批操作 676 14.7.4 并发集视图 678 14.7.5 写数组的拷贝 679 14.7.6 并行数组算法 679 14.7.7 较早的线程安全集合 680 14.8 Callable与Future 681 14.9 执行器 685 14.9.1 线程池 685 14.9.2 预定执行 689 14.9.3 控制任务组 690 14.9.4 Fork-Join框架 691 14.9.5 可完成Future 694 14.10 同步器 696 14.10.1 信号量 696 14.10.2 倒计时门栓 697 14.10.3 障栅 697 14.10.4 交换器 698 14.10.5 同步队列 698 14.11 线程与Swing 698 14.11.1 运行耗时的任务 699 14.11.2 使用Swing工作线程 703 14.11.3 单一线程规则 708 附录A Java关键字 710 ---------------------------Java核心技术 卷Ⅱ 高级特性(原书第10版)--------------------------- 译者序 前言 第1章 Java SE 8的流库 1 1.1 从迭代到流的操作 1 1.2 流的创建 3 1.3 filter、map和flatMap方法 6 1.4 抽取子流和连接流 8 1.5 其他的流转换 8 1.6 简单约简 9 1.7 Optional类型 11 1.7.1 如何使用Optional值 11 1.7.2 不适合使用Optional值的方式 12 1.7.3 创建Optional值 13 1.7.4 用flatMap来构建Optional值的函数 13 1.8 收集结果 15 1.9 收集到映射表中 19 1.10 群组和分区 23 1.11 下游收集器 24 1.12 约简操作 28 1.13 基本类型流 29 1.14 并行流 34 第2章 输入与输出 39 2.1 输入/输出流 39 2.1.1 读写字节 39 2.1.2 完整的流家族 42 2.1.3 组合输入/输出流过滤器 45 2.2 文本输入与输出 48 2.2.1 如何写出文本输出 49 2.2.2 如何读入文本输入 51 2.2.3 以文本格式存储对象 52 2.2.4 字符编码方式 55 2.3 读写二进制数据 57 2.3.1 DataInput和DataOutput接口 57 2.3.2 随机访问文件 59 2.3.3 ZIP文档 63 2.4 对象输入/输出流与序列化 66 2.4.1 保存和加载序列化对象 66 2.4.2 理解对象序列化的文件格式 70 2.4.3 修改默认的序列化机制 75 2.4.4 序列化单例和类型安全的枚举 77 2.4.5 版本管理 78 2.4.6 为克隆使用序列化 80 2.5 操作文件 83 2.5.1 Path 83 2.5.2 读写文件 85 2.5.3 创建文件和 87 2.5.4 复制、移动和删除文件 88 2.5.5 获取文件信息 89 2.5.6 访问中的项 91 2.5.7 使用流 92 2.5.8 ZIP文件系统 95 2.6 内存映射文件 96 2.6.1 内存映射文件的性能 96 2.6.2 缓冲区数据结构 103 2.6.3 文件加锁机制 105 2.7 正则表达式 106 第3章 XML 117 3.1 XML概述 117 3.1.1 XML文档的结构 119 3.2 解析XML文档 122 3.3 验证XML文档 132 3.3.1 文档类型定义 133 3.3.2 XML Schema 139 3.3.3 实用示例 142 3.4 使用XPath来定位信息 154 3.5 使用命名空间 159 3.6 流机制解析器 162 3.6.1 使用SAX解析器 162 3.6.2 使用StAX解析器 166 3.7 生成XML文档 170 3.7.1 不带命名空间的文档 170 3.7.2 带命名空间的文档 170 3.7.3 写出文档 171 3.7.4 示例:生成SVG文件 172 3.7.5 使用StAX写出XML文档 174 3.8 XSL转换 181 第4章 网络 191 4.1 连接到服务器 191 4.1.1 使用telnet 191 4.1.2 用Java连接到服务器 193 4.1.3 套接字超时 195 4.1.4 因特网地址 196 4.2 实现服务器 198 4.2.1 服务器套接字 198 4.2.2 为多个客户端服务 201 4.2.3 半关闭 204 4.3 可中断套接字 205 4.4 获取Web数 211 4.4.1 URL和URI 211 4.4.2 使用URLConnection获取信息 213 4.4.3 提交表单数据 220 4.5 发送E-mail 228 第5章 数据库编程 232 5.1 JDBC的设计 232 5.1.1 JDBC驱动程序类型 233 5.1.2 JDBC的典型用法 234 5.2 结构化查询语言 234 5.3 JDBC配置 239 5.3.1 数据库URL 240 5.3.2 驱动程序JAR文件 240 5.3.3 启动数据库 240 5.3.4 注册驱动器类 241 5.3.5 连接到数据库 242 5.4 使用JDBC语句 244 5.4.1 执行SQL语句 244 5.4.2 管理连接、语句和结果集 247 5.4.3 分析SQL异常 248 5.4.4 组装数据库 250 5.5 执行查询操作 254 5.5.1 预备语句 254 5.5.2 读写LOB 259 5.5.3 SQL转义 261 5.5.4 多结果集 262 5.5.5 获取自动生成的键 263 5.6 可滚动和可更新的结果集 263 5.6.1 可滚动的结果集 264 5.6.2 可更新的结果集 266 5.7 行集 269 5.7.1 构建行集 270 5.7.2 被缓存的行集 270 5.8 元数据 273 5.9 事务 282 5.9.1 用JDBC对事务编程 282 5.9.2 保存点 283 5.9.3 批量更新 283 5.10 高级SQL类型 285 5.11 Web与企业应用中的连接管理 286 第6章 日期和时间API 288 6.1 时间线 288 6.2 本地时间 291 6.3 日期调整器 294 6.4 本地时间 295 6.5 时区时间 296 6.6 格式化和解析 299 6.7 与遗留代码的互操作 302 第7章 国际化 304 7.1 Locale对象 304 7.2 数字格式 309 7.3 货币 314 7.4 日期和时间 315 7.5 排序和范化 321 7.6 消息格式化 327 7.6.1 格式化数字和日期 327 7.6.2 选择格式 329 7.7 文本文件和字符集 331 7.7.1 文本文件 331 7.7.2 行结束符 331 7.7.3 控制台 331 7.7.4 日志文件 332 7.7.5 UTF-8字节顺序标志 332 7.7.6 源文件的字符编码 333 7.8 资源包 333 7.8.1 定位资源包 334 7.8.2 属性文件 335 7.8.3 包类 335 7.9 一个完整的例子 337 第8章 脚本、编译与注解处理 352 8.1 Java平台的脚本 352 8.1.1 获取脚本引擎 352 8.1.2 脚本赋值与绑定 353 8.1.3 重定向输入和输出 355 8.1.4 调用脚本的函数和方法 356 8.1.5 编译脚本 357 8.1.6 一个示例:用脚本处理GUI事件 358 8.2 编译器API 363 8.2.1 编译便捷之法 363 8.2.2 使用编译工具 363 8.2.3 一个示例:动态Java代码生成 368 8.3 使用注解 373 8.3.1 注解简介 373 8.3.2 一个示例:注解事件处理器 374 8.4 注解语法 379 8.4.1 注解接口 379 8.4.2 注解 380 8.4.3 注解各类声明 382 8.4.4 注解类型用法 383 8.4.5 注解this 384 8.5 标准注解 385 8.5.1 用于编译的注解 386 8.5.2 用于管理资源的注解 386 8.5.3 元注解 387 8.6 源码级注解处理 389 8.6.1 注解处理 389 8.6.2 语言模型API 390 8.6.3 使用注解来生成源码 390 8.7 字节码工程 393 8.7.1 修改类文件 393 8.7.2 在加载时修改字节码 398 第9章 安全 401 9.1 类加载器 401 9.1.1 类加载过程 402 9.1.2 类加载器的层次结构 403 9.1.3 将类加载器作为命名空间 404 9.1.4 编写你自己的类加载器 405 9.1.5 字节码校验 410 9.2 安全管理器与访问权限 414 9.2.1 权限检查 414 9.2.2 Java平台安全性 415 9.2.3 安全策略文件 418 9.2.4 定制权限 424 9.2.5 实现权限类 426 9.3 用户认证 431 9.3.1 JAAS框架 431 9.3.2 JAAS登录模块 437 9.4 数字签名 445 9.4.1 消息摘要 445 9.4.2 消息签名 448 9.4.3 校验签名 449 9.4.4 认证问题 452 9.4.5 证书签名 454 9.4.6 证书请求 454 9.4.7 代码签名 455 9.5 加密 460 9.5.1 对称密码 461 9.5.2 密钥生成 462 9.5.3 密码流 466 9.5.4 公共密钥密码 467 第10章 高级Swing 472 10.1 列表 472 10.1.1 JList构件 472 10.1.2 列表模式 477 10.1.3 插入和移除值 481 10.1.4 值的绘制 482 10.2 表格 486 10.2.1 简单表格 486 10.2.2 表格模型 489 10.2.3 对行和列的操作 493 10.2.4 单元格的绘制和编辑 506 10.3 树 517 10.3.1 简单的树 518 10.3.2 编辑树和树的路径 524 10.3.3 节点枚举 530 10.3.4 绘制节点 532 10.3.5 监听树事件 534 10.3.6 定制树模型 541 10.4 文本构件 548 10.4.1 文本构件中的修改跟踪 549 10.4.2 格式化的输入框 552 10.4.3 JSpinner构件 567 10.4.4 用JEditorPane显示HTML 574 10.5 进度指示器 579 10.5.1 进度条 580 10.5.2 进度监视器 582 10.5.3 监视输入流的进度 585 10.6 构件组织器和装饰器 590 10.6.1 分割面板 590 10.6.2 选项卡面板 592 10.6.3 桌面面板和内部框体 597 10.6.4 层 613 第11章 高级AWT 618 11.1 绘图操作流程 618 11.2 形状 620 11.2.1 形状类层次结构 621 11.2.2 使用形状类 623 11.3 区域 634 11.4 笔划 635 11.5 着色 642 11.6 坐标变换 644 11.7 剪切 648 11.8 透明与组合 650 11.9 绘图提示 657 11.10 图像的读取器和写入器 663 11.10.1 获得适合图像文件类型的读取器和写入器 663 11.10.2 读取和写入带有多个图像的文件 664 11.11 图像处理 671 11.11.1 构建光栅图像 672 11.11.2 图像过滤 678 11.12 打印 685 11.12.1 图形打印 685 11.12.2 打印多页文件 693 11.12.3 打印预览 694 11.12.4 打印服务程序 702 11.12.5 流打印服务程序 706 11.12.6 打印属性 707 11.13 剪贴板 712 11.13.1 用于数据传递的类和接口 713 11.13.2 传递文本 714 11.13.3 Transferable接口和数据风格 717 11.13.4 构建一个可传递的图像 718 11.13.5 通过系统剪贴板传递Java对象 722 11.13.6 使用本地剪贴板来传递对象引用 725 11.14 拖放操作 725 11.14.1 Swing对数据传递的支持 726 11.14.2 拖曳源 730 11.14.3 放置目标 732 11.15 平台集成 739 11.15.1 闪屏 739 11.15.2 启动桌面应用程序 743 11.15.3 系统托盘 748 第12章 本地方法 752 12.1 从Java程序中调用C函数 752 12.2 数值参数与返回值 757 12.3 字符串参数 759 12.4 访问域 764 12.4.1 访问实例域 765 12.4.2 访问静态域 768 12.5 编码签名 769 12.6 调用Java方法 770 12.6.1 实例方法 771 12.6.2 静态方法 774 12.6.3 构造器 775 12.6.4 另一种方法调用 775 12.7 访问数组元素 777 12.8 错误处理 780 12.9 使用调用API 785 12.10 完整的示例:访问Windows注册表 789 12.10.1 Windows注册表概述 789 12.10.2 访问注册表的Java平台接口 791 12.10.3 以本地方法方式实现注册表访问函数 791 ---------------------------Effective Java中文版(第2版)(第12届Jolt震撼大奖获奖图书)(Java领域四大名著之一)--------------------------- 译者序 序 前言 致谢 第1章 引言 第2章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造器 第2条:遇到多个构造器参数时要考虑用构建器 第3条:用私有构造器或者枚举类型强化Singleton属性 第4条:通过私有构造器强化不可实例化的能力 第5条:避免创建不必要的对象 第6条:消除过期的对象引用 第7条:避免使用终结函数 第3章 对于所有对象都通用的方法 第8条:改写equals时请遵守通用约定 第9条:改写equals时总要改写hashCode 第10条:始终要改写toString 第11条:谨慎地改写clone 第12条:考虑实现Comparable接口 第4章 类和接口 第13条:使类和成员的可访问性最小化 第14条:在公有类中使用访问方法而非公有域 第15条:使非可变性最小化 第16条:复合优先于继承 第17条:要么为继承而设计,并提供文档说明,要么就禁止继承 第18条:接口优于抽象类 第19条:接口只用于定义类型 第20条:类层次优于标签类 第21条:用函数对象表示策略 第22条:优先考虑静态成员类 第5章 泛型 第23条:请不要在新代码中使用原生态类型 第24条:消除非受检警告 第25条:列表优先于数组 第26条:优先考虑泛型 第27条:优先考虑泛型方法 第28条:利用有限制通配符来提升API的灵活性 第29条:优先考虑类型安全的异构容器 第6章 枚举和注解 第30条:用enum代替int常量 第31条:用实例域代替序数 第32条:用EnumSet代替位域 第33条:用EnumMap代替序数索引 第34条:用接口模拟可伸缩的枚举 第35条:注解优先于命名模式 第36条:坚持使用Override注解 第37条:用标记接口定义类型 第7章 方法 第38条:检查参数的有效性 第39条:必要时进行保护性拷贝 第40条:谨慎设计方法签名 第41条:慎用重载 第42条:慎用可变参数(varargs) 第43条:返回零长度的数组或者集合,而不是null 第44条:为所有导出的API元素编写文档注释 第8章 通用程序设计 第45条:将局部变量的作用域最小化 第46条:for-each循环优先于传统的for循环 第47条:了解和使用类库 第48条:如果需要精确的答案,请避免使用float和double 第49条:原语类型优先于装箱的原语类型 第50条:如果其他类型更适合,则尽量避免使用字符串 第51条:了解字符串连接的性能 第52条:通过接口引用对象 第53条:接口优先于反射机制 第54条:谨慎地使用本地方法 第55条:谨慎地进行优化 第56条:遵守普遍接受的命名惯例 第9章 异常 第57条:只针对异常的条件才使用异常 第58条:对可恢复的条件使用受检异常,对编程错误使用运行时异常 第59条:避免不必要地使用受检的异常 第60条:尽量使用标准的异常 第61条:抛出与抽象相对应的异常 第62条:每个方法抛出的所有异常都要有文档 第63条:在细节消息中包含失败-捕获信息 第64条:努力使失败保持原子性 第65条:不要忽略异常 第10章 并发 第66条:同步访问共享的可变数据 第67条:避免过多同步 第68条:executor和task优先于线程 第69条:并发工具优先于wait和notify 第70条:线程安全性的文档化 第71条:慎用延迟初始化 第72条:不要依赖于线程调度器 第73条:避免使用线程组 第11章 序列化 第74条:谨慎地实现Serializable 第75条:考虑使用自定义的序列化形式 第76条:保护性地编写readObject方法 第77条:对于实例控制,枚举类型优先于readResolve 第78条:考虑用序列化代理代替序列化实例 |