欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Groovy動(dòng)態(tài)語(yǔ)言使用教程簡(jiǎn)介

 更新時(shí)間:2022年09月06日 15:22:32   作者:mvnbook  
這篇文章主要為大家介紹了Groovy動(dòng)態(tài)語(yǔ)言使用教程簡(jiǎn)介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Groovy 簡(jiǎn)介

Groovy 是構(gòu)建在 JVM 上的一個(gè)輕量級(jí)卻強(qiáng)大的動(dòng)態(tài)語(yǔ)言,它結(jié)合了 Python、Ruby 和 Smalltalk 的許多強(qiáng)大的特性。 Groovy 就是用 Java 寫的,Groovy 語(yǔ)法與 Java 語(yǔ)法類似,Groovy 代碼能夠與 Java 代碼很好地結(jié)合,也能用于擴(kuò)展現(xiàn)有代碼。相對(duì)于 Java,它在編寫代碼的靈活性上有非常明顯的提升,Groovy 可以使用其他 Java 語(yǔ)言編寫的庫(kù)。

Groovy 是增強(qiáng) Java 平臺(tái)的唯一的腳本語(yǔ)言。它提供了類似于 Java 的語(yǔ)法,內(nèi)置映射(Map)、列表(List)、方法、類、閉包(closure)以及生成器。腳本語(yǔ)言不會(huì)替代系統(tǒng)編程語(yǔ)言,兩者是相互補(bǔ)充的。

系統(tǒng)編程語(yǔ)言的目的:

  • 開發(fā)復(fù)雜的算法或者數(shù)據(jù)結(jié)構(gòu)
  • 實(shí)現(xiàn)計(jì)算密集型應(yīng)用
  • 操作大型數(shù)據(jù)集
  • 實(shí)現(xiàn)定義良好的、變更緩慢的需求

腳本語(yǔ)言應(yīng)用的目的:

  • 連接已有的組件
  • 處理經(jīng)常變化的多種類型的實(shí)體
  • 具有圖形化用戶界面
  • 擁有快速變化的功能

Groovy 應(yīng)用

大名鼎鼎的 Gradle,背后是 Groovy。Spring 的未來越來越多的使用 Groovy,甚至在用 Jira 跟蹤項(xiàng)目時(shí),背后也有 Groovy。實(shí)際上,就應(yīng)用場(chǎng)景而言,Java 開發(fā)已經(jīng)有越來越多的 Groovy 出現(xiàn)在后臺(tái)了。而對(duì)于一般的應(yīng)用開發(fā),只要能用 Java 就都能用到 Groovy,唯一的難點(diǎn)只在于能不能招到足夠的人員。

Groovy 與 Java

Java 編譯器會(huì)產(chǎn)生可以在 Java 虛擬機(jī)上運(yùn)行的字節(jié)碼。Groovy 類和 Java 是二進(jìn)制兼容的。Groovy 編譯器產(chǎn)生的字節(jié)碼與 Java 編譯器產(chǎn)生的字節(jié)碼是完全一樣的。對(duì)于 JVM 而言,Groovy 和 Java 是完全一樣的。因此,Groovy 能夠完全使用各種 Java API。Groovy 是一門面向?qū)ο蟮恼Z(yǔ)言。也就是說,Groovy 中每一個(gè)事物最終都會(huì)被當(dāng)做某些類的一個(gè)實(shí)例對(duì)象。

Groovy語(yǔ)法特性(相比于Java)

Groovy 編譯器產(chǎn)生的字節(jié)碼與 Java 編譯器產(chǎn)生的字節(jié)碼是完全一樣的。對(duì)于 JVM 而言,Groovy 和 Java 是完全一樣的。因此,Groovy 能夠完全使用各種 Java API。

  • 不需要分號(hào)
  • return 關(guān)鍵字可省略,方法的最后一句表達(dá)式可作為返回值返回 (視具體情況使用, 避免降低可讀性)
  • 類的默認(rèn)作用域是public,不需要getter/setter方法
  • def 關(guān)鍵字定義的變量類型都是Object,任何變量、方法都能用def定義/聲明,在 Groovy 中一切都是對(duì)象
  • 導(dǎo)航操作符 ( ?. )可幫助實(shí)現(xiàn)對(duì)象引用不為空時(shí)方法才會(huì)被調(diào)用
// java
if (object != null) {
    object.getFieldA();
}
// groovy
object?.getFieldA()

強(qiáng)大命令鏈功能。Groovy 可以使你省略頂級(jí)語(yǔ)句方法調(diào)用中參數(shù)外面的括號(hào)。命令鏈功能則將這種特性繼續(xù)擴(kuò)展,它可以將不需要括號(hào)的方法調(diào)用串接成鏈,既不需要參數(shù)周圍的括號(hào),鏈接的調(diào)用之間也不需要點(diǎn)號(hào)

def methodA(String name) {
    println("A: " + name)
    return this
}
def methodB(String name) {
    println("B: " + name)
    return this
}
def methodC() {
    println("C")
    return this
}
def methodD(String name) {
    println("D: " + name)
    return this
}
methodA("張三")
methodB("李四")
methodC()
methodD("王五")
// 不帶參數(shù)的鏈中需要用括號(hào) 
methodA "張三" methodB "李四" methodC() methodD "王五"

閉包。閉包是一個(gè)短的匿名代碼塊。每個(gè)閉包會(huì)被編譯成繼承 groovy.lang.Closure 類的子類,這個(gè)類有一個(gè)叫 call 方法,通過該方法可以傳遞參數(shù)并調(diào)用這個(gè)閉包。

def hello = {println "Hello World"}
hello.call()
// 包含形式參數(shù)
def hi = {
    person1, person2 -> println "hi " + person1 + ", "+ person2
}
hi.call("張三", "李四")
// 隱式單個(gè)參數(shù), 'it'是Groovy中的關(guān)鍵字
def hello = {
    println("hello, " + it)
}
hello.call("王五")

with語(yǔ)法(閉包實(shí)現(xiàn))

// Java
public class JavaDeamo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH, Calendar.DECEMBER);
        calendar.set(Calendar.DATE, 4);
        calendar.set(Calendar.YEAR, 2018);
        Date time = calendar.getTime();
        System.out.println(time);
    }
}
// Groovy
Calendar calendar = Calendar.getInstance()
calendar.with {
    // it 指 calendar 這個(gè)引用
    it.set(Calendar.MONTH, Calendar.DECEMBER)
    // 可以省略it, 使用命令鏈
    set Calendar.DATE, 4
    set Calendar.YEAR, 2018
    // calendar.getTime()
    println(getTime())
    // 省略get, 對(duì)于get開頭的方法名并且
    println(time)
}

數(shù)據(jù)結(jié)構(gòu)的原生語(yǔ)法,寫法更便捷

def list = [11, 12, 13, 14] // 列表, 默認(rèn)是ArrayList
def list = ['Angular', 'Groovy', 'Java'] as List // 字符串列表
// 同list.add(8)
list << 8
[1, 2, [3, 4], 5] // 嵌套列表
['Groovy', 21, 2.11] // 異構(gòu)的對(duì)象引用列表
[] // 一個(gè)空列表
def set = ["22", "11", "22"] as Set // LinkedHashSet, as運(yùn)算符轉(zhuǎn)換類型
def map = ['TopicName': 'Lists', 'TopicName': 'Maps'] // map, LinkedHashMap
[:] // 空map
// 循環(huán)
map.each {
    print it.key
}

以上就是Groovy動(dòng)態(tài)語(yǔ)言使用教程簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于Groovy動(dòng)態(tài)語(yǔ)言的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Jmeter邏輯控制器事務(wù)控制器使用方法解析

    Jmeter邏輯控制器事務(wù)控制器使用方法解析

    這篇文章主要介紹了Jmeter邏輯控制器事務(wù)控制器使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 動(dòng)態(tài)代理模擬實(shí)現(xiàn)aop的示例

    動(dòng)態(tài)代理模擬實(shí)現(xiàn)aop的示例

    下面小編就為大家?guī)硪黄獎(jiǎng)討B(tài)代理模擬實(shí)現(xiàn)aop的示例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望對(duì)大家有所幫助
    2017-11-11
  • Spring HttpMessageConverter的作用及替換解析

    Spring HttpMessageConverter的作用及替換解析

    這篇文章主要介紹了Spring HttpMessageConverter的作用及替換解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn)

    JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn)

    JVM啟動(dòng)時(shí)分配的內(nèi)存稱為堆內(nèi)存,與之相對(duì)的,在代碼中還可以使用堆外內(nèi)存,比如Netty,廣泛使用了堆外內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于JVM分配和回收堆外內(nèi)存的方式與注意點(diǎn),需要的朋友可以參考下
    2022-07-07
  • spring boot封裝HttpClient的示例代碼

    spring boot封裝HttpClient的示例代碼

    這篇文章主要介紹了spring boot封裝HttpClient的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java多線程優(yōu)化方法及使用方式

    Java多線程優(yōu)化方法及使用方式

    這篇文章主要介紹了Java多線程優(yōu)化方法及使用方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • tk.mybatis通用插件updateByPrimaryKeySelective無法自動(dòng)更新列的解決辦法

    tk.mybatis通用插件updateByPrimaryKeySelective無法自動(dòng)更新列的解決辦法

    tk.mybatis是一個(gè)很好用的通用插件,本文主要介紹了tk.mybatis通用插件updateByPrimaryKeySelective無法自動(dòng)更新列的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Datagram Scoket雙向通信

    Datagram Scoket雙向通信

    這篇文章主要介紹了Datagram Scoket雙向通信,需要的朋友可以參考下
    2014-04-04
  • 基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁(yè)查詢

    基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁(yè)查詢

    這篇文章主要介紹了基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁(yè)查詢,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-07-07
  • Java?Hibernate中一對(duì)多和多對(duì)多關(guān)系的映射方式

    Java?Hibernate中一對(duì)多和多對(duì)多關(guān)系的映射方式

    Hibernate是一種Java對(duì)象關(guān)系映射框架,支持一對(duì)多和多對(duì)多關(guān)系的映射。一對(duì)多關(guān)系可以使用集合屬性和單向/雙向關(guān)聯(lián)來映射,多對(duì)多關(guān)系可以使用集合屬性和中間表來映射。在映射過程中,需要注意級(jí)聯(lián)操作、延遲加載、中間表的處理等問題
    2023-04-04

最新評(píng)論