基本语法
1.Grovvy的注释分为//和/**/和java的一样.
2.Grovvy语法可以不已分号结尾.
3.单引号,里面的内容严格的对应java中的String,不对$符号进行转义.
def s1 = 'i am a student $' println s1
i am a student $
4.双引号“ ”的内容中如果有$号的话,会先对表达式先求值.
def age = 100 def s2 = "他已经 $age 岁了" println(s2)
他已经 100 岁了
5.三个引号中的字符串支持随意的换行.
def s3 = ''' x y z ''' println(s3)
x y z
定义变量
Grovvy中支持动态类型,定义变量的时候可以不指定类型,Grovvy中可以使用关键字def.
def a = 1 def b = "我是谁" def double = 1.0
定义函数
def fun(){ } fun()
def fun1(def1,def2){ println def1+" &&"+def2 } fun1(1,2)
String fun2(){ return "返回值" } println fun2()
def getSomething(){ "我是谁" 1000 } println getSomething()
注意:
1.无返回类型的函数定义,必须使用def关键字 ,最后一行代码的执行结果就是本函数的返回值
2.如果指定了函数返回类型,则可不必加def关键字来定义函数
断言assert
断言变量为空
def t1 = null assert t1
断言变量的长度
def t2 = "ab3" assert t2.size() >3
注意:
1.如果断言发生,断言后面的代码无法执行
循环For
方式一
for (i=0;i<5;i++){ println i }
方式二
for(i in 0..5){ println i }
其它
for(i in 0..<5){ println ("hello world") }
循环time
times表示从0开始循环到4结束
4.times { println it }
三目运算符
def name = 'd' def result = name=='d'?'cc':"abc" println result
捕获异常
try { 5/0 }catch(Exception e){ e.printstacktrace() }
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 println person?.Data?.name
asType
asType就是数据类型转换
def g1 = '1' def f1= g1 as int def f2 = g1.asType(Integer) println f2
Groovy数据类型
Groovy中的数据类型主要分2种
Java 基本类型
def boolean b1 = true println b1 def int b2 = 100 def String b3 = "hello world" if(b1){ println "hello world" }
Groovy 容器
List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。 Map:键-值表,其底层对应Java中的LinkedHashMap。 Range:范围,它其实是List的一种拓展。
List
def aList = [5,'string',false] println aList println aList[0] println "集合的长度:"+aList.size() aList[10] = 'sss' println aList
[5, string, false] 5 集合长度:3 [5, string, false, null, null, null, null, null, null, null, 'sss'] 集合长度:11
map
def map = [key1:"value1",key2:"value2",key3:"value3"] println map println "map的长度:"+map.size() println map.keySet() println map.values() println map.key1 println map.get("key1") map.put("key4","value4") println map.entrySet() Iterator it = map.iterator() while(it.hasNext()){ println "遍历map:"+it.next() } map.containsKey("key1") map.containsValue("values1") map.clear() Set set = map.keySet()
range
Range 是 Groovy 对 List 的一种拓展.
def range = 1..5 println range println "长度:"+range.size() println "迭代器:"+range.iterator() println "获取标号为1的元素:" +range.get(1) println "是否包含元素5:"+range.contains(5) println "最后一个元素:"+range.last() //println "移除标号为1的元素:"+range.remove(1) //清空列表 //range.clear() println "第一个数据:"+range.from println "最后一个数据:"+range.to
闭包
模板
def xxx = {paramters -> code} //或者 def xxx = {无参数,纯code}
def fun1 = { p1 -> def s = "我是一个闭包,"+ p1 } println(fun1.call()) println(fun1.call("我是一个参数")) println fun1("我是参数2")
闭包没定义参数的话,则隐含有一个参数,这个参数名字叫it,和this的作用类似。it代表闭包的参数。
def fun2 = { it -> "abcd" } println fun2.call()
如果在闭包定义时,采用下面这种写法,则表示闭包没有参数!
def fun3 = { -> "cccc" } println fun3.call()
省略圆括号
def list = [1,2,3] list.each { println it }
1 2 3
each函数调用的圆括号不见了!原来,Groovy中,当函数的最后一个参数是闭包的话,可以省略圆括号。比如:
def fun5(int a1,String b1,Closure closure){ closure() } fun5(5,"test",{ println "i am in closure" })
以后这样代码会比较多:
task hello{ doLast{ println("hello world") } }
案列1:
//字符串与闭包的结合使用 String str2 = 'the 2 and 4 is 6' //each str2.each { String temp ->println temp }
//find来查找符合条件的第一个 println str2.find{ String s -> s.isNumber() }
//findAll def sList = str2.findAll{ String s1 -> s1.isNumber() } println sList //any def result = str2.any{ String s -> s.isNumber() } println result //collect def list2 = str2.collect { it.toupperCase() } println list2.toListString()
Java属性
public class Person{ def String name; def int age; String getName() { return name } void setName(String name) { this.name = name } int getAge() { return age } void setAge(int age) { this.age = age } @Override String toString() { return "Person{"+ "name='"+name+'\''+ ",age=" + age+ '}'; } }
Person person = new Person() person.setName("Test") person.setAge(20) println(person.toString())