1. 程式人生 > >Groovy基本使用(2):基本語法

Groovy基本使用(2):基本語法

Groovy 基本語法

Groovy 是一種動態型別的 JVM 敏捷開發語言,基本的語法和 Java 十分相似,很多關鍵字直接使用 Java 的關鍵字,如:import 匯入類,//、/**/ 標記註釋,使用和 Java 類似運算子 等等;

一個基本的示例

Helloworld.groovy
class HelloWorld {
    static void main(String[] args){
        println('Hello world ,Welcome to Groovy!');
    }
}

當然 groovy 可以直接以指令碼的形式編寫,如下:

test.groovy
def name = 'assad';
println "Hello ${name}";
println 'Welcome to groovy';
執行時候直接在控制檯定位到 test.groovy 目錄下,以如下方式啟動 groovy 指令碼
groovy test.groovy

匯入類

groovy 使用 import 關鍵字匯入類,其預設預先匯入的類如下:
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 內建以下的資料型別:byte、
short 、int、long、float、double、char、Boolean、String 
分別對應 Java 中的資料型別,同時還支援 Java 的基本型別的包裝型別,以及高精度計算型別 java.math.BigInteger,java.math.BigDecimal; 

變數

Groovy 中宣告變數的方式有2種,使用顯式宣告變數型別,或者使用 def 關鍵字宣告動態型別;
String str = 'are you ok';
int num = 12;
def str2 = 'are you ok?';
def num2 = 14;

println("str="+str+"num="+num+"str2="+str2+"num2="+num2);

運算子

Groovy 對以下運算子的支援同 Java :
  • 算術運算子:+  -  *  /  %  ++  --
  • 關係運算符:==  >=  <=  >  <  
  • 邏輯運算子:&&  ||  ! 
  • 位運算子:&  |  ^  ~  
  • 賦值運算子:+=  -=  *=  /=  (%)=  
同時 Groovy 還支援範圍運算子範圍是指定值序列的速記,範圍由序列中的第一個和最後一個值表示,Range可以是包含或排除。包含範圍包括從第一個到最後一個的所有值,而獨佔範圍包括除最後一個之外的所有值,可以把範圍物件看成一個有序元素主程的列表:
1..10 - 包含範圍的示例
1 .. <10 - 獨佔範圍的示例
'a'..'x' - 範圍也可以由字元組成
10..1 - 範圍也可以按降序排列
'x'..'a' - 範圍也可以由字元組成並按降序排列。
這些範圍運算子主要用在定義一個有序序列(可以用在迴圈控制等地方),如下示例:
String str = 'are you ok';
int num = 12;
def str2 = 'are you ok?';
def num2 = 14;

println("str="+str+"num="+num+"str2="+str2+"num2="+num2);

這些範圍運算子產生的物件支援以下方法:
contains()檢查範圍是否包含特定值
get()返回此範圍中指定位置處的元素
getFrom()獲得此範圍的下限值
getTo()獲得此範圍的上限值
isReverse()判斷該範圍是否是一個反向的範圍
size()返回此範圍的元素數
subList()返回此指定的fromIndex(包括)和toIndex(排除)之間的此範圍部分的檢視
控制流
Groovy 的判斷語句語法 if,if else,switch ,迴圈語句 while,for,for-in,迴圈控制語句 break,continue 語法同 Java 中的一致;其中 for-in 可以搭配範圍型別使用,代替列表迴圈傳統的for結構;

列表 List

Groovy 中,List儲存了一系列物件的引用,類似 Java,使用整數作為索引;使用 [ ] 來表示列表,有以下這些表示:
[11,12,13,14] - 整數值列表
['Angular','Groovy','Java'] - 字串列表
[1,2,[3,4],5] - 巢狀列表
['Groovy',21,2.11] - 異構的物件引用列表
[] - 一個空列表
基本的使用如下:
def list = [1,2,3,4,5];
println(list);    //output:[1, 2, 3, 4, 5]
println(list.get(1));
list.add(6);
list.set(3,7)
列表物件支援的方法如下:
add()將新值附加到此列表的末尾
get()返回此列表中指定位置的元素
set()設定列表中指定位置的元素值
contains()如果此列表包含指定的值,則返回true
isEmpty()如果此列表不包含元素,則返回true
remove()刪除此列表中指定位置的元素
pop()從此列表中刪除最後一個專案
reverse()建立與原始列表的元素相反的新列表
size()獲取此列表中的元素數
sort()返回原始列表的排序副本(升序)

對映 Map

對映(關聯陣列)是物件引用的無序集合。Map集合中的元素由鍵值訪問。 Map中使用的鍵可以是任何類,同樣使用 [ ] 表示對映,一些表示如下:
['TopicName':'Lists','TopicName':'Maps'] - 具有TopicName作為鍵的鍵值對的集合及其相應的值。
[:] - 空對映
支援的常用方法如下:
containsKey()判斷此Map是否包含指定key
get()查詢此Map中的 key 並返回相應的 value。如果此對映中沒有鍵的條目,則返回null
keySet()獲取此Map中的所有Key組成的Set
put()將指定的 Value 與此 Map 中的指定 Key 相關聯。如果此對映先前包含此鍵的對映,則舊值將替換為指定的值
size()返回此Map 中的 key-value 對映的數量
values()獲取此Map中的所有 value 組成的Set

字串

Groovy 對於字串的引用,可以使用 "string",'string',"""string""" 這3中方式;“”和 ' ' 的區別類似於 PHP,' ' 用於引用純字面量的字串," " 除了可以引用純字面量的的字串外,還可以引用模板引擎,一個簡單的示例如下:
def str1 = "Hello!";
def str2 = "${str1} welcome to groovy!" ;
println(str1);    //output: Hello!
println(str2);    //output: Hello! welcome to groovy!
""" 可以用於引用跨行的字面量:
def str = """are you ok,
             my friend ?
             welcome to groovy!""";
Groovy 對於字串變數可以才採用類似C++的方式,進行字串索引,同時對於索引值支援 range 範圍型別,如下:
def str1 = "Are you ok?";
def ch = str1[0];    //ch = "A";
def ch2 = str1[2];   //ch2 = "e";
def subStr = str1[0..2]; //subStr = "Are"
Groovy 字串的方法基本類似於Java String類的方法;Groovy 字串提供了 ==~ 運算子用於正則表示式的匹配,示例的用法如下:
def regix = '.*oo.*';       //正則表示式字串
def str = 'groovy'          //待匹配的字串
Boolean result = str ==~ regix;    //result = true;

方法

Groovy 的方法宣告和呼叫基本類似於 Java,不過 Groovy 方法返回型別可以設定為 def,引數型別可以不用宣告,修飾符不宣告預設為public ;
int sum(int num1,int num2 ){    //groovy完全支援Java一樣的方法宣告
    return num1 + num2;
}
def sum(num1,num2){       //動態型別的宣告
    return num1 + num2;
}
groovy 方法還支援預設引數
def sum(num1 = 1,num2 = 2){      
    return num1 + num2;
}

static main(String[] args){
    println(sum(4,4));  //output: 8
    println(sum());    //output: 3
}

物件

groovy 對於物件的語法同 Java 基本一致,同樣使用 class 關鍵字標記類,使用 interface 標記介面,使用 implements 標記繼承介面,使用 extends 標記繼承類,使用 abstract 標記抽象類;不過有一點不同,groovy 預設的修飾符為 public 即全公開,非 Java 的包內公開;groovy 對於泛型支援的語法也和 Java 中的一樣;

異常處理

groovy 支援和 Java 一樣的異常處理語法:try,catch,finally,支援 Java 中的 Throwable 異常類;