8、Groovy

我們用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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容