1. 程式人生 > >Groovy基本語法(1)

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[];
      當然,這只是Groovy程式碼的一種寫法,實際上執行Groovy程式碼完全可以不必需要一個類或main方法,所以更簡單的寫法如下:
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的變數無需宣告型別了:

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
      從上面的程式碼可以看到,Groovy支援有型別的變數,例如String s;也支援無型別的變數,例如def s,相當於Java中的Object s;對於無型別的變數,甚至可以不寫def關鍵字。

      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次方;