基本语法
1.Groovy注释标记和Java一样,支持//或者/**/
2.Groovy语句可以不用分号结尾。Groovy为了尽量减少代码的输入 。
3.单引号
单引号中的内容严格对应Java中的String,不对$符号进行转义。
4.双引号
双引号的内容和脚本语言的处理有点像,它会对表达式先求值。
def x = 100
def s1 = "i am $x dolloar"
println( s1 )
5.三引号
三引号中的字符串支持随意换行。
def s1 = ''' x
y
z
f
'''
println(s1)
定义变量
Groovy中支持动态类型,即定义变量的时候可以不指定其类型。Groovy中,变量定义可以使用关键字def,注意,虽然def不是必须的,但是为了代码清晰,建议还是使用def关键字。
def a = 1 //定义一个整形
def b = "字符串" //定义一个字符串
def double c = 1.0 //定义一个 double 类型,也可以指定变量类型
定义函数
无返回类型的函数定义,必须使用def关键字,最后一行代码的执行结果就是本函数的返回值。如果指定了函返回类型,则可不必加def关键字来定义函数。可以不使用return来设置函数返回值,如果不使用return的话,则函数里最后一句代码的执行结果被设置成返回值。
String fun3(){
return "返回值"
}
断言
(1)断言变量为空
def s1 = null
assert s1
(2)断言变量的长度
def s2 = "abc"
assert s2.size()>3
如果断言发生,断言后面的代码无法执行。
循环
for (i = 0; i < 5 ; i++) {
println("测试")
}
for (i in 0..5){
println("hello world")
}
循环time
times表示从0开始循环到4结束
4.times {
println it
}
三目运算符
java语法
def name
def result = name != null ? name : "abc"
println(result)
groovy语法
def name = 'd'
def result = name?: "abc"
捕获异常
//第一种写法,Java 写法
try {
println 5 / 0
} catch (Exception e) {
}
//第二种写法,Groovy 写法
try {
println 5 / 0
} catch (anything) {
}
这里的any并不包括Throwable,如果你真想捕获everything,你必须明确的标明你想捕获的Throwable。
switch
age = 36
def rate
switch (age) {
case 10..26:
rate = 0.05
break
case 27..36:
rate = 0.06
break
case 37..46:
rate = 0.07
break
default:
throw new IllegalArgumentException()
}
println( rate)
判断是否为真
Person person
//Java 写法
if (person!= null){
if (person.Data!=null){
println person.Data.name
}
}
//Groovy
println person?.Data?.name
asType
asType就是数据类型转换
//String 转成 int
def s2 = s1 as int
//String 转成 int
def s3 = s1.asType(Integer)
Groovy数据类型
(1)一个是Java中的左本数据类型。
(2)另外一个是Groovy的容器类。
List:其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。
//变量定义:List变量由[]定义,其元素可以是任何对象
def aList = [5,'string',false]
println(aList)
println aList[0] //获取第1个数据
println aList[1] //获取第2个数据
println aList[2] //获取第3个数据
println aList[3] //获取第4个数据
println( "集合长度:" + aList.size())
//赋值
aList[10] = 100 //给第10个值赋值
aList<<10 //在 aList 里面添加数据
println aList
println "集合长度:" + aList.size()
Map:其底层对应Java中的LinkedHashMap
def map = [key1: "value1", key2: "value2", key3: "value3"]
println map
//[key1:value1, key2:value2, key3:value3]
println("数据长度:" + map.size())
//数据长度:3
println(map.keySet())
//[key1, key2, key3]
println(map.values())
//[value1, value2, value3]
println("key1的值:" + map.key1)
//key1的值:value1
println("key1的值:" + map.get("key1"))
//key1的值:value1
//赋值
map.put("key4", "value4")
Iterator it = map.iterator()
while (it.hasNext()) {
println "遍历map: " + it.next()
}
//遍历map: key1=value1
//遍历map: key2=value2
//遍历map: key3=value3
//遍历map: key4=value4
map.containsKey("key1") //判断map是否包含某个key
map.containsValue("values1") //判断map是否包含某个values
map.clear() //清除map里面的内容
Set set = map.keySet(); //把 map 的key值转换为 set
Range:它其实是List的一种拓展。
def range = 1..5
println(range)
//[1, 2, 3, 4, 5]
range.size() //长度
range.iterator() //迭代器
def s1 = range.get(1) //获取标号为1的元素
range.contains( 5) //是否包含元素5
range.last() //最后一个元素
range.remove(1) //移除标号为1的元素
range.clear() //清空列表
(3)最后一个非常重要的闭包。
闭包,英语叫Closure,是Groovy中非常重要的一个数据类型或者说一种概念。闭包,是一种数据类型,它代表一段可执行的代码。
def xxx = {paramters -> code}
//或者
def xxx = {无参数,纯code}
从c\c++语言的角度看,闭包和函数指针很像,闭包定义好后,要调用它的方法就是:
闭包对象.call(参数)
或者更像函数指针调用的方法:
闭包对象(参数)
aClosure.call("this is string",100)
//或者
aClosure("this is string", 100)
省略圆括号
Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。
def fun(int a1,String b1, Closure closure){
//dosomething
closure() //调用闭包
}
fun (4, "test", {
println"i am in closure"
})
再识Groovy
Groovy会先把xxx.groovy中的内容转换成.class文件,每个.class文件都默认有静态main方法,这样,当我们groovy xxx.groovy的时候,其实就是用java去执行这个main函数。
脚本中的所有代码都会放到run函数中。
@ToString
1.includeNames false 显示的时候是否带上属性的名称,比如name=Groovy In Action
2.excludes 哪些属性不显示。
3.includes 要显示哪些属性。
4.includeSuper false 是否显示父类的ToString效果。
5.includeSuperProperties false 是否显示父类的属性。
6.includeFields false 是否显示类字段(比如private字段,public的会自动转成属性)。
7.ignoreNulls false 是否忽略NULL值。
8.includePackage false 类名是否包含包名。
9.cache false 是否把ToString的值缓存起来。
作用域
public(默认)、private、 protected
*.操作
操作的对象是一个List对象
参考文档:http://www.groovy-lang.org/api.html