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

Groovy動態(tài)語言使用教程簡介

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

Groovy 簡介

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

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

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

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

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

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

Groovy 應(yīng)用

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

Groovy 與 Java

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

Groovy語法特性(相比于Java)

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

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

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

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ù)的鏈中需要用括號 
methodA "張三" methodB "李四" methodC() methodD "王五"

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

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

with語法(閉包實(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 這個引用
    it.set(Calendar.MONTH, Calendar.DECEMBER)
    // 可以省略it, 使用命令鏈
    set Calendar.DATE, 4
    set Calendar.YEAR, 2018
    // calendar.getTime()
    println(getTime())
    // 省略get, 對于get開頭的方法名并且
    println(time)
}

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

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)的對象引用列表
[] // 一個空列表
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動態(tài)語言使用教程簡介的詳細(xì)內(nèi)容,更多關(guān)于Groovy動態(tài)語言的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

    舉例講解Java的Jackson庫中ObjectMapper類的使用

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

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

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

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

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

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

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

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

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

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

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

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

    本文詳細(xì)介紹了Java中的Timer和TimerTask類,包括它們之間的關(guān)系、API的使用方法、注意事項(xiàng)以及操作案例,Timer是一個調(diào)度器,而TimerTask是具體的任務(wù)類,Timer僅對應(yīng)一個線程,不保證任務(wù)執(zhí)行的精確性,但線程安全,一個Timer可以調(diào)度多個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)),具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • IDEA部署jeesite3完美運(yùn)行教程詳解

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

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

最新評論

东港市| 黄陵县| 泰兴市| 江孜县| 济阳县| 岑溪市| 西林县| 团风县| 遂溪县| 丘北县| 集安市| 黄梅县| 邛崃市| 邻水| 三江| 河北区| 肃南| 神池县| 太湖县| 扬州市| 甘洛县| 宁蒗| 大化| 亚东县| 淮北市| 枣强县| 邢台县| 吉木萨尔县| 青冈县| 龙岩市| 清苑县| 梁平县| 关岭| 普安县| 泰兴市| 龙州县| 来凤县| 白沙| 当涂县| 吉水县| 阳春市|