Groovy 是 JVM 的一个替代语言,替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 Java 6 上使用。
Groovy 的一个好处是,它的语法与 Java 语言的语法很相似。可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。

认识 Groovy

准备环境

在Eclipse中安装Groovy 的插件。
安装的Url 为:http://dist.codehaus.org/groovy/distributions/update/

Hello World

在学习之前做一个简单的Hello World

  • 在Eclipse 中新建项目。

      new > other >Groovy > Groovy Project 
    

    ​ Eclipse 自动帮我们把Groovy需要的jar包添加上了。

  • 在src 上建一个类

      New > other > Groovy > Groovy Class
    

    ​ 勾选添加 main 方法

  • 在main 中打印hello world, 类如下:

1
2
3
4
5
6
7
8
package groovyTest

class HelloWorld {

static main(args) {
System.out.print("Hello World");
}
}
  • 运行

      右击选择 run as > Groovy Script 可以看到控制台打印了Hello World
    

Groovy与Java

前面说到Groovy与java 很相似,有多相似可以从Hello World中看出,语法没有一点差别。但是Groovy也有它自己的特点。它可以基本兼容java的语法,也有自己的一套语法,写起来会比Java更加简洁方便。可以将上面的Hello World改成如下:

1
2
3
4
5
6
package groovyTest
class HelloWorld {
static main(args) {
println ("Hello World");
}
}

输出语句变得更简洁了,运行起来与之前结果一样。
甚至还能更简洁一点:

println ("Hello World")

只需要一句就可以实现一个Hello World


总结:

  • Groovy 属于脚本语言。脚本语言的一个特点就是能够在运行时进行解释。
  • 并且它支持松散的 Java 语法, 允许省略分号和修改符除非另行指定,Groovy 的所有内容都为 public。
  • Groovy 允许定义简单脚本,同时无需定义正规的 class 对象。
  • Groovy 语法还允许省略变量类型。
  • 并且Groovy也可以在JVM中直接运行,是Java 强有力的补充。

语法简介

定义方式

变量

Groovy 中定义变量不需要类型,Groovy 会根据对象的值来判断它的类型,这点与JavaScript 有点类似。也可以统一用 def 来代替类型。
例:def value = “Hello World”

方法

定义方法时也不需要加 public 。 在Groovy中默认的修饰符就是public 。可以看到上面的Hello World程序上 main 方法前也没有Public

字符串

字符串的使用也比较简单。可以这样定义:def str = “hello”

循环

def var="hello "+
   "world"+
   ",groovy!"
   def repeat(val){
        for(i = 0; i < 5; i++){
         println val
        }
   }
   repeat(var)

上面这段代码是一个简单的循环。其中我们可以把For循环改得更简洁一些:
for(i in 0..4){}
效果与原先相同


Groovy 集合

Groovy支持很多集合, 并且都是标准的Java对象,每个集合都是java.util.Collection 或 java.util.Map 的实例。
如: def coll = [“Groovy”, “Java”, “Ruby”]
这很像java中的数组,但实际上在Groovy中它一个Collection。向这个集合中添加元素有三种方式:

coll.add("Python")
coll << "Smalltalk"
coll[5] = "Perl"
  • *. 标记的使用
1
2
3
4
coll = coll*.toUpperCase()
println coll

//输出:[GROOVY, JAVA, RUBY, PYTHON, SMALLTALK, PERL]

使用 *.标记。会对数组中的每一个值都调用toUpperCase()。方便的实现了对数组中的字符串转成大写


映射

Groovy中的映射写起来很简单,感觉有点像json。如下:

Def  hash = [name:"Andy", "VPN-#":45]

Groovy 会自动处理成一个Map .上面定义中的键值不一定是String ,像上面的name 会自动转成一个String
Groovy 对 Map 的存取操作可以用 put 与 get
但更具Groovy特色的Map 使用方式时直接用 . 号,如:

Hash.name  //直接取得name 的值
Hash.pwd = “123”  //直接向hash 中添加一个键对值

闭包

闭包是用{符号括起来的代码块,它可以被单独运行或调用,也可以被命名。类似‘匿名类’或内联函数的概念。
闭包中最常见的应用是对集合进行迭代,下面定义了3个闭包对map进行了迭代:

   map.each({key,value->    //key,value两个参数用于接受每个元素的键/值
   println "$key:$value"})
   map.each{println it}     //it是一个关键字,代表map集合的每个元素
   map.each({ println it.getKey()+"-->"+it.getValue()})

除了用于迭代之外,闭包也可以单独定义:

def say={word->
       println "Hi,$word!"
   }

调用:

say('groovy')
   say.call('groovy&grails')

输出:

Hi,groovy!
Hi,groovy&grails!

##类定义

Groovy中的类与java中的类一样。但因为Groovy 的特色我们可以少写很多代码。

  • 不需要public 修饰符

    前面说到Groovy中默认的就是public

  • 不需要变量类型说明

    前面也说到了

  • 不需要getter() 与setter()方法

    Groovy默认生成了标准的getter ,setter方法

  • 不需要构造函数

    不在需要程序员声明任何构造函数,因为groovy自动提供了足够你使用的构造函数

  • 不需要return

    在 Groovy 中可以省略 return 语句。Groovy 默认返回方法的最后一行。

  • 不需要括号 ()

    Groovy中方法调用可以省略()号(构造函数除外)


感觉Groovy 和java差不多,比java写起来轻松一些,对于java开发来说,顺手学一门Groovy是很容易的事,对工作中也有很大的作用。