Groovy開發環境搭建
Groovy是一種基於JVM(Java虛擬機)的敏捷動態開發語言。它是一種成熟的面向對象編程語言,既可以用於面向對象編程,又可以用作純粹的腳本語言。
Groovy是一種動態語言,它和Java類似,都在Java虛擬機中運行。當運行Groovy腳本時它會先被編譯成Java類字節碼,然後通過JVM虛擬機執行這個Java字節碼類。
Groovy與 Java可以很好的互相調用並結合編程 ,比如在寫 Groovy 的時候忘記了語法可以直接按Java的語法繼續寫,也可以在 Java 中調用 Groovy 腳本。比起Java,Groovy語法更加的靈活和簡潔,可以用更少的代碼來實現Java實現的同樣功能。
Groovy 和 Java 語言對比
用 Java 編寫的典型的 Hello World 示例如下所示:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("java:Hello World");
}
}
用 Groovy 編寫 Hello World 程序就如下面這樣簡單:
Groovy 支持鬆散的 Java 語法,例如,不需要爲打印 “Hello World!” 這樣的簡單操作定義類。Groovy 允許輸入println,而無需輸入System.out.println。
Groovy是依賴於Java的,所以首先要配置好JDK。
接着,下載Groovy,其網址:
http://groovy-lang.org/download.html
我下載的是apache-groovy-sdk-3.0.0-rc-1.zip,是壓縮文件版,將其壓縮文件解壓到任意目錄下,即可看到如下文件路徑。
bin:該路徑下存放了各種工具命令,常用命令groovy就放在該路徑下。
lib:該目錄下包含了groovy的各種工具JAR包。
licenses:groovy項目相關的各種授權文檔。
等
下載完成後,解壓到指定目錄,
配置Groovy環境變量:將 bin 目錄添加到系統環境變量(配置Groovy環境變量)。
將(跟據你的實際情況)D:\groovy-3.0.0-rc-1\bin
放入系統環境變量path
在win10配置系統環境變量
右鍵此電腦,屬性,高級系統設置,系統屬性,在“系統變量”中,找到PATH,添加,參見下圖:
測試
在cmd命令行使用groovy -v,如果出現Groovy版本號說明配置成功。參見下圖:
【注:若提示
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/D:/groovy-2.5.8/bin/../lib/groovy-2.5.8.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
說明groovy版本和jdk的版本不匹配,但影響不大。groovy-2.5.8和jdk11有此問題groovy-3.0和jdk11就沒有此問題。】
我用的是jdk11,groovy-3.0.0-rc-1
一旦上述步驟之後,你就可以開始使用Groovy shell,有助於測試我們的Groovy,而不需要爲Groovy提供一個完整的集成開發環境。可以通過在命令提示符下命令groovysh來完成,參見下圖
輸入groovysh 回車
輸入println "Hello World!" 回車
在cmd中使用groovyconsole命令會啓動自帶的編輯器
輸入println "Hello World!",用script ->Run 或 按下快捷鍵Ctrl +R運行
另外如果選擇File - Save As...可以將Groovy保存爲groovy文件。所以Groovy的文件後綴就是groovy。當然你也可以在命令行用groovy xxx.groovy來運行Groovy程序。
Groovy語言基礎
Groovy註釋標記和Java一樣,使用//
Groovy語句可以不用分號結尾。
Groovy中的變量
基本類型(java中的int,float,double,byte,char,long,short)和對象類型(String等) ,最終都是對象類型。
int x = 10
println x.class //結果爲:class java.lang.Integer
Groovy運算符
Groovy的運算符與Java大多相同,也有些與Java的不同點,如:
冪運算符**
assert 2 ** 3 //顯示8
非運算符!
assert (!true) //顯示false
Groovy支持將?:三目運算符簡化爲二目,如:
displayName = user.name ? user.name : 'Anonymous'
displayName = user.name ?: 'Anonymous'
Groovy定義變量
Groovy中支持動態類型,即定義變量的時候可以不指定其類型。Groovy中,變量定義可以使用關鍵字def。
def var=1
def str="iamaperson"
def intx=1 //也可以指定類型
Groovy變量定義有強類型定義和弱類型定義2種方式。
強類型定義是在聲明一個變量的時候,同時指定變量的類型。如:
int x = 10
double y = 2.0
這種的聲明後期不能更改成其他類型。這種類型是強類型。
x="good" //拋出異常(Exception thrown)
弱類型定義不需要提前指定變量的類型,可以通過def關鍵字告訴編譯器聲明變量。
def z=5
z="Hi"
使用def定義的變量能夠隨時改變它的類型。
對於弱類型後期可以更改成其他類型 ,開始z 是一個int 類型 後期改成了字符串類型
一般而言,如果變量只有在本模塊內部使用,推薦使用弱類型定義方式,可以方便轉換成其他需要的類型。如果變量用於其他模塊或者其他類,推薦使用強類型定義方式,這種方式定義的變量不能動態轉換爲其他類型,保證了外界傳入的值是正確的。
使用弱類型定義的類型是Object類型,使用強類型定義的類型是具體的某一種類型。
Groovy的字符串
Groovy中字符串分爲三種,我們一個個來看。
單引號字符串,單引號字符串不會對$號進行轉義,原樣輸出,如下:
def str1 = 'i am $i yuan'//單引號不會轉義
println str1 //輸出 i am $i yuan
雙引號字符串,雙引號字符串會對$號進行轉義,如下:
def str2 = "i am $i yuan"//雙引號會轉義
println str2 //輸出 i am 10 yuan
三引號字符串,三引號字符串支持換行,原樣輸出,如下:
//三個引號原樣輸出
def str3 = '''
public static void main(){
println "miss you"
}
'''
println str3
輸出:
public static void main(){
println "miss you"
}
Groovy數據結構(容器類形)
列表
def listA=[1,2,3,4] //定義列表
println listA.min() //輸出1
def listB = [1,2,3,4,5] as int[] //列表轉數組
listB[2] //輸出3
數組
int[] array = [1,2,3]
映射(map)
Groovy 定義 Map 的方式非常簡潔,通過中括號包含key、val的形式,key和value以冒號分隔([key:value])。Groovy中的Map其實就是java.util.Map,實現類默認使用的是java.util.LinkedHashMap。
//定義映射(map)
def students = [
1 : "張三",
2 : "李四",
3 : "Jhon"
]
//索引
students[1] //此句也可替換爲students.get(1),顯示 張三
Ranges
簡單來說Ranges就是對List的擴展,用…或者…<來定義,具體使用如下:
def Range1 = 1..10//包括10
println Range1.contains(10) //true
def Range2 = 1..<10//不包括10
println Range2.contains(10) //false
函數
函數定義時,參數的類型也可以不指定。比如
Stringfunction(arg1,args2){//無需指定參數類型}
除了變量定義可以不指定類型外,Groovy中函數的返回值也可以是無類型的。比如:
//無類型的函數定義,必須使用def關鍵字
def nonReturnTypeFunc(){
last_line//最後一行代碼的執行結果就是本函數的返回值
}
//如果指定了函數返回類型,則可不必加def關鍵字來定義函數
String getString(){
return "I am a string"
}
def repeat(val){
for(i = 0; i < 5; i++){
println val
}
}
調用這個函數。
repeat("hello world")
會輸出 “hello world” 五次。
groovy程序結構
包名的定義和作用及含義完全和Java一樣,如:
// defining a package named com.yoursite
package com.yoursite
Imports引入
常規的imports導包操作和Java一樣,如:
import groovy.xml.*
提示:Groovy與Java類似,已經幫我們默認導入了一些常用的包,所以在我們使用這些包的類時就不用再像上面那樣導入了,如下是自動導入的包列表:
import java.lang.*
import java.util.*
import java.io.*
import java.net.*
import groovy.lang.*
import groovy.util.*
import java.math.BigInteger
import java.math.BigDecimal
延展閱讀:
groovy常用語法及實戰
https://www.cnblogs.com/yufecheng/p/11302777.html
Groovy腳本基礎全攻略
https://www.jianshu.com/p/fbfaaecc19ee
精通 Groovy
https://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html