Groovy是基于JVM虚拟机的一种动态语言,语法和java差不多。Groovy完全兼容java,又在java基础上增加了很多动态类型和灵活的特性,如支持闭包,支持DSL,是一种灵活的脚本语言
字符串
""和'' 都表示字符串
def str1 = "双引号表示字符串"
def str2 = '单引号也能表示字符串'
集合
1.List
- 创建
def arr = [1,2,3,4,5]
2.访问
def arr = [1,2,3,4,5]
println arr[0] //get第一个
println arr[-1] //get倒数第一个
println arr[-2] //get倒数第二个
3.迭代遍历
def arr = [1,2,3,4,5]
arr.each{
println it
}
2.Map
1.创建
def map = ['name':'czk','age':18]
2.访问 map[key]或者map.key
def map = ['name':'czk','age':18]
map['name']
map.name
3.迭代遍历
//it代表Map.Entry
map.each{
println "key---->${it.key} --- value---->${it.value}"
}
方法
1.方法的括号可以省略
def methodMain(){
methodA(18,180)
methodA 18,180
}
def methodA(int age,int weight){
println age+weight
}
2.retrun可以省略,省略时最后一行代码作为其返回值
def String getYourName(){
return "小明"
}
def String getYourName(int sex){
if(sex == 1){
"小明"
}else {
"小芳"
}
}
task testGroovy{
println getYourName()
println getYourName(0)
}
3.代码块可以作为参数传递
//代码块:{}花括号包裹的代码
def list = [1,2,3,4,5]
list.each({println it})
list.each{
println it
}
类
//和java差不多,但是可以省去getter/setter
class Student {
String name
int age
public Student(String name, int age) {
this.name = name
this.age = age
}
}
task testGroovy{
println getYourName()
println getYourName(0)
Student student = new Student("czk",18)
println "我是${student.name}今年${student.age}岁"
}
闭包
1.闭包-单个参数
闭包是Groovy的一种特性,其实就是一段代码块,单个参数由it表示
task cusotmClosure{
//it
customEach{
println it
}
}
def customEach(closure){
for(int i in 1..10){
closure(i)
}
}
2.闭包-多个参数
多个参数就不能用一个it表示le,有几个参数就得声明几个,a,b,c ->
task cusotmClosure2 {
customEachMap { k, v ->
println "${k} is ${v}"
}
}
def customEachMap(closure){
def map = ["age1":18,"age2":22]
map.each{
closure(it.key,it.value)
}
}