我们用eclipse来学习Groovy吧,需要装下Groovy插件,去官网找下载链接,Groovy版本一定要与你eclipse的版本对应额。
https://github.com/groovy/groovy-eclipse/wiki
下载完成之后,新建Groovy项目:
简介
package grooy
class FirstGroovy {
static void main(def args){
println "Hello Groovy!"
}
}
看下输出结果:
对比java的输出语句
System.out.println("Hello World!");
会有以下几个不同之处:
- 没有System.out命名空间
- 方法周围没有括号
- 末尾没有分号
再来看个例子了解下Groovy中的$
package grooy
class FirstGroovy {
static void main(def args){
def name="Andy"
def greeting="Hello,$name!"
def namesize="length is ${name.size()}"
println name
println greeting
println namesize
}
}
输出结果:
$表示占位符,占位符表达式可以是变量也可以是方法,包含多个变量或者一个方法的占位符表达式需要有$前缀并且需要被{}包裹,包含一个单独变量的占位符表达式可以只包含$前缀。
println new Date().toString();
打印当前日期:
类、成员变量
我们新建一个Person类
package grooy
class Person {
String name;
public String getName() {
return name;
}
}
package grooy
class FirstGroovy {
static void main(def args){
def person=new Person();
person.setName("张三");
println person.getName();
println person.name;
}
}
看输出结果:
有几个疑问?
- 在Person类中,我们并没有定义setName方法,但是却可以调用
- 我们除了调用person.getName()方法获取name外还可以直接调用person.name
请注意,在Groovy中,无论是类还是成员变量都没有明确的访问修饰符,在Groovy中类和方法的访问修饰符都是公有的,而类成员是私有的。
既然类成员是私有的,为什么可以person.name这样用呢?实际上,你在调用person.name时调用的仍旧是getter方法
方法
在Groovy中,你指不指定方法的返回类型示没有区别的,方法如果要返回值,return也可以省略
package grooy
class Person {
String name;
public String getName() {
return name;
}
def square(def num)
{
return num*num;
}
def add={ num->
num+num
}
}
package grooy
class FirstGroovy {
static void main(def args){
def person=new Person();
println person.square(2);
println person.add(3);
def value=person.square 4;
println value
}
}
输出结果:
Closures
Colosures是匿名代码块,可以接受参数,也可以返回值,它可以被作为变量以参数的形式传递给方法
我们来简单定义一个Closure
package grooy
class FirstGroovy {
static void main(def args){
def instance=new FirstGroovy();
def value=instance.square 6
println value
}
Closure square={
it*it
}
}
输出结果:
如果你没有明确给closure指定一个参数,则Groovy会自动添加一个参数it,你可以在所有的closure中使用它,如果调用的时候没有传递任何参数,则it为空,it可以让你的代码更加简洁,但是前提是closure中只有一个参数。
List、Map
package grooy
class FirstGroovy {
static void main(def args){
def instance=new FirstGroovy();
List list=[1,2,3,4,5]
list.each(){element->
println element
}
}
}
输出:
或者简写:
package grooy
class FirstGroovy {
static void main(def args){
def instance=new FirstGroovy();
List list=[1,2,3,4,5]
list.each(){
println it
}
}
}
package grooy
class FirstGroovy {
static void main(def args){
def instance=new FirstGroovy();
Map maps=[key0:10,key1:20]
println maps.get('key0')
println maps['key0']
println maps.key0
println maps.get('key1')
println maps['key1']
println maps.key1
}
}
输出: