开始之前
了解本教程的主要内容,以及如何从中获得最大收获。
关于本教程
如果现在有人要开始完全重写 Java,那么 Groovy 就像是 Java 2.0。Groovy 并没有取代 Java,而是作为 Java 的补充,它提供了更简单、更灵活的语法,可以在运行时动态地进行类型检查。您可以使用 Groovy 随意编写 Java 应用程序,连接 Java 模块,甚至扩展现有的 Java 应用程序 — 甚至可以用 Groovy 对 Java 代码进行单元测试。Groovy 的美妙之处还在于,它能够比编写纯粹的 Java 代码更快地完成所有工作 — 有时候会快许多。
在本教程中,您将了解到 Groovy 是一门动态语言,它能够像 Java 语言本身一样很好地应用于 Java 平台。
学习目标
本教程将逐步向您介绍 Groovy 的基本概念。您将学习 Groovy 集合、Groovy 类,当然还有 Groovy 的语法。完成本教程之后,您将了解将 Java 和 Groovy 结合使用的好处,从此您将能够在日常的 Java 开发中使用 Groovy。
前提条件
为了从本教程得到最大收获,您应该熟悉 Java 语法和在 Java 平台上进行面向对象开发的基本概念。
系统需求
要尝试本教程的代码,需要安装以下环境之一:
- Sun 的 JDK 1.5.0_09(或更新版本)或
 - IBM developer kit for Java technology 1.5.0 SR3
 
另外,本章教程假设您正在使用 Eclipse IDE。不需要安装 Groovy,因为本教程会介绍如何安装 Groovy Eclipse 插件。
本教程推荐系统的配置如下:
- 支持 Sun JDK 1.5.0_09(或更高版本)或 IBM JDK 1.5.0 SR3 的系统,拥有至少 500 MB 主内存
 - 至少 20 MB 可用硬盘空间,用来安装本教程涉及的软件组件和示例
 
本教程的操作说明和示例均基于 Microsoft Windows 操作系统。本教程涉及的所有工具在 Linux 和 Unix 系统上也能工作。
关于 Groovy
这一节将学习 Groovy 的基础知识:它是什么,它与 Java 语言和 JVM 的关系,以及编写 Groovy 代码的一些要点。
什么是 Groovy?
Groovy 是 JVM 的一个替代语言 —替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 Java 6 上使用。
Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。)
许多 Java 开发人员非常喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)
Groovy 快捷方式
开始使用 Groovy 时,您会发现它使日常的编程活动变得快了许多。完成本教程之后,您会了解更多的 Groovy 语法快捷方式。不过现在只需知道以下这些要点:
- Groovy 的松散的 Java 语法允许省略分号和修改符。
 - 除非另行指定,Groovy 的所有内容都为 public。
 - Groovy 允许定义简单脚本,同时无需定义正规的 class 对象。
 - Groovy 在普通的常用 Java 对象上增加了一些独特的方法和快捷方式,使得它们更容易使用。
 - Groovy 语法还允许省略变量类型。
Groovy 的新增特性
虽然 Groovy 允许省略 Java 语法中的一些元素,但也增加了一些新特性,例如本地集合、内置的正则表达式和闭包。在标准的 Java 代码中,如果想要创建一个项列表,首先要导入 java.util.ArrayList,然后程序化地初始化 ArrayList 实例,然后 再向实例中添加项。在 Groovy 中,列表和映射都内置在语法中 — 无需导入任何内容。正则表达式也不需要额外的导入或对象;它们可以通过特殊的 Groovy 语法来创建。 
关于闭包
对于任何 Java 开发人员来说,闭包都是一个令人兴奋的新技巧。这些神奇的构造将会包含在未来的 Java 发行版(很可能是 Java 7)中,成为正式的 Java 语法,但现在已经可以在 Groovy 中使用了。可以将闭包 想像为一个代码块,可以现在定义,以后再执行。可以使用这些强大的构造做许多漂亮的事,不过最著名的是简化迭代。使用 Groovy 之后,就有可能再也不需要编写 Iterator 实例了。
动态的 Groovy
从技术上讲,Groovy 可能是您最近听说过的类型最松散的动态语言之一。从这个角度讲,Groovy 与 Java 语言的区别很大,Java 语言是一种固定类型语言。在 Groovy 中,类型是可选的,所以您不必输入 String myStr = "Hello"; 来声明 String 变量。
除此之外,Groovy 代码还能在运行时轻松地改变自己。这实际上意味着,能够在运行时轻松地为对象指定新方法和属性。这一编程领域称为元编程,Groovy 能够很好地支持这种编程方式。在学习本教程的过程中,您将了解到关于 Groovy 的动态性质的更多内容。现在惟一要补充的是,您会惊讶地发现,在 Groovy 会使操作 XML 或普通的 java.io.File 实例变得非常轻松。
一体两面
用 Groovy 编写的任何内容都可以编译成标准的 Java 类文件并在 Java 代码中重用。类似地,用标准 Java 代码编写的内容也可以在 Groovy 中重用。所以,可以轻易地使用 Groovy 为 Java 代码编写单元测试。而且,如果用 Groovy 编写一个方便的小工具,那么也可以在 Java 程序中使用这个小工具。
Groovy 初探
学习新语言并不是件小事,即使是 Groovy 也不例外。这一节将介绍学习 Groovy 的更多动力。另外还将第一次看到一些 Groovy 代码,并了解 Groovy 与 Java 编程的比较。
为什么要学习 Groovy?
即使 Groovy 与 Java 语言有许多相似之处,它仍然是另一个语言。您可能想知道为什么应该花时间学习它。简单的回答就是:Groovy 是一种更有生产力 的语言。它具有松散的语法和一些特殊功能,能够加快编码速度。
只用一个示例即可说明问题:一旦发现使用 Groovy 在集合中导航的容易程度,您就再也不会用 Java 处理集合导航了。能够用 Groovy 快速编写代码,这还意味着能够更快地收到反馈,更不用说完成任务列表中的工作带来的满足感了。在较高层面上,如果能更快地将代码交付给利益相关者,那么就能在更短的时间内交给他们更多发行版。实际上,Groovy 比 Java 更有助于敏
入门非常容易
如果仍然觉得采用新语言很困难,那么可以看看将 Groovy 集成到开发环境有多么容易。您无需安装新的运行时工具或专门的 IDE。实际上,只需将 Groovy 的一个 jar 文件放在类路径中即可。
而且,Groovy 是一种开源语言,由热心的 Java 开发人员社区管理。因为 Groovy 获得 Apache Software License, Version 2.0,所以可以自由地使用它开发自由软件和私有软件。
Groovy 和 Java 语言对比
买车的时候,如果不试驾一下,是不会买的。所以,在要求您安装 Groovy 之前,我会演示一些代码。首先,回顾一下用 Java 如何创建、编译和运行标准的 Hello World 示例;然后再看看如何使用 Groovy 代码执行同一过程。比较这两个示例,很容易就能看到这两种语言之间的差异。
用 Java 编写的 Hello World
用 Java 编写的典型的 Hello World 示例如下所示:
public class HelloWorld {
  public static void main(String[] args) {  
    System.out.println("Hello World!");
  }
}
编译和运行 Java 示例
在这个简单的 HelloWorld 类中,我省略了包,而且向控制台输出的时候没有使用任何多余的编码约定。下一步是用 javac 编译这个类,如下所示:
c:>javac HelloWorld.java
迄今为止还不错 — 很久以前就会编这么基础的代码了,所以这里只是回顾一下。下面,请看用 Groovy 编码的相同过程。
用 Groovy 编写的 Hello World
就像前面提到过的,Groovy 支持松散的 Java 语法 — 例如,不需要为打印 “Hello World!” 这样的简单操作定义类。
而且,Groovy 使日常的编码活动变得更容易,例如,Groovy 允许输入 println,而无需输入 System.out.println。当您输入 println 时,Groovy 会非常聪明地知道您指的是 System.out。
所以,用 Groovy 编写 Hello World 程序就如下面这样简单:
println "Hello World!"
请注意,在这段代码周围没有类结构,而且也没有方法结构!我还使用 println 代替了 System.out.println。
运行 Groovy 示例 假设我将代码保存在文件 MyFirstExample.groovy 内,只要输入以下代码就能运行这个示例:
c:>groovy MyFirstExample.groovy在控制台上输出 “Hello World!” 所需的工作就这么多。
快捷方式应用 您可能注意到了,我不必编译 .groovy 文件。这是因为 Groovy 属于脚本语言。脚本语言的一个特点就是能够在运行时进行解释。(在 Java 中,要从源代码编译生成字节码,然后才能进行解释。区别在于脚本语言能够直接 解释源代码。)
Groovy 允许完全省略编译步骤,不过仍然可以 进行编译。如果想要编译代码,可以使用 Groovy 编译器 groovyc。用 groovyc 编译 Groovy 代码会产生标准的 Java 字节码,然后可以通过 java 命令运行生成的字节码。这是 Groovy 的一项经常被忽略的关键特性:用 Groovy 编写的所有代码都能够通过标准 Java 运行时编译和运行。
至于运行代码,如果我希望更加简洁,我甚至还能输入
c:>groovy -e "println 'Hello World!'"这会生成相同的结果,而且甚至无需定义任何文件!

 
 
 
 
 
 