? 在Groovy
中,没有基本数据类型,只有对象类型,表面上我们定义基本的数据类型,但是实际上会进行装箱处理,通过下面的例子查看。
package com.dream21th
int a = 20
println(a.class) // class java.lang.Integer
float b = 4.5
println(b.class) // class java.lang.Float
double c =8.8
println(c.class) // class java.lang.Double
boolean d =false
println(d.class) //class java.lang.Boolean
? 通过上面代码的运行结果,可以看出我们在定义的基本的数据类型的时候会被转换为对象类型,这种转换对写代码没有影响。
? 强类型定义指的是在定义参数的时候,在前面加上数据的具体类型。比如参数a
,它的类型是int
,那么定义如下:
//参数前面加上了int这个具体的数据类型,这种就是强类型定义
int a = 20
println(a.class) // class java.lang.Integer
? 参数除了强类型定义的方式外,还可以采用弱类型的定义的方式,也就是不指定参数的具体的数据类型,而是采用def
作为参数类型,编译器会根据参数的值自动推导参数类型。
def e = 19
println(e.class) //class java.lang.Integer
def f = 19.8
println(f.class) //class java.math.BigDecimal
def g = "19"
println(g.class) //class java.lang.String
? 通过上述代码的运行可以看出,采用def
定义数据类型,编译器会根据数据的具体值推到出数据的真实类型。
? 字符串的常用定义方式有:单引号,双引号,三引号。
//单引号定义
def str = 'hello world \n hello groovy'
println(str)
println(str.class)
//双引号定义
def str1 = "hello world \n hello groovy"
println(str1)
println(str1.class)
//三引号定义
def str2 = '''hello world \n hello groovy'''
println(str2)
println(str2.class)
//三引号定义可以跨行定义
def str3= '''hello world
hello groovy'''
println(str3)
println(str3.class)
//双引号可以通过${参数}复制,也可以进行计算
def name = "zhang san"
def str4 = "hello ${name},10+10=${10+10}"
println(str4)
? java.lang.String
中可以直接使用的方法。
def str1 = "hello groovy"
println("str的长度:"+str1.length()) //str的长度:12
println("str是否为空:"+str1.isEmpty()) //str是否为空:false
println("str的下标为4的元素:"+str1.charAt(4))//str的下标为4的元素:o
def str2 = "hello groovy"
println("str1和str2是否相等:"+str1.equals(str2)) //str1和str2是否相等:true
println("str2从下标为2的位置开始截取:"+str2.substring(2)) //str2从下标为2的位置开始截取:llo groovy
println("str2从下标为2截取到4的位置:"+str2.substring(2,4))//str2从下标为2截取到4的位置:ll
println("str2将l替换为L:"+str2.replace("l","L"))//str2将l替换为L:heLLo groovy
println("str2转换为大写:"+str2.toUpperCase())//str2转换为大写:HELLO GROOVY
println("str2通过o分割:"+str2.split("o"))//str2通过o分割:[hell, gr, , vy]
def str3 = "heLLo groovy"
println("str3转换为小写:"+str3.toLowerCase())//str3转换为小写:hello groovy
def str4 = " heLLo groovy "
println("去掉str4首尾空格:"+str4.trim())//去掉str4首尾空格:heLLo groovy
? org.codehaus.groovy.runtime.StringGroovyMethods
中可以使用的一些方法。
//org.codehaus.groovy.runtime.StringGroovyMethods
def str1 = "hello groovy"
println("str1为中心两边填充空格保证长度为20:"+str1.center(20))//str1为中心两边填充空格保证长度为20: hello groovy
println("str1为中心两边填充*保证长度为20:"+str1.center(20,"*"))//str1为中心两边填充*保证长度为20:****hello groovy****
println("str1左边填充*保证长度为20:"+str1.padLeft(20,"*"))//str1左边填充*保证长度为20:********hello groovy
def str2="groovy"
println("str1减去str2,去掉重复:"+str1.minus(str2)) //str1减去str2,去掉重复:hello
println("str2减去str1,str2不包含str1,所以该操作还是str2的值:"+str2.minus(str1))//str2减去str1,去掉重复:groovy
def str3 = "hello groovy"
println("str3首字母大写:"+str3.capitalize()) // str3首字母大写:Hello groovy
println("str3反转:"+str3.reverse()) // str3反转:yvoorg olleh
def str4="4.5"
println("str4转换为double:"+str4.toDouble().class) //str4转换为double:class java.lang.Double
? Groovy
新增的操作符
def str5= "c"
def str6= "b"
println("str5是否大于str6:"+(str5>str6)) //str5是否大于str6:true
def str7 = "hello groovy"
println("str7下标为1的值:"+str7[1])//str7下标为1的值:e
println("str7下标2到3的值:"+str7[2..3])//str7下标2到3的值:ll
def str8="hello groovy"
def str9="groovy"
println("str8-str9:"+(str8-str9))//str8-str9:hello
println("str9-str8:"+(str9-str8))//str9-str8:groovy
println("str8+str9:"+(str8+str9))//str8+str9:hello groovygroovy
? 在Groovy
中使用if-else
和在java
中使用方式是一样的。
def flag=true
if (flag){
println("满足条件")
}else {
println("不满足条件")
}
def score=99
if(score<60){
println("不及格")
}else if(score>=60 && score<80){
println("良好")
}else {
println("优秀")
}
? 在Groovy
中使用while
和在java
中使用方式是一样的。
def num=10;
while (num>0){
println("数字现在是:"+num)
num--;
}
? 在Groovy
中使用for
有下面几种使用方式。
//普通的便利方式
for(def i=0;i<=10;i++){
println(i)
}
//输出10到30两边包含
for(i in 10..30){
println(i)
}
//遍历列表
for(i in [1,2,3,4,5]){
println(i)
}
def map1=[
"a":"A",
"b":"B",
"c":"C"
]
//便利map类型
for(i in map1){
println(i.key+" "+i.value)
}
? switch
的使用方式非常灵活,下面是一个例子,可以满足值,范围,列表和类型的匹配。如果不想触发多条规则,在相应代码后面增加break
。
def c=10
switch (c){
case "abc":
println("满足第一个条件")
case [8,9,10,11]://在列表中
println("满足第二个条件")
case 8..20://范围中
println("满足第三个条件")
case Integer://整形
println("满足第四个条件")
case BigDecimal://浮点型
println("满足第五个条件")
default://默认
println("满足第六个条件")
}
控制台输出:
满足第二个条件
满足第三个条件
满足第四个条件
满足第五个条件
满足第六个条件