上一篇咱們用文字介紹了 groovy 和 java 的不同和特有的特性,這一篇咱們就用代碼來闡述 Groovy 和 Java 的不同以及特有的特性.寫代碼之前需要來做一些準備工作,準備工作如下.
1 準備工作:
- 創(chuàng)建 Gradle Java 項目
- IntelliJ IDEA -> File->new->project->Gradle->Java->Next->寫GrounpId,ArtifactId,Version->選本地Gradle環(huán)境->寫項目名->Finish 項目創(chuàng)建完成.
- 打開 Groovy 控制臺: Tools->Groovy Console-> 直接寫 Groovy 代碼
有了以上的準備工作咱們就可以來書寫 Groovy 代碼了,接下咱們就來看下 Groovy 和 Java 的區(qū)別
2 Groovy 和 Java 的區(qū)別
以下咱們就通過定義 JavaBean 來說明 Groovy 和 Java 的不同之處.
2.1 Java 定義 JavaBean
class Student { private String name private String email private Integer age // 構造器 // getter setter…}
2.2 Groovy 定義 JavaBean
class Student { private String name private String email Integer age // 沒權限修飾符會自動生成 getter setter private String getName() { name // 可以省略return } private void setName(String name) { this.name = name } //可省略 getter setter 省略了 email 的 getter setter }
接下來咱們來看下在 Groovy 中如何操作 JavaBean
2.3 Groovy 中操作JavaBean
Groovy 可以做類,也可以做腳本,所以 咱們可以在類的后面直接寫操作JavaBean 的語句.如下
// class Student {…}// 外部可直接調用類的私有成員Student stu = new Student()stu.setName(\”小明\”)println \’私有getter方法:\’ stu.getName()// 使用點的方式操作字段stu.email = \’xiao@\’println \’點方式調用:\’ stu.email// 調用自動生成的 getter setter 方法stu.setAge(19)println \’調用自動生成getter,setter:\’ stu.getAge()// 自動生成具名構造器Student stu = new Student(name:\’willie\’,age:18)//Student stu = [name:\’willie\’,age:18] // 直接寫參數(shù)和值賦給對象,會自動設置字段值println stu.name \’:\’ stu.age \’:\’ stu.email// null 調用方法不報空指針異常stu.name = nullprintln stu.name.equals(\’ssss\’)
2.4 總結 groovy 與 Java 不同
- JavaBean 的定義
- 1). 可省略分號
- 2). 可省略 getter/setter
- 3). 可省略 return
- 4). 無權限修飾符自動生成 getter/setter
- 直接類外定義對象和調用字段
- 1). 可調用私有成員
- 2). 可使用點方式調用字段
- 3). 無權限修飾會自動生成 getter setter
- 4). 自帶具名構造器
- 空值使用不拋出空指針異常
以上就是 Groovy 和 Java 的比較,接下來咱們來看下 Groovy 的特有語法.
3 Groovy 的特有語法
Groovy 特有語法挺多的,以下咱們就挑一些比較特殊的語法來講解下.
3.1 基本語法
- 變量類型定義
- groovy 具有特有的弱類型聲明, 用 def 來代替所有類型,變量可不寫類型.建議帶 def,清晰
- assert 方法
- 使用 assert 方法做斷言
- 方法括號可省略
- 方法調用可以省略括號,前提是必須帶有參數(shù)的方法,不然會認為是屬性.
//變量聲明def name = \’willie\’age = 18// 帶參數(shù)方法調用可省略括號println name \’:\’ age// assert 斷言assert age == 19
3.2 字符串定義
字符串的定義有三種方式
- 單引號( ‘ ‘ ) : 普通字符串定義
- 雙引號( “ “ ) : 內容中可使用 ${} 引用變量值
- 三單引號(‘’’ ‘’’): 可按格式引入字符串,字符串可換行.
// 字符串使用 \’|\”|\’\’\’def str1 = \’willie\’ // 普通字符串定義def str2 = \”wolfcode:${str1}\” // 字符串內容中可引用變量def str3 = \’\’\’wolfcode: willie\’\’\’ // 可格式化定義字符串println str1 // willieprintln str2 // wolfcode:willieprintln str3 // wolfcode: // willie
3.3 集合定義和使用
所有操作兼容 Java 語法,以下咱們就來看下特有語法.
List 特有語法
- 聲明: 使用 [] 定義集合
- def list = [ele1,ele2,ele3]
- 添加: 使用 << 做元素添加
- list << ele4
- 類型: java.util.ArrayList
Map 特有語法
- 聲明: 使用[] key:value 的方式定義
- def map = [key1:value1,key2:value2]
- 添加: 使用.key 賦值方式
- map.key3 = value3
- 類型: java.util.LinkedHashMap
// list 集合,使用[] 定義集合def list = [\’willie\’,\’will\’,\’stef\’]list << \’AA\’ // List 元素特有添加方式list.add(\’BB\’)println list // [willie, will, stef, AA, BB]println list.getClass() // 使用的是 java.util.ArrayListprintln \”=========== Map 映射 ==============\”def map = [name:\’willie\’,age:18]map.wechat = \’cunge_weixin\’ // Map 元素特有添加方式map.put(\’aa\’,\’AA\’)println map // [name:willie, age:18, wechat:cunge_weixin, aa:AA]println map.getClass() // 使用的是 java.util.LinkedHashMap
4 閉包
4.1 閉包介紹
閉包是 Groovy 的重點知識點,閉包簡單理解就是 { } 括起來的代碼塊,跟方法類似,可帶參和不帶參.閉包可以賦給一個變量也可以當做參數(shù)值傳遞給一個方法,在方法中調用閉包.
4.2 閉包的定義格式
{ [param1,param2… ->] 執(zhí)行體}
4.3 閉包調用:
需要使用變量來接收再調用
def closure = {[param1,param2… ->] 執(zhí)行體}closure([param]) 或 closure.call([param])
4.4 代碼展現(xiàn)
定義帶參和不帶參閉包,作為方法的參數(shù)使用(Gradle 中使用 Groovy 閉包的方式)
// 不帶參閉包def c1 = { println \’hello\’}// 帶參閉包def c2 = { val -> // 指定閉包形參名 println \”hello ${val}\”}// 定義指定參數(shù)類型方法接收無參閉包def method1(Closure closure){ //closure() closure.call()}// 定義無指定參數(shù)類型方法接收帶參閉包def method2(clo){ //clo(\’willie\’) clo.call(\’willie\’)}method1(c1)method2(c2)
Groovy 的閉包在 Gradle 中起決定性作用,講這么久的 Groovy 主要是為了給 Gradle 做鋪墊,在每個Gradle 項目中都有一個 build.gradle 文件,此文件就是使用 Groovy 語言定義的項目構建腳本.此文件非常重要.所以,接下來…
你不會以為我要分析 build.gradle 吧,不分析! 下一篇 Gradle 項目搭建再分析,期待下一篇.
降龍十八掌… 佛山無影腳…
猴子偷桃 ~~~
…
我在下一篇 <<Gradle 項目搭建>> 等你喔~~
作者:叩丁狼教育黃少存
版權聲明:本文內容由互聯(lián)網用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至 舉報,一經查實,本站將立刻刪除。