Java程序员修炼之道
查字典图书网
当前位置: 查字典 > 图书网 > 编程> Java程序员修炼之道

Java程序员修炼之道

7.3

作者:
出版社: 人民邮电出版社
原作名: The well-grounded Java developer:vital techniques of Java 7 and polyglot programming
译者: 吴海星  |  [荷] Martijn Verburg
出版年: 2013-7
页数: 395
定价: 89.00元
装帧: 平装
ISBN: 9787115321954



推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

内容简介:

本书分为四部分,第一部分全面介绍Java 7 的新特性,第二部分探讨Java 关键编程知识和技术,第三部分讨论JVM 上的新语言和多语言编程,第四部分将平台和多语言编程知识付诸实践。从介绍Java 7 的新特性入手,本书涵盖了Java 开发中最重要的技术,比如依赖注入、测试驱动的开发和持续集成,探索了JVM 上的非Java 语言,并详细讲解了多语言项目, 特别是涉及Groovy、Scala 和Clojure 语言的项目。此外,书中含有大量代码示例,帮助读者从实践中理解Java 语言和平台。

本书适合Java 开发人员以及对Java7 和JVM 新语言感兴趣的各领域人士阅读。

作者简介:

作者简介:

Benjamin J. Evans

是伦敦Java用户组发起人、Java社区过程执行委员会成员。他拥有多年Java开发经验,现在是一家面向金融业的Java技术公司的CEO。

Martijn Verburg

是jClarity的CTO、伦敦Java用户组领导人。作为一名技术专家和众多初创企业的OSS导师,他拥有十多年的经验。Martijn经常应邀出席Java界的大型会议(JavaOne、Devoxx、OSCON、FOSDEM等)并发表演讲,人送雅号“开发魔头”,赞颂他敢于向行业现状挑战的精神。

译者简介:

吴海星

具有10多年的Java软件开发经验,熟悉Java语言规范、基于Java的Web软件开发以及性能调优,曾获SCJP及SCWCD证书。

目录:

目 录

第一部分 用Java 7做开发

第1章 初识Java 72

1.1  语言与平台2

1.2  Coin项目:浓缩的都是精华4

1.3  Coin项目中的修改7

1.3.1  switch语句中的String7

1.3.2  更强的数值文本表示法8

1.3.3  改善后的异常处理9

1.3.4  try-with-resources(TWR)11

1.3.5  钻石语法13

1.3.6  简化变参方法调用14

1.4  小结15

第2章 新I/O17

2.1  Java I/O简史18

2.1.1  Java 1.0到1.319

2.1.2  在Java 1.4中引入的NIO19

2.1.3  下一代I/O-NIO.220

2.2  文件I/O的基石:Path20

2.2.1  创建一个Path23

2.2.2  从Path中获取信息23

2.2.3  移除冗余项24

2.2.4  转换Path25

2.2.5  NIO.2 Path和Java已有的File类25

2.3  处理目录和目录树26

2.3.1  在目录中查找文件26

2.3.2  遍历目录树27

2.4  NIO.2的文件系统I/O28

2.4.1  创建和删除文件29

2.4.2  文件的复制和移动30

2.4.3  文件的属性31

2.4.4  快速读写数据34

2.4.5  文件修改通知35

2.4.6  SeekableByteChannel37

2.5  异步 I/O操作37

2.5.1  将来式38

2.5.2  回调式40

2.6  Socket和Channel的整合41

2.6.1  NetworkChannel42

2.6.2  MulticastChannel42

2.7  小结43

第二部分 关键技术

第3章 依赖注入46

3.1  知识注入:理解IoC和DI46

3.1.1  控制反转47

3.1.2  依赖注入48

3.1.3  转成DI49

3.2  Java中标准化的DI53

3.2.1  @Inject注解54

3.2.2  @Qualifier注解55

3.2.3  @Named注解57

3.2.4  @Scope注解57

3.2.5  @Singleton注解57

3.2.6  接口Provider<T>58

3.3   Java中的DI参考实现:Guice 359

3.3.1  Guice新手指南59

3.3.2  水手绳结:Guice的各种绑定62

3.3.3  在Guice中限定注入对象的生命周期64

3.4  小结66

第4章 现代并发67

4.1  并发理论简介68

4.1.1  解释Java线程模型68

4.1.2  设计理念69

4.1.3  这些原则如何以及为何会相互冲突70

4.1.4  系统开销之源71

4.1.5  一个事务处理的例子71

4.2  块结构并发(Java 5之前)72

4.2.1  同步与锁73

4.2.2  线程的状态模型74

4.2.3  完全同步对象74

4.2.4  死锁76

4.2.5  为什么是synchronized77

4.2.6  关键字volatile78

4.2.7  不可变性79

4.3  现代并发应用程序的构件80

4.3.1  原子类:java.util. concurrent.atomic81

4.3.2  线程锁:java.util. concurrent.locks81

4.3.3  CountDownLatch85

4.3.4  ConcurrentHashMap86

4.3.5  CopyOnWriteArrayList87

4.3.6  Queue90

4.4  控制执行95

4.4.1  任务建模96

4.4.2  ScheduledThread-PoolExecutor97

4.5  分支/合并框架98

4.5.1  一个简单的分支/合并例子99

4.5.2  ForkJoinTask与工作窃取101

4.5.3  并行问题102

4.6  Java内存模型103

4.7  小结104

第5章 类文件与字节码106

5.1  类加载和类对象107

5.1.1  加载和连接概览107

5.1.2  验证108

5.1.3  Class对象108

5.1.4  类加载器109

5.1.5  示例:依赖注入中的类加载器110

5.2  使用方法句柄111

5.2.1  MethodHandle112

5.2.2  MethodType112

5.2.3  查找方法句柄113

5.2.4  示例:反射、代理与方法句柄114

5.2.5  为什么选择MethodHandle116

5.3  检查类文件117

5.3.1  介绍javap117

5.3.2  方法签名的内部形式118

5.3.3  常量池119

5.4  字节码121

5.4.1  示例:反编译类121

5.4.2  运行时环境123

5.4.3  操作码介绍124

5.4.4  加载和储存操作码125

5.4.5  数学运算操作码125

5.4.6  执行控制操作码126

5.4.7  调用操作码126

5.4.8  平台操作操作码127

5.4.9  操作码的快捷形式127

5.4.10  示例:字符串拼接127

5.5  invokedynamic129

5.5.1  invokedynamic如何工作129

5.5.2  示例:反编译invokedynamic调用130

5.6  小结132

第6章 理解性能调优133

6.1  性能术语134

6.1.1  等待时间135

6.1.2  吞吐量135

6.1.3  利用率135

6.1.4  效率135

6.1.5  容量136

6.1.6  扩展性136

6.1.7  退化136

6.2  务实的性能分析法136

6.2.1  知道你在测量什么137

6.2.2  知道怎么测量137

6.2.3  知道性能目标是什么138

6.2.4  知道什么时候停止优化139

6.2.5  知道高性能的成本139

6.2.6  知道过早优化的危险140

6.3  哪里出错了?我们担心的原因140

6.3.1  过去和未来的性能趋势:摩尔定律141

6.3.2  理解内存延迟层级142

6.3.3  为什么Java性能调优存在困难143

6.4  一个来自于硬件的时间问题144

6.4.1  硬件时钟144

6.4.2  麻烦的nanoTime()144

6.4.3  时间在性能调优中的作用146

6.4.4  案例研究:理解缓存未命中147

6.5  垃圾收集149

6.5.1  基本算法149

6.5.2  标记和清除150

6.5.3  jmap152

6.5.4  与GC相关的JVM参数155

6.5.5  读懂GC日志156

6.5.6  用VisualVM查看内存使用情况157

6.5.7  逸出分析159

6.5.8  并发标记清除160

6.5.9  新的收集器:G1161

6.6  HotSpot的JIT编译162

6.6.1  介绍HotSpot163

6.6.2  内联方法164

6.6.3  动态编译和独占调用165

6.6.4  读懂编译日志166

6.7  小结167

第三部分 JVM上的多语言编程

第7章 备选JVM语言170

7.1  Java 太笨?纯粹诽谤170

7.1.1  整合系统171

7.1.2  函数式编程的基本原理172

7.1.3  映射与过滤器173

7.2  语言生态学174

7.2.1  解释型与编译型语言175

7.2.2  动态与静态类型175

7.2.3  命令式与函数式语言176

7.2.4  重新实现的语言与原生语言176

7.3  JVM上的多语言编程177

7.3.1  为什么要用非Java语言178

7.3.2  崭露头角的语言新星179

7.4  如何挑选称心的非Java语言180

7.4.1  低风险181

7.4.2  与Java的交互操作181

7.4.3  良好的工具和测试支持182

7.4.4  备选语言学习难度182

7.4.5  使用备选语言的开发者182

7.5  JVM对备选语言的支持183

7.5.1  非Java语言的运行时环境183

7.5.2  编译器小说184

7.6  小结185

第8章 Groovy:Java的动态伴侣187

8.1  Groovy入门189

8.1.1  编译和运行189

8.1.2  Groovy控制台190

8.2  Groovy 101:语法和语义191

8.2.1  默认导入192

8.2.2  数字处理192

8.2.3  变量、动态与静态类型、作用域193

8.2.4  列表和映射语法195

8.3  与Java的差异——新手陷阱196

8.3.1  可选的分号和返回语句196

8.3.2  可选的参数括号197

8.3.3  访问限定符197

8.3.4  异常处理198

8.3.5  Groovy中的相等198

8.3.6  内部类199

8.4  Java不具备的Groovy特性199

8.4.1  GroovyBean199

8.4.2  安全解引用操作符200

8.4.3  猫王操作符201

8.4.4  增强型字符串201

8.4.5  函数字面值202

8.4.6  内置的集合操作203

8.4.7  对正则表达式的内置支持204

8.4.8  简单的XML处理205

8.5  Groovy与Java的合作207

8.5.1  从Groovy调用Java207

8.5.2  从Java调用Groovy208

8.6  小结211

第9章 Scala:简约而不简单212

9.1  走马观花Scala213

9.1.1  简约的Scala213

9.1.2  match表达式215

9.1.3  case类217

9.1.4  actor218

9.2  Scala能用在我的项目中吗219

9.2.1  Scala和Java的比较219

9.2.2  何时以及如何开始使用Scala220

9.2.3  Scala可能不适合当前项目的迹象220

9.3  让代码因Scala重新绽放221

9.3.1  使用编译器和REPL221

9.3.2  类型推断222

9.3.3  方法223

9.3.4  导入224

9.3.5  循环和控制结构224

9.3.6  Scala的函数式编程225

9.4  Scala对象模型:相似但不同226

9.4.1  一切皆对象226

9.4.2  构造方法228

9.4.3  特质228

9.4.4  单例和伴生对象230

9.4.5  case类和match表达式232

9.4.6  警世寓言234

9.5  数据结构和集合235

9.5.1  List235

9.5.2  Map238

9.5.3  泛型239

9.6  actor介绍242

9.6.1  代码大舞台242

9.6.2  用mailbox跟actor通信243

9.7  小结244

第10章 Clojure:更安全地编程245

10.1  Clojure介绍245

10.1.1  Clojure的Hello World246

10.1.2  REPL入门247

10.1.3  犯了错误248

10.1.4  学着去爱括号248

10.2  寻找Clojure:语法和语义249

10.2.1  特殊形式新手营249

10.2.2  列表、向量、映射和集250

10.2.3  数学运算、相等和其他操作252

10.3  使用函数和循环253

10.3.1  一些简单的Clojure函数253

10.3.2  Clojure中的循环255

10.3.3  读取器宏和派发器256

10.3.4  函数式编程和闭包257

10.4  Clojure序列258

10.4.1  懒序列260

10.4.2  序列和变参函数261

10.5  Clojure与Java的互操作262

10.5.1  从Clojure中调用Java262

10.5.2  Clojure值的Java类型263

10.5.3  使用Clojure代理264

10.5.4  用REPL做探索式编程264

10.5.5  在Java中使用Clojure265

10.6  Clojure并发265

10.6.1  未来式与并行调用266

10.6.2  ref形式267

10.6.3  代理271

10.7  小结272

第四部分 多语种项目开发

第11章 测试驱动开发274

11.1  TDD概览275

11.1.1  一个测试用例276

11.1.2  多个测试用例280

11.1.3  深入思考红—绿—重构循环282

11.1.4  JUnit283

11.2  测试替身285

11.2.1  虚设对象286

11.2.2  存根对象287

11.2.3  伪装替身290

11.2.4  模拟对象295

11.3  ScalaTest296

11.4  小结298

第12章 构建和持续集成300

12.1  与Maven 3相遇302

12.2  Maven 3入门项目303

12.3  用Maven 3构建Java7developer项目305

12.3.1  POM305

12.3.2  运行示例311

12.4  Jenkins:满足CI需求314

12.4.1  基础配置315

12.4.2  设置任务316

12.4.3  执行任务319

12.5  Maven和Jenkins代码指标320

12.5.1  安装Jenkins插件321

12.5.2  用Checkstyle保持代码一致性322

12.5.3  用FindBugs设定质量标杆323

12.6  Leiningen325

12.6.1  Leiningen入门326

12.6.2  Leiningen的架构326

12.6.3  Hello Lein327

12.6.4  用Leiningen做面向REPL的TDD329

12.6.5  用Leiningen打包和部署330

12.7  小结332

第13章 快速Web开发333

13.1  Java Web框架的问题334

13.1.1  Java编译为什么不好335

13.1.2  静态类型为什么不好335

13.2  选择Web框架的标准336

13.3  Grails入门338

13.4  Grails快速启动项目338

13.4.1  创建域对象340

13.4.2  测试驱动开发340

13.4.3  域对象持久化342

13.4.4  创建测试数据343

13.4.5  控制器343

13.4.6  GSP/JSP页面344

13.4.7  脚手架和UI的自动化创建346

13.4.8  快速周转的开发347

13.5  深入Grails347

13.5.1  日志347

13.5.2  GORM:对象关系映射348

13.5.3  Grails插件349

13.6  Compojure入门350

13.6.1  Hello Compojure350

13.6.2  Ring和路由352

13.6.3  Hiccup353

13.7  我是不是一只水獭353

13.7.1  项目设置354

13.7.2  核心函数357

13.8  小结359

第14章 保持优秀361

14.1  对Java 8的期待361

14.1.1  lambda表达式(闭包)362

14.1.2  模块化(拼图Jigsaw)363

14.2  多语言编程365

14.2.1  语言的互操作性及元对象协议365

14.2.2  多语言模块化366

14.3  未来的并发趋势367

14.3.1  多核的世界367

14.3.2  运行时管理的并发367

14.4  JVM的新方向368

14.4.1  VM的合并368

14.4.2  协同程序369

14.4.3  元组370

14.5  小结372

附录A  java7developer:源码安装373

附录B  glob模式语法及示例380

附录C  安装备选JVM语言382

附录D  Jenkins的下载和安装388

附录E  java7developer:Maven POM390

文章试读:自2009年1月起,Coin便是Java 7(和Java 8)中一个开源的子项目。本节,我们会以Coin项目中包含的小变化为例,解释一下Java语言如何演进以及那些特性是如何被选中的。 为Coin项目命名 创建Coin项目是为了反映Java语言中的微小变动。项目的名字是个双关语——像硬币一样小的变化(small change comes as coins),而“套用一句老话”(to coin ...

(查看全部试读)

展开全文
热门标签:
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •