def x =1.23
def result =""
switch (x){
case "foo":
result ="found foo"// lets fall through
case "bar":
result +="bar"
case [4,5,6,'inList']:
result ="list"
break
case 12..30:
result ="range"
break
case Integer:
result ="integer"
break
case Number:
result ="number"
break
case ~/fo*/:// toString() representation of x matches the pattern?
result ="foo regex"
break
case { it <0}://or{ x <0}
result ="negative"
break
default:
result ="default"}
println result //输出: number
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Switch支持以下几种比较:
如果switch的值是类的实例,则类用例值匹配。
如果switch值的toString()表示与正则表达式匹配,则正则表达式大小写值匹配。
如果switch值包含在集合中,则集合用例值匹配。这也包括范围(因为它们是列表)。
如果调用闭包返回一个根据Groovy truth为true的结果,闭包大小写值就匹配。
如果以上任何一个都没有被使用,那么如果case值等于开关值,则case值匹配。
当使用闭包大小写值时,默认的it参数实际上是switch值(在我们的示例中是变量x)。
Groovy还支持如下示例所示的switch表达式:
def partner = switch(person){
case 'Romeo'->'Juliet'
case 'Adam'->'Eve'
case 'Antony'->'Cleopatra'
case 'Bonnie'->'Clyde'}
1.
2.
3.
4.
5.
6.
2.2 循环结构 Looping structures
简单介绍几种常见的,也是必须掌握的循环结构,例如for,while,do while结构写法。
2.2.1 for循环语句
Groovy支持标准的Java 或 C 语言的for循环:
String message =''//创建一个变量
//通过for循环 循环4次进行赋值操作。
for (int i =0; i <4; i++){
message +='zinyan '}
prinlnt message //输出:zinyan zinyan zinyan zinyan
1.
2.
3.
4.
5.
6.
也支持使用逗号分隔表达式的更复杂的Java经典for循环形式。例子:
def facts =[]
def count=5
for (int fact =1, i =1; i <=count; i++, fact *= i){
facts << fact //<< 表示给集合添加对象哦
}
println facts //输出:[1,2,6,24,120]
// iterate over a range
def x =0
for ( i in0..9){
x += i
}
assert x ==45// iterate over a list
x =0
for ( i in[0,1,2,3,4]){
x += i
}
assert x ==10// iterate over an array
def array =(0..4).toArray()
x =0
for ( i in array ){
x += i
}
assert x ==10// iterate over a map
def map =['abc':1,'def':2,'xyz':3]
x =0
for ( e in map ){
x += e.value}
assert x ==6// iterate over valuesin a map
x =0
for ( v in map.values()){
x += v
}
assert x ==6// iterate over the characters in a string
def text="abc"
def list =[]
for (c intext){
list.add(c)}
assert list ==["a","b","c"]
def z
try {
def i =7, j =0
try {
def k = i / j
assert false//never reached due to Exception in previous line
} finally {
z ='reached here'//always executed even if Exception thrown
}} catch ( e ){
assert e in ArithmeticException
assert z =='reached here'}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
3.2 多重catch子句
使用多捕获块(自Groovy 2.0以来),我们能够定义几个要被捕获并由相同捕获块处理的异常:
try {/* ... */} catch ( IOException | NullPointerException e ){/* one block to handle 2 exceptions */}