关于Groovy
Groovy是什么?简单的说,Groovy是下一代的Java语言,和Java一样,运行在JVM中。Groovy、Java与JVM的关系就像C#、VB.NET与CLR的关系一样。
开发环境
本人开发环境:
JDK1.6 + Eclipse3.6 + Groovy-Eclipse 2.1.1
Groovy语法简介
1、没有类型的Java
作为动态语言,Groovy中的所有变量都是对象,在声明变量时,Groovy不要求强制类型声明(当然,强制类型声明也没有语法错误),仅仅要求使用关键字def(有些情况下,甚至连def都不需要)。
l Groovy变量在运行时确定,类型为变量所指对象的类型。
def var = "HelloWorld"
println "${var},${var.class}"
var = true
println "${var},${var.class}"
上面代码中变量替换${var}会被var 内容所替代
2、不需要的public
可以把main方法前的public去掉,实际上,Groovy里的方法默认是public的
甚至可以把main方法去掉,整个groovy文件中只留下package语句
3、不需要的语句结束符
Groovy语句没有结束符。当然,为了与Java保持一致,在每个语句后加上分号结束符也是正确的。
4、字符串的连接
l 方法一:类似Java的方法:
def var = "Hello"+
"World,"+
"Groovy"
println var
l 方法二:更groovy的写法:
def var = """Hello
World,
Groovy"""
println var
上面代码实质上是允许字符串跨行(空白字符会保留)
5、for循环
l 方式一:类似Java的写法:
for(int i = 0; i<5; i++){
println i
}
l 方式二:Groovy的写法:
for(i = 0; i<5; i++){
println i
}
l 方式三:Groovy的写法(使用“范围”)
for(i in 0..<5){
println i
}
6、String和GString
1. Groovy支持标准的java.lang.String(用单引号括住)和GString(用双引号括住)。
2. GString支持变量替代,如"this ${var}"
3. String/GString支持下标索引访问,和简化的取紫川操作,代码如下:
def str = "Hello World!"
println str[0]
println str[0..5] //输出Hello
7、范围
范围的概念和Pascal的“子界”一样,是一系列的值,例如:
“0..4”表示包含整数0、1、2、3、4
“0..<4”表示包含整数0、1、2、3
“a..e”表示包含字母a、b、c、d、e
8、方法
l Groovy的方法支持默认参数值,在不引起歧义的情况下,方法的调用可以省略圆括号:
def repeat(var,time=5){
for(i in 0..<time){
println var
}
}
repeat 'Hello World!'
上面的repeat重复打印var参数,默认重复次数是5
l 可变参数:
def sum(int...vars){
def total = 0
for(i in vars){
total += i
}
return total
}
println sum(1,2,3)
9、集合
Groovy支持最常见的两个Java结合:java.util.Collectiono和java.util.Map。
上面提到的“范围”实际上也是结合的一种(java.util.List)
l Collection:
(1)集合的定义:
def col = [1,2,3]
<!--EndFragment--><!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
(2)集合操作(添加、删除、连接)
col.add 4 //添加一个元素
col << 5.1 //添加一个元素
col[col.size()]='6' //添加一个元素
col += 7 //添加一个元素
col -= '6' //减去一个元素'6'
col += ['8','9'] //添加一个集合
col -=col[6..7] //减去一个集合
println col.join('-')//输出用'-'连接的所有集合元素
(3)集合的索引
数组下标方式:
println col[0] //输出第0个元素
负索引(索引倒数第几个元素):
println col[-1] //输出倒数第1个元素
几点说明:
1.使用 [value, ...] 来初始化
2.使用 [] 来声明一个空Collection
l Map:
Map是“键-值”对的集合,在Groovy中,键可以是任意类型的对象(实际上Groovy中的Map就是java.util.LinkedHashMap)
(1)map的定义:
def map = ['name':'ZhangSan','sex':'M','age':15]
(2)Map添加项
map.put 'height', 180
map += ['weight':70]
map.father = 'LiSi'
(3)Map索引
println map['father']
println map.name
println map.age
几点说明:
1. 使用 [name:value, ...] 的方式来初始化
2. 使用 [ ; ] 的方式来声明一个空Map
l Range:
Range是Groovy中的一个集合类,继承自java.util.List,所以可以像使用List一样使用。
下面是Range的使用示例:
def range = 3..10
assert range.size() == 8
assert range.get (1) == 4
assert range instanceof java.util.List
assert range.contains (8)
几个说明:
1. Range元素的类型可以是int、char
2. 通过“范围”来初始化
3. 可以像其他集合一样使用
<!--EndFragment--><!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment-->
<!--EndFragment--> ---------------------------华丽的分割线-----------------------------
未完待续
<!--EndFragment-->