一、 groovy是什么
简单地说, Groovy 是下一代的 java语言,跟 java一样 ,它也运行在 JVM 中。
作为跑在 JVM中的另一种语言, groovy语法与 Java 语言的语法很相似。同时, Groovy 抛弃了 java烦琐的文法。同样的语句,使用 groovy能在最大限度上减少你的击键次数——这确实是“懒惰程序员们”的福音。
二、开发环境
1、 jdk 1.5以上
2、 eclipse+groovy plugin(支持 Groovy 1.5.7)
三、创建 groovy项目
1、 新建一个 groovy项目
New --> Project à Java Project 创建一个 java项目。为了方便管理,建议在 source中建两个 source文件夹 java和 groovy,分别用于存储 java源文件和 groovy源文件:
2、 添加 Groovy 特性
在项目上右击, Groovy à Add Groovy Nature,这样会在项目中添加 Groovy Libraries。
3、 添加 Groovy 类
在项目 groovy源文件下右键, New à Other à Groovy à Groovy Class
自动生成的源代码如下:
publicclassHelloWorld{
/**
* @param args
*/
publicstaticvoidmain( defargs){
// TODO Auto-generated method stub
}
}
我们在 main方法中加一句打印语句:
println "Hello World"
4、 编译运行 groovy类
在源文件上右键, Compile Groovy File,然后右键, Run As à Groovy ,在控制台中查看运行结果。
实际上 groovy 语法的简练还体现在,就算整个文件中只有 println "Hello World"这一句代码(把除这一句以外的语句删除掉吧),程序也照样能够运行。
当然,为了说明 groovy 其实就是 java,你也可以完全按照 java 语法来编写 HelloWorld类。
四、 Groovy语法简介
1、 没有类型的 java
作为动态语言, groovy中所有的变量都是对象 (类似于 .net framework,所有对象继承自 java.lang.Object),在声明一个变量时, groovy不要求强制类型声明,仅仅要求变量名前使用关键字 def(从 groovy jsr 1开始,在以前的版本中,甚至连 def都不需要)。
修改 main 方法中的代码:
defvar= "hello world"
printlnvar
printlnvar.class
你可以看到程序最后输出了 var的实际类型为: java.lang.String
作为例外,方法参数和循环变量的声明不需要 def。
2、 不需要的 public
你可以把 main方法前面的 public去掉 , 实际上 , groovy中默认的修饰符就是 public, 所以 public修饰符你根本就不需要写,这点跟 java不一样。
3、 不需要的语句结束符
Groovy中没有语句结束符,当然为了与 java保持一致性,你也可以使用 ;号作为语句结束符。在前面的每一句代码后面加上;号结束,程序同样正常运行 (为了接受 java程序员的顽固习惯 )。
4、 字符串连接符
跟 java一样,如果你需要把一个字符串写在多行里,可以使用 +号连接字符串。代码可以这样写:
defvar= "hello " +
"world" +
",groovy!"
当然更 groovy的写法是:
defvar= """hello
world
groovy! """
三个 ”号之间不在需要 +号进行连接(不过字符串中的格式符都会被保留,包括回车和 tab)。
5、 一切皆对象
听起来象是“众生平等”的味道,事实上 groovy对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。如果你赋给它 boolean ,那么不管它原来是什么类型,它接受 boolean值之后就会自动把类型转变为 boolean值。看下面的代码:
defvar= "hello " +
"world" +
",groovy!"
printlnvar;
printlnvar. class;
var= 1001
printlnvar. class
输出结果 :
hello world,groovy!
class java.lang.String
class java.lang.Integer
var这个变量在程序运行中 , 类型在改变。一开始给它赋值 String,它的类型就是 String,后面给它赋值 Integer,它又转变为 Integer。
6、 循环
删除整个源文件内容,用以下代码替代:
defvar= "hello " +
"world" +
",groovy!"
defrepeat(val){
for(i = 0 ; i < 5 ; i++){
printlnval
}
}
repeat(var)
输出:
hello world,groovy!
hello world,groovy!
hello world,groovy!
hello world,groovy!
hello world,groovy!
注意循环变量 i前面没有 def。当然也没有 java中常见的 int,但如果你非要加上 int也不会有错,因为从 Groovy1.1beta2之后开始(不包括 1.1beta2), groovy开始支持 java经典的 for循环写法。
此外,上面的 for语句还可以写成:
for(i in0 .. 5 )
这样的结果是一样的。
7、 String 和 Gstring
除了标准的 java.lang.String以外(用 ’号括住), groovy还支持 Gstring字符串类型(用 “号括住)。把上面的 for循环中的语句改成:
println"This is ${i}:${val}"
运行一下,你就会明白什么是 Gstring
8、 范围
这个跟 pascal中的“子界”是一样的。在前面的 for循环介绍中我们已经使用过的 for(i in0 .. 5 ) 这样的用法,其中的 0 ..5 就是一个范围。
范围 是一系列的值。例如 “ 0..4” 表明包含 整数 0、 1、 2、 3、 4。 Groovy 还支持排除范围,“ 0..<4” 表示 0、 1、 2、3。还可以创建字符范围:“ a..e” 相当于 a、 b、 c、 d、 e。“ a..<e” 包括小于 e 的所有值。
范围主要在 for循环中使用。
9、 默认参数值
可以为方法指定默认参数值。我们修改 repeat方法的定义:
defrepeat(val,repeat= 3 ){
for(i in0 ..<repeat){
println"This is ${i}:${val}"
}
}
可以看到, repeat方法增加了一个参数 repeat(并且给了一个默认值 3),用于指定循环次数。
当我们不指定第 2个参数调用 repeat方法时, repeat参数取默认值 3。
10、 集合
Groovy支持最常见的两个 java集合: java.util.Collection和 java.util.Map。前面所说的范围实际也是集合的一种(java.util.List)。
(1) Collection
Groovy 中这样来定义一个 Collection:
defcollect=[ "a" , "b" , "c" ]
除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:
collect.add( 1 );
collect<< "come on" ;
collect[ collect. size()]= 100 . 0
Collection使用类似数组下标的方式进行检索:
printlncollect[