Groovy基础
概念:是基于JVM虚拟机的一种动态语音
2.1字符串
①单引号:产量字符串
②双引号:具备运算能力"${}",例如:"双引号的变量计算:${name}"
2.2 集合
概念:完全兼容了java的集合。
- List
task prinList <<{
def numList={1,2,3,4,5}
println numList.getClass().name
println numList[1]
println numList[-1]
println numList[1..3]
numList.each{
println it
}
}
实例中:数组下标不仅有正数,还可以是负数,还提供了each的迭代方法。接收一个闭包作为参数,能访问List的每个元素。
2. Map
task printlnMap <<{
def map1={'width':1024,'height':768}
println map1.getClass().name
println map1['width']
println map1.height
map1.each{
println "Key:${it.key},Value:${it.valuel}"
}
}
Map的访问也很灵活,只不过它是一个K.V键值对,所以定义也很简单。采用map[key],或者map.key,都能快速取出。
each的迭代也比较方便
扫描二维码关注公众号,回复:
5125412 查看本文章
3.方法
1.括号是可以省略的
task invokeMethod <<{
method1(1,2)
method1 1,2
}
def method1(int a,int b){
println a+b
}
2.return是可以不写的
def method2(int a,int b){
if(a>b){
a
}else{
b
}
}
默认会把最后一行当做返回值
2.3 代码块是可以作为参数传递的
代码块- 被花括号包围的代码(闭包)
//基本写法
numList.each({println. it})
//当方法最后一个参数是闭包的时候,可以放到方法外面,省略括号,放到花括号里面
numList.each{
println it
}
2.4 javaBean
这里的Bean可以省略get/set方法
task HelloJavaBean <<{
Person p=new Person()
println "名字是:${p.name}"
p.name="陈建仁"
println "名字是:${p.name}"
println "年龄是:${p.age}"
}
class Person{
private String name
public int getAge(){
12
}
}
虽然没定义age成员,但是又定义getAge方法,我们同样可以取到该值,但是,不可以set。因为没有set方法
2.5 闭包
是groovy的一个很重要的特性。是DSL的基础,其实就是一段代码块
1.向闭包传递参数
task helloClosure <<{
//使用自己定义的闭包
customEach{
println it
}
def customEach(closure){
for(int i in 1..10){
closuer(1)
}
}
}
我们定义了一个customEach用于接收闭包,只有一个参数
接下来我们来举个多个参数的例子
task helloClosure <<{
eachMap{k,v ->
println "${k} is ${v}"
}
def eachMap(closure){
def map1=["name":"张三","age":12]
map1.each{
closure(it.key,it.value)
}
}
}
2.闭包的委托
在执行的时候是有优先级的:thisObject>owner>delegate
当我们设置了委托优先后,可以在闭包里面直接对person实例配置
3 DSL
Domain Specific Language.领域特定语言