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 | package groovyTest |
运行
右击选择 run as > Groovy Script 可以看到控制台打印了Hello World
Groovy与Java
前面说到Groovy与java 很相似,有多相似可以从Hello World中看出,语法没有一点差别。但是Groovy也有它自己的特点。它可以基本兼容java的语法,也有自己的一套语法,写起来会比Java更加简洁方便。可以将上面的Hello World改成如下:
1 | package groovyTest |
输出语句变得更简洁了,运行起来与之前结果一样。
甚至还能更简洁一点:
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 | coll = coll*.toUpperCase() |
使用 *.标记。会对数组中的每一个值都调用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是很容易的事,对工作中也有很大的作用。