Groovy基本語法(1)
2、Starting Groovy
相比於一個傳統的Java類,一個包含main方法的Groovy類可以如下書寫:
程式碼1:具有main函式的Groovy類
package plswg.edu.groovy.basic
// 利用class關鍵字建立一個groovy類
class G01_HelloWorldClass {
// 靜態的main方法作為程式入口
static main(args) {
// 使用println命令輸出
println "HelloWorld in class"
}
}
和Java一樣,程式會從這個類的main方法開始執行,和Java的區別是:
- class前省略public修飾;
- main方法前省略public修飾;
- main方法省略返回值型別void;
- main方法形參列表省略型別String[];
package plswg.edu.groovy.basic
// 對於groovy程式來說,可以沒有類和main方法,直接書寫的程式碼就可以作為指令碼執行
println "HelloWorld in script"
這段程式碼仍可以直接執行。
實際上,最終編譯器仍會為這段程式碼生成一個類,類名和檔名相同,只不過從原始碼的角度上,確實不用寫類或者main方法了,這一點很像Javascript等其它指令碼語言。
可以注意到,Groovy將Java中繁瑣的System.out.println簡化為了println,甚至可以不為形參列表加括號,這都是允許的,Groovy非常簡潔,甚至不要求語句末尾的分號(當然,寫上分號也無傷大雅)
3、Groovy變數
既然是指令碼語言,Groovy的變數也被設計成為了類似的弱型別,實際上Groovy同時支援強型別變數和“弱”型別變數,強型別變數擁有自己的型別,而“弱”型別變數則全部會被編譯為Object型別,從程式碼的角度上,Groovy的變數無需宣告型別了:
從上面的程式碼可以看到,Groovy支援有型別的變數,例如String s;也支援無型別的變數,例如def s,相當於Java中的Object s;對於無型別的變數,甚至可以不寫def關鍵字。package plswg.edu.groovy.basic // groovy可以使用型別確定的變數或常量 String s1 = "Hello " print s1 final String s2 = "World" println s2 // 利用def關鍵字可以定義可變型別的變數或常量 def s3 = "Welcome " print s3 // 對於可變型別,即隨時可以改變其型別,賦予不同的量 s3 = 123 // 此時str3被賦予了整型量,所以其型別變為Integer型別 println s3 s3 += 100 // 整型的str3和整型相加,結果是整型223 println s3 s3 = true // str3目前是boolean型別 println ("Ok " + s3) // 對於區域性變數,甚至可以不使用def關鍵字來定義 s4 = "Good job" println s4 // 對於數值型別,有如下規則 int n1 = 10 n2 = n1 / 3 println n2 // 對於n1為整數時, 10 / 3的結果並不是整數,這說明常量n2並不是整數 int n3 = n1 / 3 // 明確定義n3為整數後,相除的結果為整數 println n3 n2 = n1.intdiv(3) println n2 // intdiv用於進行整除 n2 = n1.power(2) // 求平方 groovy方法 println n2 n2 = n1 ** 2 // 求平方的groovy語法 println n2 n1 = Math.sqrt(n2) // 求開方 java方法 println n1
final關鍵字依然作為常量標識,這一點和Java相同。
最後注意一點,Groovy中沒有Java中的值型別簡單物件,所有的物件都是引用型別物件,例如定義def n = 10,n的型別應該是Integer型別而不是int型別;即便定義了int n = 100,n的型別依然是Integer型別;如果定義了def n = 12.34,則注意,n的型別是BigDecimal型別而不是Double型別,只有顯式定義double n = 12.34,n的型別才明確為Double型別(依舊不是double型別)
對於基本算術運算子,Groovy增加了**運算子,表示求冪,x ** y表示求x的y次方;