轉:https://www.w3cschool.cn/groovy/java
Groovy的官方網站是http://www.groovy-lang.org/程序員
Groovy是一種基於JVM(Java虛擬機)的敏捷開發語言,它結合了Python、Ruby和Smalltalk的許多強大的特性,Groovy 代碼可以與 Java 代碼很好地結合,也能用於擴展示有代碼。因爲其運行在 JVM 上的特性,Groovy 可使用其餘 Java 語言編寫的庫。數據庫
Groovy是用於Java虛擬機的一種敏捷的動態語言,它是一種成熟的面向對象編程語言,既能夠用於面向對象編程,又能夠用做純粹的腳本語言。使用該種語言沒必要編寫過多的代碼,同時又具備閉包和動態語言中的其餘特性。編程
Groovy是JVM的一個替代語言(替代是指能夠用 Groovy 在Java平臺上進行 Java 編程),使用方式基本與使用 Java代碼的方式相同,該語言特別適合與Spring的動態語言支持一塊兒使用,設計時充分考慮了Java集成,這使 Groovy 與 Java 代碼的互操做很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的結合編程。數組
一、構建在強大的Java語言之上 並 添加了從Python,Ruby和Smalltalk等語言中學到的 諸多特徵,例如動態類型轉換、閉包和元編程(metaprogramming)支持。閉包
二、爲Java開發者提供了 現代最流行的編程語言特性,並且學習成本很低(幾乎爲零)。框架
三、支持DSL(Domain Specific Languages領域定義語言)和其它簡潔的語法,讓代碼變得易於閱讀和維護。eclipse
四、受檢查類型異常(Checked Exception)也能夠不用捕獲。jvm
五、Groovy擁有處理原生類型,面向對象以及一個Ant DSL,使得建立Shell Scripts變得很是簡單。編程語言
六、在開發Web,GUI,數據庫或控制檯程序時 經過 減小框架性代碼 大大提升了開發者的效率。
七、支持單元測試和模擬(對象),能夠 簡化測試。
八、無縫集成 全部已經存在的 Java對象和類庫。
九、直接編譯成Java字節碼,這樣能夠在任何使用Java的地方 使用Groovy。
十、支持函數式編程,不須要main函數。
十一、一些新的運算符。
十二、默認導入經常使用的包。
1三、斷言不支持jvm的-ea參數進行開關。
1四、支持對對象進行布爾求值。
1五、類不支持default做用域,且默認做用域爲public。
1六、groovy中基本類型也是對象,能夠直接調用對象的方法。
類型對於變量,屬性,方法,閉包的參數以及方法的返回類型都是無關緊要的,都是在給變量賦值的時候才決定它的類型, 不一樣的類型會在後面用到,任何類型均可以被使用,即便是基本類型 (經過自動包裝(autoboxing)). 當須要時,不少類型之間的轉換都會自動發生,好比在這些類型之間的轉換: 字符串(String),基本類型(如int) 和類型的包裝類 (如Integer)之間,能夠把不一樣的基本類型添加到同一數組(collections)中。
閉包就是可使用參數的代碼片斷,每一個閉包會被編譯成繼承groovy.lang.Closure類的類,這個類有一個叫call方法,經過該方法能夠傳遞參數並調用這個閉包.它們能夠訪問並修改在閉包建立的範圍內的變量,在閉包內建立的變量在閉包被調用的範圍內一樣能夠被引用, 閉包能夠保存在變量中並被做爲參數傳遞到方法中。
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中方法調用能夠省略()(構造函數除外)。