Groovy语法

基本语法

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

 

最后欢迎大家访问我的个人网站:1024s​​​​​​​

展开阅读全文

没有更多推荐了,返回首页