logo资料库

Groovy-in-Action[中文].pdf

第1页 / 共213页
第2页 / 共213页
第3页 / 共213页
第4页 / 共213页
第5页 / 共213页
第6页 / 共213页
第7页 / 共213页
第8页 / 共213页
资料共213页,剩余部分请下载后查看
目录 1.3. 1.4. 1.2. 第一章 1.1. Groovy 之旅 ................................................................................................ 5 groovy 背景 ................................................................................................. 6 groovy 是什么? ................................................................................... 7 1.1.1. 1.1.2. 与 java 共事:无缝集成 ........................................................................ 7 1.1.3. 强劲代码:一个特性丰富的语言........................................................... 9 1.1.4. 后台公司支持的社区驱动 ................................................................... 12 groovy 能为你做什么 ................................................................................. 13 java 内行人士的 groovy....................................................................... 13 1.2.1. 1.2.2. 对于脚本编写人员的 groovy ............................................................... 14 1.2.3. 为敏捷开发人员 ................................................................................. 14 运行 groovy ............................................................................................... 15 1.3.1. 使用 groovysh 编写“HelloWor ld” ...................................................... 16 1.3.2. 使用 groovyConsole ........................................................................... 19 1.3.3. 使用 groovy ........................................................................................ 20 编译和运行 groovy .................................................................................... 21 1.4.1. 使用 groovyc 编译 groovy.................................................................... 22 1.4.2. 使用 java 运行编译好的 groovy 脚本 ................................................... 22 1.4.3. 使用 Ant 编译和运行 .......................................................................... 23 Groovy 的 IDE 和编辑器支持 ..................................................................... 24 1.5.1. 集成 IntelliJ IDEA ............................................................................... 25 Eclipse 插件 ....................................................................................... 25 1.5.2. 1.5.3. 其他文本编辑器的支持....................................................................... 26 摘要.......................................................................................................... 26 第一部分 groovy 语言 .................................................................................................... 28 第二章 前奏:groovy 基础 ............................................................................................. 30 2.1 一般代码外观 .................................................................................................... 30 2.1.1 groovy 代码的注释 ................................................................................... 30 2.1.2 比较 groovy 和 java 的语法....................................................................... 31 2.1.3 简洁优雅的代码 ....................................................................................... 32 2.2 探索语言的断言功能 ......................................................................................... 33 2.3 Groovy 预览 ....................................................................................................... 35 2.3.1 声明类 .................................................................................................... 36 2.3.2 使用脚本 ................................................................................................. 36 1.5. 1.6. 2.3.3 GroovyBeans ............................................................................................ 37 2.3.4 处理文本 ................................................................................................. 38 2.3.5 数字也是对象 .......................................................................................... 40 2.3.6 使用 lists/maps/ranges ............................................................................... 41 2.3.7 代码块:闭包 .......................................................................................... 45 2.3.8 groovy 结构控制 ....................................................................................... 47 2.4 在 java 环境中运行 groovy ................................................................................. 49 2.4.1 我的类就是你的类 ................................................................................... 49 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 1 / 213
2.4.2 GDK:groovy 类库 ..................................................................................... 50 2.4.3 groovy 的生命周期 ................................................................................... 52 2.5 概要 ................................................................................................................. 55 第三章 groovy 数据类型................................................................................................. 56 3.1 无处不在的对象 ................................................................................................ 56 3.1.1 java 类型——专有类型和引用类型............................................................ 56 3.1.2 Groovy 的答案:一切都是对象 ................................................................. 57 3.1.3 自动装箱和拆箱 ....................................................................................... 59 3.1.4 没有中间层的拆箱 ................................................................................... 60 3.2 可选类型的概念 ................................................................................................. 61 3.2.1 指定类型.................................................................................................. 61 3.2.2 静态类型 VS 动态类型.............................................................................. 62 3.3 重载操作符 ....................................................................................................... 62 3.3.1 可重写的操作符一览 ................................................................................ 63 3.3.2 重写操作符实战 ....................................................................................... 64 3.3.3 确保正确的工作 ...................................................................................... 66 3.4 使用字符串 ........................................................................................................ 68 3.4.1 字符串的样式 .......................................................................................... 68 3.4.2 使用 Gstring 进行工作 .............................................................................. 71 3.4.3 从 java 到 groovy ..................................................................................... 72 3.5 使用正则表达式 ................................................................................................ 74 3.5.1 在字符串中使用模式 ............................................................................... 76 3.5.2 应用模式 ................................................................................................. 78 3.5.3 模式实战 ................................................................................................. 80 3.5.4 模式和性能 .............................................................................................. 82 3.5.5 模式分类 ................................................................................................. 83 3.6 使用数字 .......................................................................................................... 84 3.6.1 造型和数字运算符 ................................................................................... 84 3.6.2 GDK 为数字提供的方法 ........................................................................... 86 3.7 概要 ................................................................................................................. 87 第四章 集合类型 ........................................................................................................... 89 4.1 使用 ranges ....................................................................................................... 89 4.1.1 规定 ranges .............................................................................................. 90 4.1.2 range 是对象............................................................................................. 92 4.1.3 range 实战 ................................................................................................ 93 4.2 使用 list ............................................................................................................ 95 4.2.1 声明 list................................................................................................... 95 4.2.2 使用 list 操作符 ....................................................................................... 96 4.2.3 使用列表方法 .........................................................................................100 4.2.4 list 实战...................................................................................................104 4.3 使用 map..........................................................................................................106 4.3.1 声明 map ................................................................................................106 4.3.2 使用 map 操作符.....................................................................................108 4.3.3 map 实战 ................................................................................................. 112 4.4 groovy 集合中需要注意的地方........................................................................... 114 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 2 / 213
4.4.1 了解并发修改 ......................................................................................... 114 4.4.2 识别副本和修改在语义上的不同 ............................................................. 115 4.5 摘要 ................................................................................................................ 115 第五章 闭包 ................................................................................................................. 117 5.1 出身名门的闭包 ............................................................................................... 117 5.2 闭包例子 ......................................................................................................... 118 5.2.1 使用迭代(iterator) ............................................................................... 119 5.2.2 处理资源 ................................................................................................120 5.3 声明闭包 .........................................................................................................123 5.3.1 简单的声明方式 ......................................................................................123 5.3.2 使用赋值的方式声明闭包 .......................................................................124 5.3.3 引用一个方法作为闭包 ...........................................................................125 5.3.4 比较 .......................................................................................................127 5.4 应用闭包 .........................................................................................................128 5.4.1 调用闭包 ................................................................................................128 5.4.2 更多的闭包方法 .....................................................................................131 5.5 理解范围 .........................................................................................................134 5.5.1 简单的变量范围 .....................................................................................135 5.5.2 闭包范围.................................................................................................135 5.5.3 工作中的范围使用:典型的累加测试 ......................................................138 5.6 从闭包返回结果 ...............................................................................................140 5.7 设计模式的支持 ...............................................................................................141 5.7.1 Visitor 模式 .............................................................................................142 5.7.2 Builder 模式 ............................................................................................142 5.7.3 其他相关模式 .........................................................................................143 5.8 结束语 .............................................................................................................143 第六章 groovy 的控制结构 ............................................................................................145 6.1 groovy 真相.......................................................................................................145 6.1.1 评估 Boolean 测试 ..................................................................................145 6.1.2 将 Boolean 测试分配给变量 ....................................................................147 6.2 条件执行结构 ..................................................................................................148 6.2.1 普通的 if 语句 ........................................................................................148 6.2.2 三元条件操作符 .....................................................................................149 6.2.3 switch 语句..............................................................................................150 6.2.4 使用断言进行安全检查 ...........................................................................153 6.3 循环 ................................................................................................................157 6.3.1 while 循环 ...............................................................................................157 6.3.2 for 循环 ...................................................................................................158 6.4 退出代码块和方法 ...........................................................................................160 6.4.1 正常终止:return/break/continue ..............................................................160 6.4.2 异常:throw/try-catch-finally ...................................................................161 6.5 总结 ................................................................................................................162 第七章 groovy 风格的动态面向对象 ..............................................................................163 7.1 定义类和脚本 ..................................................................................................163 7.1.1 定义属性和本地变量 ..............................................................................164 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 3 / 213
7.1.2 方法和参数 ............................................................................................167 7.1.3 安全的引用符号 (?.) ...............................................................................171 7.1.4 构造器(构造方法) ..............................................................................173 7.2 组织类和脚本 ..................................................................................................175 7.2.1 文件到类的关系 .....................................................................................175 7.2.2 在包中组织类 .........................................................................................177 7.2.3 类路径更长远的考虑 ..............................................................................181 7.3 高级 OO 特性...................................................................................................183 7.3.1 使用继承.................................................................................................183 7.3.2 使用接口.................................................................................................183 7.3.3 Multimethods ...........................................................................................184 7.4 使用 GroovyBean 工作 ......................................................................................186 7.4.1 声明 Bean ...............................................................................................187 7.4.2 使用 bean 工作........................................................................................189 7.4.3 为任何对象使用 bean 方法 ......................................................................192 7.4.4 属性、访问方法、隐射和扩展(Fields/accessors/maps/Expando) .............193 7.5 使用强劲的特性 ...............................................................................................195 7.5.1 使用 GPath 来查询对象 ...........................................................................195 7.5.2 注入展开操作符 .....................................................................................200 7.5.3 使用 use 关键字进行混入 ........................................................................201 7.6 在 groovy 进行元程序编程 ................................................................................204 7.6.1 理解元类(MetaClass)的概念................................................................205 7.6.2 方法调用和拦截 .....................................................................................207 7.6.3 方法拦截实战..........................................................................................208 7.7 总结 ................................................................................................................212 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 4 / 213
第一章 Groovy 之旅 欢迎进入 groovy 世界。 也许你已经在某些博客和邮件列表中听说过 groovy,已经在这里或者哪里看到了 groovy 的片段报道,大概你的同事已经告诉你用 java 写的一页代码在 grovvy 中只需要短短的几行 就可以完成相同的工作,也许你仅仅因为这本书的名字比较好记而翻阅这本书,为什么你应 该学习 groovy?你期望的回报是什么? Groovy 将让你迅速的获得成功,groovy 比用 java 写代码更加简单,更易进行自动化重 复的任务,还可以作为日常工作用来编写特别脚本,groovy 的代码阅读起来更加自然易懂, 当然更重要的是,groovy 用起来更加有趣。 学习 groovy 是一项明智的投资。Groovy 给给 java 平台带来高级语言强大的特性,如闭 包、动态类型和元对象协议,你现有的 java 知识在 Groovy 中仍然有效,而不会过时。Groovy 建立在你现有的 java 经验和熟悉程度之上,这样你可以在适当的时候进行选择,或者混合 使用 java 和 groovy。 如果对在 Ruby 上实现一个 web 应用不会感到惊奇的,Python 变戏法似的容器,Perl 人 员通过少数的键盘输入来进行服务器管理,或者 Lisp 领袖利用极少的代码改变转向他们整 个代码库,那么想想他们使用的语言的语言特性。Groovy 的目标是在 java 平台有提供类似 功能的语言,尽量保留 java 对象模型和对 java 编程人员保持透明。 第一章介绍 groovy 的背景信息和开始使用 groovy 需要知道的一些知识。本章以 groovy 的故事开始:为什么创建 groovy,驱动的设计因素是什么,并且 groovy 在语言界的位置是 怎样的。接下来的部分阐述 groovy 的优势和如何使用 groovy 来把你的工作变得更轻松。 我们坚信学习一门程序语言的唯一途径是:动手尝试它,我们介绍编译程序、解释程序 和处理程序处理脚本时各种各样的变化;列出了在广泛使用的 IDE 上使用的各种插件和找 到 groovy 最新信息的地方。 在本章的最后你将对 groovy 的使用有一个基本的认识。 衷心希望你在用 groovy 编程时和使用本书做指定参考时有一个愉快的时光。 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 5 / 213
1.1. groovy 背景 在 GroovyOne 2004——一次 groovy 开发人员在伦敦的集会上;James Strachan 发表演 讲时说他已经有了怎么样发明 groovy 的主意。 在这不久前,James Strachan 和他的妻子有个计划,当她去购物的时候,James Strachan 上网时不由自主的转到 Python 网站并且决定开始学习这门语言,在学习过程中,他越来越 喜欢 Python 了,作为一个成熟的 java 开发人员,他承认他的主攻语言缺乏 Python 中有趣的 和有用的特性,如为通用的数据类型的自然支持,更加重要的是动态行为,他的想法是赋予 java 这些有趣的特性。 这些想法指导了 groovy 开发的主要方向:更加丰富的特性和比 java 更友好的语言,为 已经十分成熟的平台带来动态语言的特性。 图 1.1 展示了 James Strachan 怎样独特的定位 groovy 在 java 编程界的位置,我们不想通 过准确的描述来触犯任何人,我们相信任何其他的语言也许在未来会更好,但是我们肯定 groovy 的位置 一些语言也许比 groovy 有更多的特性,一些语言也许主张与 java 进行更好的集成。当 考虑两方面集成在一起的时候目前没有哪个语言比 groovy 做的更好:没有哪个语言提供了 比 groovy 的更好的 java 友好性和完整的现代语言特性。 图 1.1. 看了 groovy 的一些目标,我们来看看具体有那些。 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 6 / 213
1.1.1. groovy 是什么? Groovy 的网站(http://groovy.codehaus.org)给出了 groovy 的最好定义:groovy 是在 java 平台上的、具有象 Python,Ruby 和 Smalltalk 语言特性的灵活动态语言,groovy 保证了这些 特性象 java 语法一样被 java 开发者使用。 Groovy 经常被认为是脚本语言——它也像脚本一样工作的很好。但是,把 Groovy 理解 为脚本语言是一种误解,groovy 代码被编译成 java 字节码,然后能集成到 java 应用程序中 或者 web 应用程序,整个应用程序都可以是 groovy 编写的——groovy 是非常灵活的。 groovy 与 java 平台非常融合,groovy 的许多代码是使用 java 实现的,其余部分是用 groovy 实现的,当你使用 groovy 编程的时候,许多情况下你正在写特殊的 java 程序,在 java 平台上的所有强大功能——包括大量的 java 类库也可以直接在 groovy 中使用。 这样说来 groovy 只是为 java 增加了语法糖吗?不完全对,虽然你在 groovy 中做的每一 件事情通过 java 也可以做,但是用 java 代码实现 groovy 的魔术工作是会让人发狂的,groovy 在后台做了许多工作来完成敏捷性和动态性,就像你读这本书一样,有时设法想想 groovy 使用 java 模仿的效果要做的事情,首先,groovy 的许多特性特别神奇——透明的对方封装 逻辑,建立层次的代码,在一般应用程序语言进行中高效的数据库查询,在每个对象被创建 之后控制每个对象的运行时行为——所有这些任务都不能在 java 中执行,你也许认为 groovy 象一个“彩色的”语言,那么相比较而言 java 就是黑白的——在后面是黑白的点上创建了 彩色特性。 我们来看看 groovy 的魅力,一步一步开始 groovy 和 java 的工作。 1.1.2. 与 java 共事:无缝集成 与 java 的友好性有俩方面:与 java 运行时环境无缝集成和与 java 相似的语法。 无缝集成 图 1.2 显示 groovy 的集成情况:groovy 运行在 java 虚拟机,java 的类库也可以继续使 用,Groovy 仅仅是创建 java 类的一种新的途径——通过在运行时创建,groovy 是使用了额 外 jar 文件为依赖的 java。 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 7 / 213
图 1.2 因此,从 groovy 调用 java 是没有任何问题的。当使用 groovy 开发的时候,你不需要得 到任何通知就可以这样做,每一个 groovy 的类型(groovy type)都是 java.lang.Object 的子 类。每一个 groovy 对象都是一个类的实例。一个 groovy date 对象是 java.util.Date 的实例等 等。 反向集成也是非常容易,假设一个 groovy 类 MyGroovyClass 被编译到一个以“.class” 结尾的文件中,并且把它放在 java 的 classpath 中,那么你能在 java 类中以一个类的形式使 用这个 groovy 类 new MyGroovyClass(); //create from java 换句话说,实例化一个 groovy 类与实例化一个 java 类是一样的,在这之后,一个 groovy 类就是一个 java 类,你能在这个实例上调用类的方法,传参数给方法等等,JVM 根本不知 道运行的代码是通过 groovy 编写的。 相似的语法 Groovy 的第二个友好的方面是语法友好,让我们比较一下 groovy 与 java 获得当日的日 期方面的不同机制,我们将 groovy 和 ruby 的排在一起: import java.util.*; // Java Date today = new Date(); // Java today = new Date() // a Groovy Script 如果满意该文档,请支持(招商银行北京分行双榆树支行 6225881008887381 账户名:吴翊) 8 / 213
分享到:
收藏