1.Person.groovy
package com.caicongyang.test
/**
* Created by caicongyang1 on 16/12/22.
*/
class Person {
def name
def age
String toString() {//注意方法的类型String,因为我们要覆盖的方法为String类型
"$name,$age"
}
}
2.Test.groovy
package com.caicongyang.test
/**
* Created by caicongyang1 on 16/12/22.
*/
class Test {
/**
* @param args
*/
public static void main(def args) {
println "Hello World"
println '=================================='
def person=new Person(['name':'Tom','age':22]) //引用Person对象 //[]号可以省略
println person
println '=================================='
def var = "hello " + "world" + ",groovy!"; //字符串相加
println var;
println var.class;
var = 1001;
println var.class;
println '=================================='
def map=['name':'john','age':14,'sex':'boy']; //map
println map.size; //通过key作为成员名索引
println map['name'] ; //通过key作为下标索引
println '=================================='
def msg = "Hello!"
println msg.metaClass;
String.metaClass.up = { delegate.toUpperCase() };
println msg.up();
//msg.metaClass.methods.each { println it.name }; //打印出所有的方法
//msg.metaClass.properties.each { println it.name }; //所有的属性
println '=================================='
def aList = [5,'string',true] //List由[]定义,其元素可以是任何对象
assert aList[1] == 'string'
assert aList[5] == null //第6个元素为空
aList[100] = 100 //设置第101个元素的值为10
assert aList[100] == 100
println aList.size
println '=================================='
def doubleQuoteWithoutDollar = "I am one dollar" //输出 I am one dollar
def x = 1
def doubleQuoteWithDollar = "I am $x dolloar" //输出I am 1 dolloar
println doubleQuoteWithDollar
println '=================================='
def aRange = 1..5 //包含5
def aRangeWithoutEnd = 1..<5 //包含1,2,3,4这4个元素,不包含5
println aRange.from
println aRange.to
println aRangeWithoutEnd.to
println '=================================='
def aClosure = {//闭包是一段代码,所以需要用花括号括起来..
-> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码,如果没有前面直接空着
println"this is a code Closure" //这是代码,最后一句是返回值,
}
aClosure.call();
def bClosure = {//闭包是一段代码,所以需要用花括号括起来..
language -> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码
println 'this is a $language code Closure' //单引号直接输出$
println "this is a $language code Closure" //双引号$为参数替换
}
bClosure.call('groovy');
println '=================================='
testClosure (4, "test", {
println "i am in closure"
} )
println '=================================='
def iamList = [1,2,3,4,5] //定义一个List
iamList.each{ //调用它的each,这段代码的格式看不懂了吧?each是个函数,圆括号去哪了?
println it
}
}
def static testClosure(int x1,String y1, Closure clo){
//do something
clo() //调用闭包
}
public List<Integer> each(List<Integer> self, Closure closure){
closure();
}
}
学习资源:
http://www.jianshu.com/p/94aabdfcdfc5
http://blog.csdn.net/yanbober/article/details/49047515