天天看點

Groovy基礎學習一、什麼是Groovy及特點二、文法三、執行個體詳解未完待續。。。

一、什麼是Groovy及特點

        Groovy 是 用于Java虛拟機的一種靈活的動态語言,它是一種成熟的面向對象程式設計語言,既可以用于面向對象程式設計,又可以用作純粹的腳本語言。使用該種語言不必編寫過多的代碼,同時又具有閉包和動态語言中的其他特性。

       Groovy是JVM的一個替代語言(替代是指可以用 Groovy 在Java平台上進行 Java 程式設計),使用方式基本與使用 Java代碼的方式相同,該語言特别适合與Spring的動态語言支援一起使用,設計時充分考慮了Java內建,這使 Groovy 與 Java 代碼的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的結合程式設計。

基本特點

1、 建構在強大的Java語言之上 并 添加了從Python,Ruby和Smalltalk等語言中學到的 諸多特征,例如動态類型轉換、閉包和元程式設計(metaprogramming)支援。。

2、為Java開發者提供了 現代最流行的程式設計語言特性,而且學習成本很低(幾乎為零)。

3、 支援DSL(Domain Specific Languages領域定義語言)和其它簡潔的文法,讓代碼變得易于閱讀和維護。

4、受檢查類型異常(Checked Exception)也可以不用捕獲。

5、 Groovy擁有處理原生類型,面向對象以及一個Ant DSL,使得建立Shell Scripts變得非常簡單。

6、在開發Web,GUI,資料庫或控制台程式時 通過 減少架構性代碼 大大提高了開發者的效率。

7、支援單元測試和模拟(對象),可以 簡化測試。

8、無縫內建 所有已經存在的 Java對象和類庫。

9、直接編譯成Java位元組碼,這樣可以在任何使用Java的地方 使用Groovy。[2]

10、支援函數式程式設計,不需要main函數。

11、一些新的運算符。

12、預設導入常用的包。

13、斷言不支援jvm的-ea參數進行開關。

14、支援對對象進行布爾求值。

15、類不支援default作用域,且預設作用域為public。

16、groovy中基本類型也是對象,可以直接調用對象的方法。

二、文法

Groovy 文法與Java 語言的文法很相似,雖然 Groovy 的文法源于Smalltalk和Ruby這類語言的理念,但是可以将它想像成 Java 語言的一種更加簡單、表達能力更強的變體。(在這點上,Ruby與 Groovy 不同,因為它的文法與 Java 文法差異很大。)

許多 Java 開發人員喜歡 Groovy 代碼和 Java 代碼的相似性。從學習的角度看,如果知道如何編寫 Java 代碼,那就已經了解 Groovy 了。Groovy 和 Java 語言的主要差別是:完成同樣的任務所需的 Groovy 代碼比 Java 代碼更少。

Groovy類和java類一樣,完全可以用标準java bean的文法定義一個Groovy類。但作為另一種語言,可以使用更Groovy的方式定義類,這樣的好處是,可以少寫一半以上的javabean代碼。

(1)不需public修飾符

      如前面所言,Groovy的預設通路修飾符就是public,如果Groovy類成員需要public修飾,則根本不用寫它。

(2)不需要類型說明

     同樣前面也說過,Groovy也不關心變量和方法參數的具體類型。

(3)不需要getter/setter方法

     在很多ide(如eclipse)早就可以為程式員自動産生getter/setter方法了,在Groovy中,不需要getter/setter方法--所有類成員(如果是預設的public)根本不用通過getter/setter方法引用它們(當然,如果一定要通過getter/setter方法通路成員屬性,Groovy也提供了它們)。

(4)不需要構造函數

     不再需要程式員聲明任何構造函數,因為實際上隻需要兩個構造函數(1個不帶參數的預設構造函數,1個隻帶一個map參數的構造函數--由于是map類型,通過這個參數可以構造對象時任意初始化它的成員變量)。

(5)不需要return

Groovy中,方法不需要return來傳回值。

(6)不需要()

Groovy中方法調用可以省略()(構造函數除外)。

三、執行個體詳解

groovy線上編譯位址: http://groovy.jsrun.net/

1.沒有類型的java

作為動态語言,groovy中所有的變量都是對象(類似于.net framework,所有對象繼承自java.lang.Object),在聲明一個變量時,groovy不要求強制類型聲明,僅僅要求變量名前使用關鍵字def(從groovy jsr 1開始,在以前的版本中,甚至連def都不需要)。

修改main 方法中的代碼:

def var="hello world"

println var

println var.class

你可以看到程式最後輸出了var的實際類型為:java.lang.String

作為例外,方法參數和循環變量的聲明不需要def。

2.字元串連接配接符

跟java一樣,如果你需要把一個字元串寫在多行裡,可以使用+号連接配接字元串。代碼可以這樣寫:

       def var="hello "+

       "world"+

       ",groovy!"

當然更groovy的寫法是:

       def var="""hello

       world

       groovy!"""

三個”号之間不在需要+号進行連接配接(不過字元串中的格式符都會被保留,包括回車和tab)。

3. 一切皆對象

groovy對于對象是什麼類型并不關心,一個變量的類型在運作中随時可以改變,一切根據需要而定。如果你賦給它boolean ,那麼不管它原來是什麼類型,它接受boolean值之後就會自動把類型轉變為boolean值。看下面的代碼:

def var="hello "+

       "world"+

       ",groovy!"

       println var;

       println var.class;

       var=1001

       println var.class

輸出結果:

hello world,groovy!

class java.lang.String

class java.lang.Integer

var這個變量在程式運作中,類型在改變。一開始給它指派String,它的類型就是String,後面給它指派Integer,它又轉變為Integer。

4.循環

删除整個源檔案内容,用以下代碼替代:

       def var="hello "+

       "world"+

       ",groovy!"

       def repeat(val){

            for(i = 0; i < 5; i++){

             println val

            }

       }

       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循環寫法。

未完待續。。。