最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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 寫(xiě)的,Groovy 語(yǔ)法與 Java 語(yǔ)法類似,Groovy 代碼能夠與 Java 代碼很好地結(jié)合,也能用于擴(kuò)展現(xiàn)有代碼。相對(duì)于 Java,它在編寫(xiě)代碼的靈活性上有非常明顯的提升,Groovy 可以使用其他 Java 語(yǔ)言編寫(xiě)的庫(kù)。

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

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

  • 開(kāi)發(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 的未來(lái)越來(lái)越多的使用 Groovy,甚至在用 Jira 跟蹤項(xiàng)目時(shí),背后也有 Groovy。實(shí)際上,就應(yīng)用場(chǎng)景而言,Java 開(kāi)發(fā)已經(jīng)有越來(lái)越多的 Groovy 出現(xiàn)在后臺(tái)了。而對(duì)于一般的應(yīng)用開(kāi)發(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ǔ)言。也就是說(shuō),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 方法,通過(guò)該方法可以傳遞參數(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開(kāi)頭的方法名并且
    println(time)
}

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

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)文章

  • 詳解Java8中接口的默認(rèn)方法和靜態(tài)方法

    詳解Java8中接口的默認(rèn)方法和靜態(tài)方法

    Java 8是Java語(yǔ)言的一個(gè)重要版本,其中引入了許多新特性和改進(jìn),其中一個(gè)值得關(guān)注的特性是接口的默認(rèn)方法和靜態(tài)方法,本文就來(lái)和大家簡(jiǎn)單講講吧
    2023-05-05
  • 舉例講解Java的Jackson庫(kù)中ObjectMapper類的使用

    舉例講解Java的Jackson庫(kù)中ObjectMapper類的使用

    這篇文章主要介紹了舉例講解Java的Jackson庫(kù)中ObjectMapper類的使用,Jackson庫(kù)通常被用來(lái)實(shí)現(xiàn)Java的對(duì)象和JSON之間的轉(zhuǎn)換功能,需要的朋友可以參考下
    2016-01-01
  • SpringBoot下RabbitMq實(shí)現(xiàn)定時(shí)任務(wù)

    SpringBoot下RabbitMq實(shí)現(xiàn)定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot下RabbitMq實(shí)現(xiàn)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 使用Feign實(shí)現(xiàn)微服務(wù)間文件傳輸

    使用Feign實(shí)現(xiàn)微服務(wù)間文件傳輸

    這篇文章主要為大家詳細(xì)介紹了使用Feign實(shí)現(xiàn)微服務(wù)間文件傳輸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • arthas在idea和docker中的應(yīng)用方式

    arthas在idea和docker中的應(yīng)用方式

    這篇文章主要介紹了arthas在idea和docker中的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-10-10
  • redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例

    redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例

    這篇文章主要介紹了redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式

    SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式

    這篇文章主要介紹了SpringBoot?MongoCustomConversions自定義轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java中的Timer和Timertask的關(guān)系解讀

    java中的Timer和Timertask的關(guān)系解讀

    本文詳細(xì)介紹了Java中的Timer和TimerTask類,包括它們之間的關(guān)系、API的使用方法、注意事項(xiàng)以及操作案例,Timer是一個(gè)調(diào)度器,而TimerTask是具體的任務(wù)類,Timer僅對(duì)應(yīng)一個(gè)線程,不保證任務(wù)執(zhí)行的精確性,但線程安全,一個(gè)Timer可以調(diào)度多個(gè)TimerTask
    2024-12-12
  • 優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu))

    優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu))

    這篇文章主要介紹了優(yōu)化Java虛擬機(jī)總結(jié)(jvm調(diào)優(yōu)),具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • IDEA部署jeesite3完美運(yùn)行教程詳解

    IDEA部署jeesite3完美運(yùn)行教程詳解

    這篇文章主要介紹了IDEA部署jeesite3完美運(yùn)行教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

新疆| 格尔木市| 新民市| 伊川县| 长治县| 彰武县| 福清市| 昌邑市| 德阳市| 兴和县| 中阳县| 嘉义县| 库尔勒市| 盐山县| 宣城市| 闻喜县| 嘉定区| 灵石县| 碌曲县| 陆川县| 友谊县| 杨浦区| 天气| 长武县| 郑州市| 曲阳县| 同仁县| 仙桃市| 龙井市| 右玉县| 龙门县| 铁岭县| 万州区| 河间市| 鄄城县| 广河县| 青田县| 六枝特区| 兴山县| 嘉义县| 襄垣县|