數據類型:groovy支持Java語言規范定義的數據類型
類:與Java類的主要區別
1、沒有可見修飾符的類或者方法是自動公開的
2、類不需要與源文件定義相同名稱,但是默認規定定義一樣
3、一個源文件包含一個或者多個類,但是如果文件包含不再類中的任何代碼將視為腳本
4、腳本只是具有一些特殊約定的類
5、不要在腳本中定義與腳本源文件相同名稱的類定義
6、必須用abstract關鍵字修飾抽象方法和類
7、可以使用as運算符使對象的實例在運行時實現接口
/** * Created by Jxy on 2018/12/21 7:43 * 三種構造函數的使用 * Groovy方法、參數 */ class PersonConstructor { String name Integer age PersonConstructor(name, age) { this.name = name this.age = age } } def person1 = new PersonConstructor('Marie', 1) def person2 = ['Marie', 2] as PersonConstructor PersonConstructor person3 = ['Marie', 3] /* 方法基本的定義 */ def someMethod() { 'method called' }//聲明沒有返回值類型並且沒有參數的方法 String anotherMethod() { 'another method called' }//具有顯式返回類型且無參數的方法 def thirdMethod(param1) { "$param1 passed" }//沒有定義類型的參數的方法 static String fourthMethod(String param1) { "$param1 passed" }//帶String參數的靜態方法 /* 方法的命名參數 */ def foo(Map args) { "${args.name}: ${args.age}" } def string = foo(name: 'Marie', age: 1) println(string)//Marie: 1 /* 方法參數混合命名和位置參數 Mixing named and positional parameters map必須放在參數第一個位置不然會報異常:groovy.lang.MissingMethodException */ def foo(Map args, Integer number) { "${args.name}: ${args.age}, and the number is ${number}" } foo(name: 'Marie', age: 1, 23) foo(23, name: 'Marie', age: 1) /* 如果map沒有在第一個參數位置則應該使用顯示map參數替換命名參數 */ def foo(Integer number, Map args) { "${args.name}: ${args.age}, and the number is ${number}" } foo(23, [name: 'Marie', age: 1]) /* 默認參數 */ def foo(String par1, Integer par2 = 1) { [name: par1, age: par2] } assert foo('Marie').age == 1 /* 可變參數 可變參數與重載 */ def foo(Object... args) { 1 } def foo(Object x) { 2 } assert foo() == 1 assert foo(1) == 2 assert foo(1, 2) == 1