《Groovy極簡教程》第1章 Groovy簡介

《Groovy極簡教程》第1章 Groovy簡介

Groovy: 絕妙的; 流行的; 最佳狀態(tài)的拼坎。
A multi-faceted language for the Java platform. (JVM平臺(tái)上的多面體語言轧拄。)

官網(wǎng)文檔:http://www.groovy-lang.org/documentation.html
Github源碼:https://github.com/apache/groovy

Groovy是一種基于JVM(Java虛擬機(jī))的敏捷開發(fā)語言皂吮,它結(jié)合了Python、Ruby和Smalltalk的許多強(qiáng)大的特性檩互。

基本特點(diǎn)

1、 構(gòu)建在強(qiáng)大的Java語言之上 并 添加了從Python,Ruby和Smalltalk等語言中學(xué)到的 諸多特征赖舟,例如動(dòng)態(tài)類型轉(zhuǎn)換、閉包和元編程(metaprogramming)支持夸楣。宾抓。
2、為Java開發(fā)者提供了 現(xiàn)代最流行的編程語言特性豫喧,而且學(xué)習(xí)成本很低(幾乎為零)石洗。
3、 支持DSL(Domain Specific Languages領(lǐng)域定義語言)和其它簡潔的語法紧显,讓代碼變得易于閱讀和維護(hù)讲衫。
4、受檢查類型異常(Checked Exception)也可以不用捕獲。
5涉兽、 Groovy擁有處理原生類型招驴,面向?qū)ο笠约耙粋€(gè)Ant DSL,使得創(chuàng)建Shell Scripts變得非常簡單枷畏。
6别厘、在開發(fā)Web,GUI拥诡,數(shù)據(jù)庫或控制臺(tái)程序時(shí) 通過 減少框架性代碼 大大提高了開發(fā)者的效率触趴。
7、支持單元測試和模擬(對(duì)象)渴肉,可以 簡化測試冗懦。
8、無縫集成 所有已經(jīng)存在的 Java對(duì)象和類庫仇祭。
9披蕉、直接編譯成Java字節(jié)碼,這樣可以在任何使用Java的地方 使用Groovy前塔。[2]
10嚣艇、支持函數(shù)式編程,不需要main函數(shù)华弓。
11食零、一些新的運(yùn)算符。
12寂屏、默認(rèn)導(dǎo)入常用的包贰谣。
13、斷言不支持jvm的-ea參數(shù)進(jìn)行開關(guān)迁霎。
14吱抚、支持對(duì)對(duì)象進(jìn)行布爾求值。
15考廉、類不支持default作用域秘豹,且默認(rèn)作用域?yàn)閜ublic。
16昌粤、groovy中基本類型也是對(duì)象既绕,可以直接調(diào)用對(duì)象的方法。

Groovy 語法與Java 語言的語法很相似涮坐,雖然 Groovy 的語法源于Smalltalk和Ruby這類語言的理念凄贩,但是可以將它想像成 Java 語言的一種更加簡單、表達(dá)能力更強(qiáng)的變體袱讹。(在這點(diǎn)上疲扎,Ruby與 Groovy 不同,因?yàn)樗恼Z法與 Java 語法差異很大。)
許多 Java 開發(fā)人員喜歡 Groovy 代碼和 Java 代碼的相似性椒丧。從學(xué)習(xí)的角度看壹甥,如果知道如何編寫 Java 代碼,那就已經(jīng)了解 Groovy 了瓜挽。

Groovy 和 Java 語言的主要區(qū)別是:完成同樣的任務(wù)所需的 Groovy 代碼比 Java 代碼更少盹廷。

Groovy 代碼能夠與 Java 代碼很好地結(jié)合征绸,也能用于擴(kuò)展現(xiàn)有代碼久橙,簡單說就是,我們可以編程過程中可以實(shí)現(xiàn)Java語言和Groovy之間的無縫集成管怠。

由于其運(yùn)行在 JVM 上的特性淆衷,Groovy 可以使用其他 Java 語言編寫的庫。

Groovy 是 用于Java虛擬機(jī)的一種敏捷的動(dòng)態(tài)語言渤弛,它是一種成熟的面向?qū)ο缶幊陶Z言祝拯,既可以用于面向?qū)ο缶幊蹋挚梢杂米骷兇獾哪_本語言她肯。使用該種語言不必編寫過多的代碼佳头,同時(shí)又具有閉包和動(dòng)態(tài)語言中的其他特性。

為什么要學(xué)習(xí)Groovy

為什么要學(xué)習(xí)Groovy晴氨,簡單來說就是Groovy可以用較少的代碼實(shí)現(xiàn)較多的功能康嘉。

Groovy 的松散的Java 語法允許省略分號(hào)和修改符。
除非另行指定籽前,Groovy 的所有內(nèi)容都為 public亭珍。
Groovy 允許定義簡單腳本,同時(shí)無需定義正規(guī)的 class 對(duì)象枝哄。
Groovy 在普通的常用 Java 對(duì)象上增加了一些獨(dú)特的方法和快捷方式肄梨,使得它們更容易使用。
變量挠锥,屬性众羡,方法,閉包的參數(shù)以及方法的返回類型都是可有可無的蓖租。
Groovy 默認(rèn)導(dǎo)入常用的包粱侣。

Groovy生態(tài)圈

Groovy的生態(tài)圈已經(jīng)很全面了。

Gradle

自動(dòng)化構(gòu)建工具菜秦,通過編寫簡單的Groovy腳本甜害,便可進(jìn)行依賴管理和項(xiàng)目構(gòu)建。如果你想使用Android Studio進(jìn)行Android開發(fā)球昨,Gradle已經(jīng)成為了Android Studio中的默認(rèn)構(gòu)建工具了尔店。

Grails

一套用于快速Web應(yīng)用開發(fā)的開源框架,它基于Groovy編程語言,并構(gòu)建于Spring嚣州、Hibernate和其它標(biāo)準(zhǔn)Java框架之上鲫售,從而為大家?guī)硪惶啄軐?shí)現(xiàn)超高生產(chǎn)力的一站式框架。

Spock

測試框架该肴,可通過其特有的DSL編寫測試案例情竹;

Griffon

Swing開發(fā)框架,其靈感來自于Grails匀哄。

Groovy

一個(gè)面向?qū)ο蟮哪_本語言秦效,跟Java還是有很大不同的,多了解一門語言涎嚼,對(duì)于提高自己的綜合編程能力也是大有裨益的阱州。另外,如果你是一名Java軟件工程師法梯,學(xué)習(xí)Groovy幾乎可以說是零成本的苔货。既然有這么多好處,確實(shí)是時(shí)候來學(xué)習(xí)一下Groovy了立哑。

動(dòng)態(tài)類型

類型對(duì)于變量夜惭,屬性,方法铛绰,閉包的參數(shù)以及方法的返回類型都是可有可無的诈茧,都是在給變量賦值的時(shí)候才決定它的類型, 不同的類型會(huì)在后面用到至耻,任何類型都可以被使用,即使是基本類型 (通過自動(dòng)包裝(autoboxing)). 當(dāng)需要時(shí)若皱,很多類型之間的轉(zhuǎn)換都會(huì)自動(dòng)發(fā)生,比如在這些類型之間的轉(zhuǎn)換: 字符串(String)尘颓,基本類型(如int) 和類型的包裝類 (如Integer)之間走触,可以把不同的基本類型添加到同一數(shù)組(collections)中。

閉包

閉包就是可以使用參數(shù)的代碼片段疤苹,每個(gè)閉包會(huì)被編譯成繼承g(shù)roovy.lang.Closure類的類互广,這個(gè)類有一個(gè)叫call方法,通過該方法可以傳遞參數(shù)并調(diào)用這個(gè)閉包.它們可以訪問并修改在閉包創(chuàng)建的范圍內(nèi)的變量卧土,在閉包內(nèi)創(chuàng)建的變量在閉包被調(diào)用的范圍內(nèi)同樣可以被引用惫皱, 閉包可以保存在變量中并被作為參數(shù)傳遞到方法中。

Groovy類和java類一樣尤莺,完全可以用標(biāo)準(zhǔn)java bean的語法定義一個(gè)Groovy類旅敷。但作為另一種語言,可以使用更Groovy的方式定義類颤霎,這樣的好處是媳谁,可以少寫一半以上的javabean代碼涂滴。

(1)不需public修飾符
如前面所言,Groovy的默認(rèn)訪問修飾符就是public晴音,如果Groovy類成員需要public修飾柔纵,則根本不用寫它。
(2)不需要類型說明
同樣前面也說過,Groovy也不關(guān)心變量和方法參數(shù)的具體類型。
(3)不需要getter/setter方法
在很多ide(如eclipse)早就可以為程序員自動(dòng)產(chǎn)生getter/setter方法了面徽,在Groovy中,不需要getter/setter方法--所有類成員(如果是默認(rèn)的public)根本不用通過getter/setter方法引用它們(當(dāng)然郭计,如果一定要通過getter/setter方法訪問成員屬性,Groovy也提供了它們)觉啊。
(4)不需要構(gòu)造函數(shù)
不再需要程序員聲明任何構(gòu)造函數(shù)拣宏,因?yàn)閷?shí)際上只需要兩個(gè)構(gòu)造函數(shù)(1個(gè)不帶參數(shù)的默認(rèn)構(gòu)造函數(shù)沈贝,1個(gè)只帶一個(gè)map參數(shù)的構(gòu)造函數(shù)--由于是map類型杠人,通過這個(gè)參數(shù)可以構(gòu)造對(duì)象時(shí)任意初始化它的成員變量)。
(5)不需要return
Groovy中宋下,方法不需要return來返回值嗡善。
(6)不需要()
Groovy中方法調(diào)用可以省略()(構(gòu)造函數(shù)除外)。

文件與類的關(guān)系

在Groovy中類和文件的對(duì)應(yīng)關(guān)系并不像Java中那么固定(Java中一個(gè)文件只能有一個(gè)聲明為public的類和其他一些非公共的類和內(nèi)嵌類) 学歧。在同一個(gè)groovy文件中可以包含多個(gè)public的類定義罩引。

具體規(guī)則如下:

如果在一個(gè)groovy文件中沒有任何類定義,它將被當(dāng)做script來處理枝笨,也就意味著這個(gè)文件將被透明的轉(zhuǎn)換為一個(gè)Script類型的類袁铐,這個(gè)自動(dòng)轉(zhuǎn)換得到的類將使用原始的groovy文件名(去掉擴(kuò)展名,沒有包名横浑,在default包中)作為類的名字剔桨。groovy文件的內(nèi)容被打包進(jìn)run方法,另外在新產(chǎn)生的類中被加入一個(gè)main方法以進(jìn)行外部執(zhí)行該腳本徙融。

如果在groovy文件正好有一個(gè)類的定義洒缀,并且該類的名字與文件名稱相同,那么這就和java中的類與文件的一一對(duì)應(yīng)關(guān)系相同欺冀。

在一個(gè)groovy文件中可以包含多個(gè)不同可見性的類定義树绩,并且沒有強(qiáng)制性的要求其中有一個(gè)類的類名與文件名相同。groovyc編譯器會(huì)很樂于把該文件中定義的所有的類都編譯成*.class文件隐轩。如果希望能夠直接調(diào)用這個(gè)groovy script饺饭,比如說在使用groovy命令行或者在某個(gè)IDE中執(zhí)行,那么應(yīng)該在該文件中的第一個(gè)類中定義一個(gè)main方法职车。

在一個(gè)groovy文件中可以混合類的定義和腳本定義瘫俊。在這種情況下蛛芥,那些腳本代碼將會(huì)變成直接調(diào)用的主類,所以在這種情況下不應(yīng)該再定義一個(gè)和文件同名的類军援。

在沒有經(jīng)過明確的編譯過程即執(zhí)行時(shí)仅淑,groovy將通過文件名來查找類。在這種情況下胸哥,名稱將會(huì)很重要涯竟。Groovy只能找到那些和文件名匹配的類。在找到這種名字匹配的類時(shí)空厌,找到的文件中定義的其他類將被解析并變得對(duì)groovy可見庐船。

參考資料

1.http://baike.baidu.com/item/Groovy?sefr=enterbtn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嘲更,隨后出現(xiàn)的幾起案子筐钟,更是在濱河造成了極大的恐慌,老刑警劉巖赋朦,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篓冲,死亡現(xiàn)場離奇詭異,居然都是意外死亡宠哄,警方通過查閱死者的電腦和手機(jī)壹将,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毛嫉,“玉大人诽俯,你說我怎么就攤上這事〕性粒” “怎么了暴区?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辛臊。 經(jīng)常有香客問我仙粱,道長,這世上最難降的妖魔是什么浪讳? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任缰盏,我火速辦了婚禮,結(jié)果婚禮上淹遵,老公的妹妹穿的比我還像新娘口猜。我一直安慰自己,他們只是感情好透揣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布济炎。 她就那樣靜靜地躺著,像睡著了一般辐真。 火紅的嫁衣襯著肌膚如雪须尚。 梳的紋絲不亂的頭發(fā)上崖堤,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音耐床,去河邊找鬼密幔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撩轰,可吹牛的內(nèi)容都是我干的胯甩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼堪嫂,長吁一口氣:“原來是場噩夢啊……” “哼偎箫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起皆串,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤淹办,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恶复,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怜森,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年寂玲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塔插。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拓哟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伶授,到底是詐尸還是另有隱情断序,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布糜烹,位于F島的核電站违诗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疮蹦。R本人自食惡果不足惜诸迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愕乎。 院中可真熱鬧阵苇,春花似錦、人聲如沸感论。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽比肄。三九已至快耿,卻和暖如春囊陡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掀亥。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工撞反, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搪花。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓痢畜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鳍侣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丁稀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)倚聚,斷路器线衫,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Groovy 2.0新特性http://www.infoq.com/cn/articles/new-groovy-...
    葡萄喃喃囈語閱讀 1,960評(píng)論 0 2
  • 今天我看見馬浩軒和羅一摔跤,讓我想起了一部電影《摔跤吧惑折,爸爸》授账。我對(duì)他們說:“你們是裝模作樣嗎?”他們沒有回答我惨驶,...
    格格的歌閱讀 100評(píng)論 0 0