Groovy 学习:
1. groovy支持动态类型(不指定变量类型),也支持静态类型。
List的定义 [],Map的定义 [:] 。
这两者都支持下标访问。
2. 每一行就是一个语句,可以没有分号; 但最好是用分号分隔。
而同时,groovy一个语句也可以像java一样跨多行。
3. 如何定义函数
在groovy中定义方法同java基本类似,只是return关键字可以不写,返回类型也可以不写(默认是Object)。调用方法时可以不用括号。
4. Groovy支持在字符串中包含表达式,类似shell的表达式。是${}或者$形成的,这个是在调用toString()的时候才会求值的。其实此时的字符串是instanceof groovy.lang.GString。
5. 可以直接运行脚本,不用定义一大堆语法结构,那么麻烦。
Groovy 的运行:
在eclipse的IDE环境中,groovy代码是首先编译成了java的字节码(.class文件),然后再运行java程序。
而如果是直接通过groovy运行groovy代码的话,则运行环境如下所示:
java -Dprogram.name="" -Dgroovy.home="" -Dtools.jar="" -Dgroovy.starter.conf="" -Dscript.name="" -classpath "" org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf "" --classpath "" D:\temp\testgroovy.groovy
例如:
java -Dprogram.name="" -Dgroovy.home="D:\DEV_ENV\groovy-1.6.1" -Dtools.jar="C:\DEV_ENV\Java\jdk1.5.0_11\lib\tools.jar" -Dgroovy.starter.conf="D:\DEV_ENV\groovy-1.6.1\conf\groovy-starter.conf" -Dscript.name="D:\temp\testgroovy.groovy" -classpath "D:\DEV_ENV\groovy-1.6.1\lib\groovy-1.6.1.jar" org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf "D:\DEV_ENV\groovy-1.6.1\conf\groovy-starter.conf" --classpath "C:\DEV_ENV\TimesTen\tt70_32\lib\ttjdbc5.jar;;." D:\temp\testgroovy.groovy
Groovy 的主要特性:
Closure(闭包)的支持
本地的List和Map语法
Groovy标记:支持多种标记语言,如XML、HTML、SAX、W3C DOM
Groovy Path表达式语言:类似Xpath
Groovlet:用简单的Groovy脚本实现Servlet
Groovy SQL:使得和SQL一起工作更简单
Groovy Bean:和Bean一起工作的简单语法 Groovy模版引擎:简单使用,集成了Gpath和编译成字节码
Ant脚本化
正则表达式:简洁的脚本语法使用正则表达式
操作符重载:使Collection和Map的数据类型简单化
多形式的iteration和Autoboxing
直接编译成Java字节码,很干净的和所有已存在的Java对象和类库一起工作
·闭包
闭包类似于java中的内部类,区别在于闭包中只有一个函数定义,参数可以有多个。 闭包用“{}”括起,“->”前面是参数,后面是处理语句,使用call调用。
//闭包调用是使用call
def closure1 = {str1,str2 ->
println str1 +","+ str2;
}
closure1.call("a","b");
//定义闭包
def closure2 = {println it};
//定义方法
def foo(temp){
temp.call("hello");
temp.call([1,2]);
}
//传递闭包给方法
foo(closure2);
//或者直接是
foo( {println it} );
/**
* 传递闭包给方法2
*/
//it是关键字
//将输出List的每一个元素
def testList = [1,2,3,5];
testList.each{println "${it}"};
//->操作符
def testList = [1,2,3,5];
testList.each{item -> print item+";"};
grails的文档手册:
http://www.chinagroovy.org/grails-doc/index.html
http://grails.org/doc/latest/