基本語法 1.Grovvy的註釋分為//和/**/和java的一樣. 2.Grovvy語法可以不已分號結尾. 3.單引號,裡面的內容嚴格的對應java中的String,不對$符號進行轉義. 4.雙引號“ ”的內容中如果有$號的話,會先對錶達式先求值. 5.三個引號中的字元串支持隨意的換行. 定義變數 ...
3.單引號,裡面的內容嚴格的對應java中的String,不對$符號進行轉義.
def s1 = 'i am a student $'
println s1
i am a student $
4.雙引號“ ”的內容中如果有$號的話,會先對錶達式先求值.
def age = 100
def s2 = "他已經 $age 歲了"
println(s2)
他已經 100 歲了
5.三個引號中的字元串支持隨意的換行.
def s3 = '''
x
y
z
'''
println(s3)
x
y
z
def a = 1
def b = "我是誰"
def double = 1.0
def fun(){
}
fun()
def fun1(def1,def2){
println def1+" &&"+def2
}
fun1(1,2)
String fun2(){
return "返回值"
}
println fun2()
def getSomething(){
"我是誰"
1000
}
println getSomething()
1.無返回類型的函數定義,必須使用def關鍵字 ,最後一行代碼的執行結果就是本函數的返回值
2.如果指定了函數返回類型,則可不必加def關鍵字來定義函數
def t1 = null
assert t1
斷言變數的長度
def t2 = "ab3"
assert t2.size() >3
1.如果斷言發生,斷言後面的代碼無法執行
for (i=0;i<5;i++){ println i }
方式二
for(i in 0..5){
println i
}
其它
for(i in 0..<5){ println ("hello world") }
4.times {
println it
}
def name = 'd'
def result = name=='d'?'cc':"abc"
println result
try {
5/0
}catch(Exception e){
e.printStackTrace()
}
age = 36
def rate
switch (age){
case 10..26:
rate = 0.05
break
case 27..36:
rate = 0.06
break
case 37..46:
rate = 0.07
break
default:
throw new IllegalArgumentException()
}
println rate
Person person
println person?.Data?.name
def g1 = '1'
def f1= g1 as int
def f2 = g1.asType(Integer)
println f2
-
一個是Java中的基本數據類型。
-
另外一個是Groovy中的容器類。
-
最後一個非常重要的是閉包。
def boolean b1 = true
println b1
def int b2 = 100
def String b3 = "hello world"
if(b1){
println "hello world"
}
List:鏈表,其底層對應Java中的List介面,一般用ArrayList作為真正的實現類。
Map:鍵-值表,其底層對應Java中的LinkedHashMap。
Range:範圍,它其實是List的一種拓展。
List
def aList = [5,'string',false]
println aList
println aList[0]
println "集合的長度:"+aList.size()
aList[10] = 'sss'
println aList
[5, string, false]
5
集合長度:3
[5, string, false, null, null, null, null, null, null, null, 'sss']
集合長度:11
map
def map = [key1:"value1",key2:"value2",key3:"value3"]
println map
println "map的長度:"+map.size()
println map.keySet()
println map.values()
println map.key1
println map.get("key1")
map.put("key4","value4")
println map.entrySet()
Iterator it = map.iterator()
while(it.hasNext()){
println "遍歷map:"+it.next()
}
map.containsKey("key1")
map.containsValue("values1")
map.clear()
Set set = map.keySet()
def range = 1..5
println range
println "長度:"+range.size()
println "迭代器:"+range.iterator()
println "獲取標號為1的元素:" +range.get(1)
println "是否包含元素5:"+range.contains(5)
println "最後一個元素:"+range.last()
//println "移除標號為1的元素:"+range.remove(1)
//清空列表
//range.clear()
println "第一個數據:"+range.from
println "最後一個數據:"+range.to
模板
def xxx = {paramters -> code}
//或者
def xxx = {無參數,純code}
def fun1 = {
p1 ->
def s = "我是一個閉包,"+ p1
}
println(fun1.call())
println(fun1.call("我是一個參數"))
println fun1("我是參數2")
閉包沒定義參數的話,則隱含有一個參數,這個參數名字叫it,和this的作用類似。it代表閉包的參數。
def fun2 = {
it -> "abcd"
}
println fun2.call()
如果在閉包定義時,採用下麵這種寫法,則表示閉包沒有參數!
def fun3 = {
-> "cccc"
}
println fun3.call()
def list = [1,2,3]
list.each {
println it
}
1
2
3
each函數調用的圓括弧不見了!原來,Groovy中,當函數的最後一個參數是閉包的話,可以省略圓括弧。比如:
def fun5(int a1,String b1,Closure closure){
closure()
}
fun5(5,"test",{
println "i am in closure"
})
以後這樣代碼會比較多:
task hello{
doLast{
println("hello world")
}
}
案列1:
//字元串與閉包的結合使用
String str2 = 'the 2 and 4 is 6'
//each
str2.each {
String temp ->println temp
}
//find來查找符合條件的第一個
println str2.find{
String s -> s.isNumber()
}
//findAll
def sList = str2.findAll{
String s1 -> s1.isNumber()
}
println sList
//any
def result = str2.any{
String s -> s.isNumber()
}
println result
//collect
def list2 = str2.collect {
it.toUpperCase()
}
println list2.toListString()
public class Person{
def String name;
def int age;
String getName() {
return name
}
void setName(String name) {
this.name = name
}
int getAge() {
return age
}
void setAge(int age) {
this.age = age
}
@Override
String toString() {
return "Person{"+
"name='"+name+'\''+
",age=" + age+
'}';
}
}
Person person = new Person()
person.setName("Test")
person.setAge(20)
println(person.toString())