Grooy是什么?
运行在jvm上的动态语言,能够和java代码良好结合,并进行扩展。
Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。)
Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少
Grooy要点?
- 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 与 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 与 Java 语言有许多相似之处,它仍然是另一个语言。您可能想知道为什么应该花时间学习它。简单的回答就是:Groovy 是一种更有生产力 的语言。它具有松散的语法和一些特殊功能,能够加快编码速度。
只用一个示例即可说明问题:一旦发现使用 Groovy 在集合中导航的容易程度,您就再也不会用 Java 处理集合导航了。能够用 Groovy 快速编写代码,这还意味着能够更快地收到反馈,更不用说完成任务列表中的工作带来的满足感了。在较高层面上,如果能更快地将代码交付给利益相关者,那么就能在更短的时间内交给他们更多发行版。实际上,Groovy 比 Java 更有助于敏捷开发。
如果仍然觉得采用新语言很困难,那么可以看看将 Groovy 集成到开发环境有多么容易。您无需安装新的运行时工具或专门的 IDE。实际上,只需将 Groovy 的一个 jar 文件放在类路径中即可。
而且,Groovy 是一种开源语言,由热心的 Java 开发人员社区管理。因为 Groovy 获得 Apache Software License, Version 2.0,所以可以自由地使用它开发自由软件和私有软件。
买车的时候,如果不试驾一下,是不会买的。所以,在要求您安装 Groovy 之前,我会演示一些代码。首先,回顾一下用 Java 如何创建、编译和运行标准的 Hello World 示例;然后再看看如何使用 Groovy 代码执行同一过程。比较这两个示例,很容易就能看到这两种语言之间的差异。
![]() ![]() |
![]()
|
用 Java 编写的典型的 Hello World 示例如下所示:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } |
在这个简单的 HelloWorld
类中,我省略了包,而且向控制台输出的时候没有使用任何多余的编码约定。下一步是用 javac
编译这个类,如下所示:
c:>javac HelloWorld.java |
最后,运行经过编译的类:
c:>java HelloWorld |
迄今为止还不错 — 很久以前就会编这么基础的代码了,所以这里只是回顾一下。下面,请看用 Groovy 编码的相同过程。
![]() ![]() |
![]()
|
就像前面提到过的,Groovy 支持松散的 Java 语法 — 例如,不需要为打印 “Hello World!” 这样的简单操作定义类。
而且,Groovy 使日常的编码活动变得更容易,例如,Groovy 允许输入 println
,而无需输入 System.out.println
。当您输入 println
时,Groovy 会非常聪明地知道您指的是 System.out
。
所以,用 Groovy 编写 Hello World 程序就如下面这样简单:
println "Hello World!" |
请注意,在这段代码周围没有类结构,而且也没有方法结构!我还使用 println
代替了 System.out.println
。
假设我将代码保存在文件 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!'" |
这会生成相同的结果,而且甚至无需定义任何文件!