Groovy
Groovy
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很好的結合編程。
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。
10、支持函數式編程,不需要main函數。
11、一些新的運算符。
12、默認導入常用的包。
13、斷言不支持jvm的-ea參數進行開關。
14、支持對對象進行布爾求值。
15、類不支持default作用域,且默認作用域為public。
16、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中方法調用可以省略()(構造函數除外)。
在Groovy中類和文件的對應關係並不像Java中那麼固定(Java中一個文件只能有一個聲明為public的類和其他一些非公共的類和內嵌類) 。在同一個groovy文件中可以包含多個public的類定義。具體規則如下:
如果在一個groovy文件中沒有任何類定義,它將被當做script來處理,也就意味著這個文件將被透明的轉換為一個Script類型的類,這個自動轉換得到的類將使用原始的groovy文件名(去掉擴展名,沒有包名,在default包中)作為類的名字。groovy文件的內容被打包進run方法,另外在新產生的類中被加入一個main方法以進行外部執行該腳本。
如果在groovy文件正好有一個類的定義,並且該類的名字與文件名稱相同,那麼這就和java中的類與文件的一一對應關係相同。
在一個groovy文件中可以包含多個不同可見性的類定義,並且沒有強制性的要求其中有一個類的類名與文件名相同。groovyc編譯器會很樂於把該文件中定義的所有的類都編譯成*.class文件。如果希望能夠直接調用這個groovy script,比如說在使用groovy命令行或者在某個IDE中執行,那麼應該在該文件中的第一個類中定義一個main方法。
在一個groovy文件中可以混合類的定義和腳本定義。在這種情況下,那些腳本代碼將會變成直接調用的主類,所以在這種情況下不應該再定義一個和文件同名的類。
在沒有經過明確的編譯過程即執行時,groovy將通過文件名來查找類。在這種情況下,名稱將會很重要。Groovy只能找到那些和文件名匹配的類。在找到這種名字匹配的類時,找到的文件中定義的其他類將被解析並變得對groovy可見。
Groovy 2.2,發佈於2013年11月。
Java(甲骨文公司)
Java平台 | ▪ Java 編程語言▪ JVM▪ Java ME▪ Java SE▪ Java EE▪ Java Card |
---|
昇陽電腦主要技術 | ▪ Squawk▪ JDK▪ OpenJDK▪ Java Virtual Machine▪ JavaFX |
---|
平台技術 | ▪ Applet▪ Servlets▪ MIDlets▪ JSP▪ Web Start (jnlp) |
---|
主要的第三方技術 | ▪ JRockit▪ GNU Classpath▪ Kaffe▪ TopLink▪ Apache Harmony▪ Struts▪ Spring Framework▪ Hibernate▪ JBoss▪ Tapestry▪ Jazelle |
---|
歷史 | ▪ 歷史▪ 批評▪ Java Community Process▪ 昇陽電腦▪ Free Java implementations |
---|
主要編程語言 | ▪ Tcl/Java▪ Jython▪ JRuby▪ BeanShell▪ Clojure▪ Groovy▪ Rhino▪ Scala▪ Processing |
---|
Java會議 | ▪ JavaOne |
---|