我們用eclipse來學(xué)習(xí)Groovy吧,需要裝下Groovy插件,去官網(wǎng)找下載鏈接,Groovy版本一定要與你eclipse的版本對應(yīng)額。
https://github.com/groovy/groovy-eclipse/wiki
下載完成之后,新建Groovy項(xiàng)目:

image.png
簡介
package grooy
class FirstGroovy {
static void main(def args){
println "Hello Groovy!"
}
}

image.png
看下輸出結(jié)果:

image.png
對比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
}
}
輸出結(jié)果:

image.png
$表示占位符,占位符表達(dá)式可以是變量也可以是方法,包含多個變量或者一個方法的占位符表達(dá)式需要有$前綴并且需要被{}包裹,包含一個單獨(dú)變量的占位符表達(dá)式可以只包含$前綴。
println new Date().toString();
打印當(dāng)前日期:

image.png
類、成員變量
我們新建一個Person類

image.png
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;
}
}
看輸出結(jié)果:

image.png
有幾個疑問?
- 在Person類中,我們并沒有定義setName方法,但是卻可以調(diào)用
- 我們除了調(diào)用person.getName()方法獲取name外還可以直接調(diào)用person.name
請注意,在Groovy中,無論是類還是成員變量都沒有明確的訪問修飾符,在Groovy中類和方法的訪問修飾符都是公有的,而類成員是私有的。
既然類成員是私有的,為什么可以person.name這樣用呢?實(shí)際上,你在調(diào)用person.name時調(diào)用的仍舊是getter方法
方法
在Groovy中,你指不指定方法的返回類型示沒有區(qū)別的,方法如果要返回值,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
}
}
輸出結(jié)果:

image.png
Closures
Colosures是匿名代碼塊,可以接受參數(shù),也可以返回值,它可以被作為變量以參數(shù)的形式傳遞給方法
我們來簡單定義一個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
}
}
輸出結(jié)果:

image.png
如果你沒有明確給closure指定一個參數(shù),則Groovy會自動添加一個參數(shù)it,你可以在所有的closure中使用它,如果調(diào)用的時候沒有傳遞任何參數(shù),則it為空,it可以讓你的代碼更加簡潔,但是前提是closure中只有一個參數(shù)。
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
}
}
}
輸出:

image.png
或者簡寫:
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
}
}
輸出:

image.png