語句
Groovy的語句和Java類似,但是有一些特殊的地方。例如語句的分號是可選的。如果每行一個語句,就可以省略分號;
如果一行上有多個語句,則需要用分號來分隔。
另外return關鍵字在方法的最後是可選的;同樣,返回類型也是可選(缺省是Object)。
變量
1、沒有類型的java
作爲動態語言,groovy中所有的變量都是對象(類似於.net framework,所有對象繼承自java.lang.Object),
在聲明一個變量時,groovy不要求強制類型聲明,僅僅要求變量名前使用關鍵字def。
def var="hello world"
println var
println var.class
你可以看到程序最後輸出了var的實際類型爲:java.lang.String
作爲例外,方法參數和循環變量的聲明不需要def。
2、不需要的public
你可以把main方法前面的public去掉,實際上,groovy中默認的修飾符就是public,所以public修飾符你根本就不需要寫,這點跟java不一樣。
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。
循環
代碼:
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循環寫法。
此外,上面的for語句還可以寫成:
for(i in 0..5)
這樣的結果是一樣的。
範圍
這個跟pascal中的“子界”是一樣的。在前面的for循環介紹中我們已經使用過的for(i in 0..5)這樣的用法,其中的0..5就是一個範圍。
範圍 是一系列的值。例如 “0..4” 表明包含 整數 0、1、2、3、4。Groovy 還支持排除範圍,“0..<4” 表示 0、1、2、3。還可以創建字符範圍:“a..e” 相當於 a、b、c、d、e。“a..<e” 包括小於 e 的所有值。
範圍主要在for循環中使用。
集合
Groovy支持最常見的兩個java集合:java.util.Collection和java.util.Map。前面所說的範圍實際也是集合的一種(java.util.List)。
(1) Collection
Groovy 中這樣來定義一個Collection:
def collect=["a","b","c"]
除了聲明時往集合中添加元素外,還可以用以下方式向集合中添加元素:
collect.add(1);
collect<<"come on";
collect[collect.size()]=100.0
Collection使用類似數組下標的方式進行檢索:
println collect[collect.size()-1]
println collect[5]
groovy支持負索引:
println collect[-1] //索引其倒數第1個元素
println collect[-2] //索引其倒數第2個元素
Collection支持集合運算:
collect=collect+5 //在集合中添加元素5
println collect[collect.size()-1]
collect=collect-'a' //在集合中減去元素a(第1個)
println collect[0] //現在第1個元素變成b了
同樣地,你可以往集合中添加另一個集合或刪除一個集合:
collect=collect-collect[0..4] //把集合中的前5個元素去掉
println collect[0] //現在集合中僅有一個元素,即原來的最後一個元素
println collect[-1] //也可以用負索引,證明最後一個元素就是第一個元素
(2) Map
Map是“鍵-值”對的集合,在groovy中,鍵不一定是String,可以是任何對象(實際上Groovy中的Map就是java.util.Linke dHashMap
)。
如此可以定義一個Map:
def map=['name':'john','age':14,'sex':'boy']
添加項:
map=map+['weight':25] //添加john的體重
map.put('length',1.27) //添加john的身高
map.father='Keller' //添加john的父親
可以用兩種方式檢索值:
println map['father'] //通過key作爲下標索引
println map.length //通過key作爲成員名索引
字符串
Groovy中的字符串允許使用雙引號和單引號。
當使用雙引號時,可以在字符串內嵌入一些運算式,Groovy允許您使用 與 bash 類似的 ${expression} 語法進行替換。可以在字符串中包含任意的Groovy表達式。
name="James"
println "My name is ${name},'00${6+1}'" //prints My name is James,'007'
Groovy還支持"uXXXX" 引用(其中X是16進制數),用來表示特殊字符,例如 "u0040" 與"@"字符相同。
對字符串的操作
- contains 字符串中是否包含子字符串,'groovy'.contains('oo')將返回true;
- count 返回字符串中子字符串出現的次數,'groooovy'.count('oo')將返回3.
- tokenize 根據分隔符將字符串分解成子串,'apple^banana^grap'.tokenize('^')返回['apple','banana','grape']。
- 減操作 'groovy'-'oo',結果是'grvy'。
- 乘操作 'oo'*3,結果是'oooooo'。