1.Groovy和Java對比
2.用實例演示Java和Grovvy的區別
請注意,在這段代碼周圍沒有類結構,而且也沒有方法結構!我還使用?println
?代替了?System.out.println
/home/amosli/developsoft/language/groovy/test/Hello.groovy
?
如果已經設置了Grovvy的環境變量,那么只需輸入:
更快捷的方式:
如果有環境變量就變成了:
?
這會有相同的結果,而且甚至無須定義任何文件。
3Grovvy是沒有類型的java代碼
類型定義:
為什么要有類型定義:在java中,如果要聲明一個String變量,則必須輸入:
String value="Hello world";
?
但是,如果仔細想想,就會看出,等號右側的字符已經表明?value
?的類型是?String
。所以,Groovy 允許省略?value
?前面的?String
?類型變量,并用?def
?代替。
?
實際上,Grovvy會根據對象的值來判斷他的類型。
運行程序!
將HelloWorld.grovvy文件中的代碼編輯成下面這樣
?
4.通過Grovvy進行循環
方式1:
這里可以定義i為int或者def,或者不定義其類型
方式2:
使用in進行循環,其中..表示“到”,0..5表示0到5.類似于0<=5;這里循環6次。
可以使用0..<5進行限定。類似于0<5循環5次。
5.Grovvy中的集合
1)Grovvy中的list
注意:assert命令用來證明范圍是java.util.List的實例,接著運行這個代碼,。證實該范圍是類型List的集合。
Grovvy的語法:
coll看起來很像一個java語言中的數組,實際上他是一個Collection。要在普通的java代碼中得到集合的相同實例,必須執行以下操作。
在java黛娜中,必須使用add()向ArrayList實例添加項。
而Grovvy中則提供了三種方法:
?
查找元素:
Grovvy中的特殊方法:
Grovvy中的特殊方法:
?
join()和count()只是在任何項List都可以調用的眾多方法中的兩個,分布操作符是個提別方便的工具,使用這個工具不要再集合上迭代,就能夠調用集合每個項上的方法。
假設有一個String列表,現在想將列表中的項目全部變成大寫,可以編寫以下代碼:
?
assert ["JAVA", "GROOVY"] ==
["Java", "Groovy"]*.toUpperCase()
注意*.標記。對于以上列表中的每個值,都會調用toUpperCase().生成的集合中每個String實例都是大寫的。?
?
2)Grovvy中的Map
java語言中的映射是名稱-值對的集合。所以,要用java代碼創建典型的映射,必須像如下這樣:
Grovvy使得處理映射的操作像處理列表一樣簡單,例如,可以用Grovvy將上面的java映射寫成:
注意:Grovvy映射中的鍵不必恃String.在這個示例中,name看起來像一個變量,但是在幕后,Grovvy會將它變成String.
驗證hash格式:
assert ? hash.getClass()==java.util.LinkedHashMap
?
Grovvy中Hash的Set/Get
注意:在使用[]語法從映射獲取項時,必須將項作為String引用。
?
6Grovvy中的閉包
java的Iterator實例,用它在集合上迭代,就像下面這樣。
注意,each直接在acoll實例內調用,而acoll實例的類型是ArrayList.在each調用之后,引入了一種新的語法{,代碼}。由{}包圍起來的代碼塊就是閉包。
閉包中的it變量是一個關鍵字,指向被調用的外部集合的每個值-他是默認值,可以用傳遞給閉包的參數覆蓋他。下面的代碼執行同樣的操作,但使用自己的項變量:
在這個示例中,用value代替了Grovvy的默認it.
?
請注意,閉包還允許使用多個參數,在上面的實例中,包含兩個參數(key和value)
凡是集合或一系列的內容,都可以使用下面這樣的代碼進行迭代。
?
這段代碼是名為excite的閉包,這個閉包接受一個參數(名為word)返回的String是word變量加兩個感嘆號。請注意String實例中替換的用法。在String中使用${value}語法將告訴Grovvy替換String中的某個變量的值。可以將這個語法當成return word+"!!"的快捷方式。
輸出this is Grovvy
?
7Groovy中的類
新建一個類song
?
?
?
Groovy 自動提供一個構造函數,構造函數接受一個名稱-值對的映射,這些名稱-值對與類的屬性相對應。這是 Groovy 的一項開箱即用的功能 — 用于類中定義的任何屬性,Groovy 允許將存儲了大量值的映射傳給構造函數。映射的這種用法很有意義,例如,您不用初始化對象的每個屬性。
?
也可以添加下面這樣的代碼:
也可以添加像下面這樣直接操縱類的屬性:
在Song類中,添加以下代碼:
?
8 Grovvy中的單元測試
在Intellij中只需要加入@Test注解就可以使用JUnit測試
加個?可以防止空指針的錯誤:
9.擴展、
?
如果需要用Groovy做web 項目的話可以去了解一下Grails框架。