《On Java 中文版 进阶卷》是由人民邮电出版社出版的一本关于Java方面的书籍,作者是布鲁斯·埃克尔,主要介绍了关于Java、Java进阶方面的知识内容,目前在Java类书籍综合评分为:9.6分。
书籍介绍
java编程开发语言程序设计核心技术教程书籍,Thinkingin作者BruceEckel重讲Java的编程思想,基于Java81117,配套视频讲解与导读指南!
内容简介
本书内容主要是对《OnJava中文版基础卷》的拓展延伸,重点讲解Java的高级特性、并发、设计模式等相关进阶知识,对一些和开发密切相关的底层操作(如I/O系统、底层并发、数据压缩等)进行深入探讨,同时针对基础卷的重点章节进行了补充说明(如第3章增补了一些关于集合的高级特性)。在附录中,作者给出了67条关于低级程序设计和编写代码的建议,并分享了自己成为程序员的一些经验之谈。
本书适合有一定项目开发经验的Java程序员阅读。
目录
- 第1章枚举类型001
- 1.1枚举类型的基本特性/001
- 静态导入枚举类型/002
- 1.2在枚举类型中增加自定义方
- 法/003
- 重载枚举类型中的方法/004
- 1.3在switch语句中使用枚举/005
- 1.4values()方法的神秘之处/006
- 1.5实现,而不是继承/009
- 1.6随机选择/010
- 1.7使用接口来组织枚举/011
- 1.8用EnumSet来代替标识/015
- 1.9使用EnumMap/017
- 1.10常量特定方法/018
- 1.10.1用枚举实现职责链模
- 式/023
- 1.10.2用枚举实现状态机/027
- 1.11多路分发/032
- 1.11.1使用枚举类型分发/034
- 1.11.2使用常量特定方法/036
- 1.11.3使用EnumMap分发/038
- 1.11.4使用二维数组/039
- 1.12支持模式匹配的新特性/041
- 1.13新特性:switch中的箭头语
- 法/041
- 1.14新特性:switch中的case
- null/042
- 1.15新特性:将switch作为表达
- 式/044
- 1.16新特性:智能转型/046
- 1.17新特性:模式匹配/048
- 1.17.1违反里氏替换原则/049
- 1.17.2守卫/053
- 1.17.3支配性/055
- 1.17.4覆盖范围/057
- 1.18总结/058
- 第2章对象传递和返回060
- 2.1传递引用/061
- 引用别名/061
- 2.2创建本地副本/063
- 2.2.1值传递/063
- 2.2.2克隆对象/064
- 2.2.3为类增加可克隆能力/065
- 2.2.4成功的克隆/067
- 2.2.5Object.clone()的效果/068
- 2.2.6克隆组合对象/070
- 2.2.7深拷贝ArrayList/073
- 2.2.8通过序列化进行深拷贝/074
- 2.2.9在继承层次结构中增加可克隆性并向下覆盖/076
- 2.2.10为什么用这种奇怪的
- 设计/077
- 2.3控制可克隆性/078
- 复制构造器/082
- 2.4不可变类/086
- 2.4.1创建不可变类/088
- 2.4.2不可变性的缺点/089
- 2.4.3String很特殊/091
- 2.5总结/091
- 第3章集合主题093
- 3.1样例数据/093
- 3.2List的行为/099
- 3.3Set的行为/102
- 3.4在Map上使用函数式操作/104
- 3.5选择Map的部分元素/105
- 3.6填充集合/107
- 3.6.1使用Suppliers来填充Collection/108
- 3.6.2使用Suppliers来填充
- Map/109
- 3.7使用享元自定义Collection和Map/112
- 3.8Collection的功能/123
- 3.9可选的操作/125
- 不支持的操作/127
- 3.10Set与存储顺序/129
- SortedSet/132
- 3.11Queue/134
- 3.11.1优先级队列/135
- 3.11.2Deque/136
- 3.12理解Map/137
- 3.12.1性能/139
- 3.12.2SortedMap/141
- 3.12.3LinkedHashMap/143
- 3.13工具函数/144
- 3.13.1List上的排序和
- 查找/147
- 3.13.2创建不可修改的Collection或Map/148
- 3.13.3同步Collection或
- Map/150
- 3.14持有引用/151
- WeakHashMap/154
- 3.15Java1.0/1.1的集合类/155
- 3.15.1Vector和
- Enumeration/155
- 3.15.2Hashtable/156
- 3.15.3Stack/157
- 3.15.4BitSet/158
- 3.16总结/160
- 第4章注解162
- 4.1基本语法/163
- 4.1.1定义注解/164
- 4.1.2元注解/165
- 4.2编写注解处理器/166
- 4.2.1注解元素/167
- 4.2.2默认值的限制/168
- 4.2.3生成外部文件/168
- 4.2.4注解不支持继承/172
- 4.2.5实现处理器/172
- 4.3用javac处理注解/174
- 4.3.1简单的处理器/175
- 4.3.2更复杂的处理器/178
- 4.4基于注解的单元测试/182
- 4.4.1在@Unit中使用泛型/190
- 4.4.2实现@Unit/192
- 4.5总结/202
- 第5章并发编程203
- 5.1令人迷惑的术语/204
- 并发的新定义/206
- 5.2并发的超能力/207
- 5.3并发为速度而生/209
- 5.4Java并发四定律/211
- 5.4.1不要使用并发/211
- 5.4.2一切都不可信,一切都很
- 重要/212
- 5.4.3能运行并不代表没有
- 问题/212
- 5.4.4你终究要理解并发/213
- 5.5残酷的事实/214
- 5.6本章剩余部分/216
- 5.7并行流/218
- 5.7.1parallel()并非灵丹妙
- 药/219
- 5.7.2parallel()和limit()的
- 作用/224
- 5.7.3并行流只是看起来很简
- 单/228
- 5.8创建和运行任务/228
- 5.8.1Task和Executor/228
- 5.8.2使用更多的线程/232
- 5.8.3生成结果/234
- 5.8.4作为任务的lambda与方法引用/236
- 5.9终止长时间运行的任务/237
- 5.10CompletableFuture/240
- 5.10.1基本用法/241
- 5.10.2其他操作/244
- 5.10.3合并多个Completable-Future/247
- 5.10.4模拟场景应用/251
- 5.10.5异常/253
- 5.11死锁/259
- 5.12构造器并不是线程安全的/264
- 5.13工作量、复杂性、成本/268
- 5.14总结/273
- 5.14.1缺点/274
- 5.14.2Java核心设计的失败之
- 处/275
- 5.14.3其他的库/275
- 5.14.4设想一种为并发而设计的语言/276
- 5.14.5延伸阅读/276
- 第6章底层并发277
- 6.1什么是线程?/277
- 6.1.1线程数/279
- 6.1.2我可以创建多少线程/280
- 6.2捕获异常/282
- 6.3共享资源/286
- 6.3.1资源竞争/286
- 6.3.2解决资源竞争/290
- 6.3.3将EvenProducer同步化/292
- 6.4volatile关键字/293
- 6.4.1字分裂/293
- 6.4.2可见性/294
- 6.4.3(指令)重排序和先行发
- 生/295
- 6.4.4何时使用volatile/296
- 6.5原子性/296
- 6.5.1Josh的序列号/300
- 6.5.2原子类/303
- 6.6临界区/304
- 6.6.1在其他对象上进行同步/307
- 6.6.2使用显式Lock对象/308
- 6.7库组件/310
- 6.7.1延迟队列DelayQueue/311
- 6.7.2优先级阻塞队列Priority-BlockingQueue/313
- 6.7.3无锁集合/316
- 6.8总结/317
- 第7章JavaI/O系统319
- 7.1I/O流/319
- 7.1.1各种InputStream类型/321
- 7.1.2各种OutputStream类型/321
- 7.1.3添加属性和有用的接口/322
- 7.1.4各种Reader和Writer/324
- 7.1.5自成一家的Random-AccessFile/327
- 7.1.6I/O流的典型用法/328
- 7.1.7小结/335
- 7.2标准I/O/335
- 7.2.1从标准输入中读取/336
- 7.2.2将System.out转换为PrintWriter/336
- 7.2.3标准I/O重定向/337
- 7.2.4进程控制/338
- 7.3新I/O系统/340
- 7.3.1字节缓冲区ByteBuffer/340
- 7.3.2转换数据/344
- 7.3.3获取基本类型/347
- 7.3.4视图缓冲区/348
- 7.3.5用缓冲区操纵数据/352
- 7.3.6内存映射文件/357
- 7.3.7文件加锁/361
- 第8章设计模式364
- 8.1设计模式的概念/364
- 8.2单例模式/366
- 8.3设计模式的分类/370
- 8.4模板方法/370
- 8.5封装实现/371
- 8.5.1代理模式/372
- 8.5.2状态模式/373
- 8.5.3状态机模式/376
- 8.6工厂模式:封装对象的创建/377
- 8.6.1动态工厂模式/380
- 8.6.2多态工厂模式/381
- 8.6.3抽象工厂模式/382
- 8.7函数对象模式/384
- 8.7.1命令模式/385
- 8.7.2策略模式/386
- 8.7.3职责链模式/388
- 8.8改变接口/391
- 8.8.1适配器模式/391
- 8.8.2外观模式/392
- 8.9解释器模式:运行时的灵活
- 性/394
- 8.10回调/394
- 8.10.1观察者模式/394
- 8.10.2示例:观察花朵/395
- 8.10.3一个可视化的观察者示
- 例/398
- 8.11多路分发/401
- 8.12模式重构/405
- 8.12.1Trash和它的子类/405
- 8.12.2信使对象/410
- 8.12.3使工厂通用化/411
- 8.12.4从文件解析Trash/412
- 8.12.5用DynaFactory实现回
- 收/415
- 8.12.6将用法抽象化/416
- 8.12.7用多路分发重新设计/420
- 8.12.8访问者模式/427
- 8.12.9反射是有害的?/431
- 8.13总结/435
- 编程指南/436
- Javadoc/446
- 理解equals()和hashCode()/451
- 数据压缩/475
- 对象序列化/481
- 静态类型检查的利与弊/505