Groovy的特點
Groovy中有以下特點:
- 同時支持靜態和動態類型。
- 支持運算符重載。
- 本地語法列表和關聯數組。
- 對正則表達式的本地支持。
- 各種標記語言,如XML和HTML原生支持。
- Groovy對於Java開發人員來說很簡單,因為Java和Groovy的語法非常相似。
- 您可以使用現有的Java庫。
- Groovy擴展了java.lang.Object。
Groovy 環境
groovy---安裝指南
brew install groovy
export GROOVY_HOME=/usr/local/opt/groovy/libexec
看到這個說明已經安裝好了, 然后有一段話:
You should set GROOVY_HOME: export GROOVY_HOME=/usr/local/opt/groovy/libexec
意思是你應該設置groovy環境變量
vi ~/.bash_profile
將下面的語句添加進去
GROOVY_HOME: export GROOVY_HOME=/usr/local/opt/groovy/libexec
然后使用groovy -version命令去查看下
hanwenda@bogon bin % vi ~/.bash_profile
hanwenda@bogon bin % source ~/.bash_profile
hanwenda@bogon bin % groovy -veresion
Groovy Version: 4.0.0 JVM: 1.8.0_321 Vendor: Oracle Corporation OS: Mac OS X
有多種方式來獲得的Groovy環境設置。
下載和安裝 -進入該鏈接www.groovy-lang.org/download.html獲得Windows安裝程序部分。

啟動Groovy安裝程序,然后請執行以下完成安裝步驟。
第1步 -選擇語言安裝程序。

第2步 -點擊下一步按鈕。

第3步 -點擊“我同意”按鈕。

第4步 -接受默認組件,然后單擊下一步按鈕。

第5步 -選擇適當的目標文件夾,然后單擊下一步按鈕。

第6步 -點擊安裝按鈕開始安裝。

第7步 -一旦安裝完成后,單擊下一步按鈕開始配置。

第8步 -選擇默認選項,並單擊下一步按鈕。

第9步 -接受默認的文件關聯,然后單擊下一步按鈕。

第10步 -單擊Finish按鈕完成安裝。

一旦上述步驟之后,你就可以開始使用Groovy shell,有助於測試我們的Groovy,而不需要為Groovy提供一個完整的集成開發環境。可以通過在命令提示符下命令groovysh來完成。

Gradle
'org.codehaus.groovy:groovy:2.4.5'
Maven
<groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> <version>2.4.5</version>
內置數據類型
Groovy提供多種內置數據類型。以下是在Groovy中定義的數據類型的列表 -
-
byte -這是用來表示字節值。例如2。
-
short -這是用來表示一個短整型。例如10。
-
int -這是用來表示整數。例如1234。
-
long -這是用來表示一個長整型。例如10000090。
-
float -這是用來表示32位浮點數。例如12.34。
-
double -這是用來表示64位浮點數,這些數字是有時可能需要的更長的十進制數表示。例如12.3456565。
-
char -這定義了單個字符文字。例如“A”。
-
Boolean -這表示一個布爾值,可以是true或false。
-
String -這些是以字符串的形式表示的文本。例如,“Hello World”的。
數字類
類型除了基本類型,還允許以下對象類型(有時稱為包裝器類型)-
- java.lang.Byte
- java.lang.Short
- java.lang.Integer
- java.lang.Long
- java.lang.Float
- java.lang.Double
此外,以下類可用於支持高精度計算 -
名稱 | 描述 | 例如 |
---|---|---|
java.math.BigInteger | 不可變的任意精度的有符號整數數字 | 30克 |
java.math.BigDecimal | 不可變的任意精度的有符號十進制數 | 3.5克 |
算術運算符
Groovy語言支持正常的算術運算符任何語言。以下是在Groovy中可用的算術運算符 -
運算符 | 描述 | 例子 |
+ | 兩個操作數的加法 | 1 + 2 將得到 3 |
- | 第一第二操作數相減 | 2 - 1 將得到 1 |
* | 兩個操作數的乘法 | 2 * 2 將得到4 |
/ | 兩個操作數的除法 | 3/2 將得到 1.5 |
% | 取模運算 | 3%2 將得到 1 |
++ | 自增運算,在自身值的基礎上加1 | INT X = 5; X ++; X 將得到 6 |
-- | 自減運算,在自身值的基礎上減1 | INT X = 5; X - -; X 將得到 4 |
關系運算符
關系運算符允許對象的比較。以下是在Groovy中可用的關系運算符 -
運算符 | 描述 | 例子 |
---|---|---|
== | 測試兩個對象之間是否相等 | 2 == 2 將得到 true |
!= | 測試兩個對象之間是否不等 | 3 != 2 將得到 true |
< | 檢查是否左邊的對象是小於右邊的對象。 | 2 < 3 將得到 true |
<= | 檢查是否向左對象是小於或等於右邊的對象 | 2 <= 3 將得到 true |
> | 檢查是否左邊的對象比右邊的對象大。 | 3 > 2 將得到 true |
>= | 檢查是否向左對象大於或等於右邊的對象。 | 3>= 2 將得到 true |
邏輯運算符
邏輯運算符用於計算布爾表達式。以下是在Groovy中提供的邏輯運算符 -
運算符 | 描述 | 例子 |
---|---|---|
&& | 這是邏輯“與”運算 | true && true 得到 true |
|| | 這是邏輯“或”運算 | true || true 得到 true |
! | 這是邏輯“非”運算 | !true 得到 false |
位運算符
Groovy中提供了四個位運算符。以下是在Groovy中可用的位運算符 -
運算符 | 描述 |
---|---|
& | 這是位“與”運算 |
| | 這是按位“或”運算 |
^ | 這是按位“異或”或異或運算符 |
〜 | 這是按位反運算符 |
這里是顯示這些運算符的真值表。
p | q | p&Q | p | q | p ^ Q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
賦值運算符
Groovy語言也提供了賦值操作符。以下是在Groovy提供的賦值運算符 -
運算符 | 描述 | 例子 |
---|---|---|
+= | A += B 等價於 A = A+B | DEF A = 5 A += 3 輸出將是8 |
-= | A -= B 等價於 A = A-B | DEF A = 5 A -= 3 輸出將是2 |
*= | A *= B 等價於 A= A*B | DEF A = 5 A *= 3 輸出將是15 |
/= | A /= B 等價於 A = A/B | DEF A = 6 A /= 3 輸出將是2 |
(%)= | A (%)= B 等價於 A = A % B | DEF A = 5 A %= 3 輸出將是2 |
范圍運算符
Groovy支持范圍的概念,並在..符號的幫助下提供范圍運算符的符號。下面給出了范圍運算符的一個簡單示例。
def range = 0..5
這只是定義了一個簡單的整數范圍,存儲到一個局部變量稱為范圍內的下限為0和上限為5。
以下代碼段顯示了如何使用各種運算符。
class Example { static void main(String[] args) { def range = 5..10; println(range); println(range.get(2)); } }
當我們運行上面的程序,我們會得到以下結果 -
從println語句中,可以看到顯示在range語句中定義的整個數字范圍。
get語句用於從定義的范圍中獲取一個對象,它將索引值作為參數。
[5, 6, 7, 8, 9, 10] 7
運算符優先級
下表按優先級順序列出了所有groovy運算符(僅列出部分運算符)
運算符 | 名稱 |
---|---|
++ ,-- ,+ ,- |
預增/減(自增/減),一元加,一元減 |
* , / , % |
乘法,除法,取模 |
+ ,- |
加法,減法(二元) |
== ,!= , <=> |
等於,不等於,比較運算符 |
& |
二進制/位運算符與 |
^ |
二進制/位異或 |
| |
二進制/按位或 |
! | 邏輯非 |
&& |
邏輯與 |
|| |
邏輯或 |
= ,+= ,-= ,*= ,/= ,%= ,**= |
各種賦值運算符 |
Groovy 方法
Groovy 中的方法是使用返回類型或使用 def 關鍵字定義的。方法可以接收任意數量的參數。定義參數時,不必顯式定義類型。可以添加修飾符,如 public,private 和 protected。默認情況下,如果未提供可見性修飾符,則該方法為 public。
最簡單的方法是沒有參數的方法,如下所示:
def methodName() { //Method code }
下面是一個簡單方法的例子
class Example { static void sum(int a,int b) { int c = a+b; println(c); } static void main(String[] args) { sum(10,5); } }
Groovy 文件I/O
Groovy在使用I / O時提供了許多輔助方法,Groovy提供了更簡單的類來為文件提供以下功能。
- 讀取文件
- 寫入文件
- 遍歷文件樹
- 讀取和寫入數據對象到文件
除此之外,您始終可以使用下面列出的用於文件I / O操作的標准Java類。
- java.io.File
- java.io.InputStream
- java.io.OutputStream
- java.io.Reader
- java.io.Writer
基本字符串操作
首先讓我們學習groovy中的基本字符串操作。它們在下面給出。
序號 | 字符串操作和描述 |
---|---|
1 | Concatenation of two strings 字符串的串聯可以通過簡單的'+'運算符來完成。 |
2 | String Repetition 字符串的重復可以通過簡單的'*'運算符完成。 |
3 | String Length 由字符串的length()方法確定的字符串的長度。 |
字符串方法
這里是String類支持的方法列表。
序號 | 方法和描述 |
---|---|
1 | center() 返回一個新的長度為numberOfChars的字符串,該字符串由左側和右側用空格字符填充的收件人組成。 |
2 | compareToIgnoreCase() 按字母順序比較兩個字符串,忽略大小寫差異。 |
3 | concat() 將指定的String連接到此String的結尾。 |
4 | eachMatch() 處理每個正則表達式組(參見下一節)匹配的給定String的子字符串。 |
5 | endsWith() 測試此字符串是否以指定的后綴結尾。 |
6 | equalsIgnoreCase() 將此字符串與另一個字符串進行比較,忽略大小寫注意事項。 |
7 | getAt() 它在索引位置返回字符串值 |
8 | indexOf() 返回此字符串中指定子字符串第一次出現的索引。 |
9 | matches() 它輸出字符串是否匹配給定的正則表達式。 |
10 | minus() 刪除字符串的值部分。 |
11 | next() 此方法由++運算符為String類調用。它增加給定字符串中的最后一個字符。 |
12 | padLeft() 填充字符串,並在左邊附加空格。 |
13 | padRight() 填充字符串,並在右邊附加空格。 |
14 | plus() 追加字符串 |
15 | previous() 此方法由CharSequence的 - 運算符調用。 |
16 | replaceAll() 通過對該文本的關閉結果替換捕獲的組的所有出現。 |
17 | reverse() 創建一個與此String相反的新字符串。 |
18 | split() 將此String拆分為給定正則表達式的匹配項。 |
19 | subString() 返回一個新的String,它是此String的子字符串。 |
20 | toUpperCase() 將此字符串中的所有字符轉換為大寫。 |
21 | toLowerCase() 將此字符串中的所有字符轉換為小寫。 |
Groovy 范圍
范圍是指定值序列的速記。范圍由序列中的第一個和最后一個值表示,Range可以是包含或排除。包含范圍包括從第一個到最后一個的所有值,而獨占范圍包括除最后一個之外的所有值。這里有一些范例文字的例子 -
- 1..10 - 包含范圍的示例
- 1 .. <10 - 獨占范圍的示例
- 'a'..'x' - 范圍也可以由字符組成
- 10..1 - 范圍也可以按降序排列
- 'x'..'a' - 范圍也可以由字符組成並按降序排列。
以下是可用於范圍的各種方法。
序號 | 方法和描述 |
---|---|
1 | contains() 檢查范圍是否包含特定值 |
2 | get() 返回此范圍中指定位置處的元素。 |
3 | getFrom() 獲得此范圍的下限值。 |
4 | getTo() 獲得此范圍的上限值。 |
5 | isReverse() 這是一個反向的范圍,反向迭代 |
6 | size() 返回此范圍的元素數。 |
7 | subList() 返回此指定的fromIndex(包括)和toIndex(排除)之間的此范圍部分的視圖 |
Groovy 列表
列表是用於存儲數據項集合的結構。在 Groovy 中,List 保存了一系列對象引用。
List 中的對象引用占據序列中的位置,並通過整數索引來區分。
列表文字表示為一系列用逗號分隔並用方括號括起來的對象。
groovy 列表使用索引操作符 [] 索引。列表索引從 0 開始,指第一個元素。
groovy 中的一個列表中的數據可以是任意類型。這 java 下集合列表有些不同,java 下的列表是同種類型的數據集合。
groovy 列表可以嵌套列表。如 [1,2,[3,4,5],“aaa”] groovy 列表內置有反轉方法 reverse()。調用 List.reverse() 可以實現列表反轉。groovy 列表內置有排序方法 sort()。調用 List.sort() 可以實現列表排序。空列表表示為 [] 聲明一個空集合:
def list1 = [] def list2 = [1,2,3,4] list2.add(12) list2.add(12) println list1.size()
列表間的幾個常用方法:
1、添加:
def list1 = [100, 101] def list2 = [ 99,98,1] println list2.plus(list1) //輸出結果: [100, 101, 99, 98,1] // list2.plus(list1) 也可以寫成 list2 + list1
2、刪除:
def list1 = [12, 13] def list2 = [11, 2, 33, 12, 13, 16] println list2.minus(list1) //輸出結果: [11, 2, 33, 16] //list2.minus(list1) 也可以寫成 list2 - list1
在本章中,我們將討論 Groovy 中可用的列表方法。
序號 | 方法和描述 |
---|---|
1 | add() 將新值附加到此列表的末尾。 |
2 | contains() 如果此列表包含指定的值,則返回 true。 |
3 | get() 返回此列表中指定位置的元素。 |
4 | isEmpty() 如果此列表不包含元素,則返回 true |
5 | minus() 創建一個由原始元素組成的新列表,而不是集合中指定的元素。 |
6 | plus() 創建由原始元素和集合中指定的元素組成的新列表。 |
7 | pop() 從此列表中刪除最后一個項目 |
8 | remove() 刪除此列表中指定位置的元素。 |
9 | reverse() 創建與原始列表的元素相反的新列表 |
10 | size() 獲取此列表中的元素數。 |
11 | sort() 返回原始列表的排序副本。 |
Groovy中的XML支持
Groovy語言還提供了對XML語言的豐富支持。使用的兩個最基本的XML類是 -
-
XML標記構建器 - Groovy支持基於樹的標記生成器BuilderSupport,它可以被子類化以生成各種樹結構對象表示。通常,這些構建器用於表示XML標記,HTML標記。 Groovy的標記生成器捕獲對偽方法的調用,並將它們轉換為樹結構的元素或節點。這些偽方法的參數被視為節點的屬性。作為方法調用一部分的閉包被視為生成的樹節點的嵌套子內容。
-
XML解析器 - Groovy XmlParser類使用一個簡單的模型來將XML文檔解析為Node實例的樹。每個節點都有XML元素的名稱,元素的屬性和對任何子節點的引用。這個模型足夠用於大多數簡單的XML處理。
Groovy JMX
JMX是defacto標准,用於監控與Java虛擬環境有任何關系的所有應用程序。鑒於Groovy直接位於Java之上,Groovy可以利用已經為Java實現的大量工作。
監視JVM
可以使用java.lang.management中提供的標准類來執行JVM的監視。以下代碼示例說明如何完成此操作。
Groovy JSON
JSON功能
功能 | 庫 |
---|---|
JsonSlurper | JsonSlurper是一個將JSON文本或閱讀器內容解析為Groovy數據的類 結構,例如地圖,列表和原始類型,如整數,雙精度,布爾和字符串。 |
JsonOutput | 此方法負責將Groovy對象序列化為JSON字符串。 |
使用JsonSlurper解析數據
JsonSlurper是一個將JSON文本或閱讀器內容解析為Groovy數據結構的類,如地圖,列表和原始類型,如Integer,Double,Boolean和String。