Groovy使用系列-入门

330 阅读2分钟

Groovy使用系列-安装配置

The Apache Groovy programming language (groovy-lang.org)

Groovy 是什么?

Apache Groovy 是一种功能强大、可选类型化和动态的语言,具有静态类型化和静态编译功能,Java 平台旨在通过简洁、熟悉和易于学习的语法提高开发人员的生产力。它与任何 Java 程序顺利集成,并立即向应用程序提供强大的功能,包括脚本功能、领域特定语言编写、运行时和编译时元编程和函数式编程。

  • 简单易学
简洁、易读、易表达的语法,易于 Java 开发人员学习
  • 与java集成方便
与 Java 和任何第三方库无缝、透明地集成和互操作
  • 丰富的生态圈
Web 开发、反应式应用程序、并发/异步/并行库、测试框架、构建工具、代码分析、 GUI 构建
  • 脚本化及测试便捷
非常适合编写简洁和可维护的测试,以及所有的构建和自动化任务
  • DSL(领域模型语言)
灵活和可延展的语法,先进的集成和定制机制,以集成可读的业务规则在您的应用程序
  • 强大的功能特性
闭包、构建器、运行时和编译时元编程、函数式编程、类型推断和静态编译

为什么用Groovy?

  • 对于java开发者,可以非常方便的上手
  • Groovy 是一种敏捷和动态的语言、脚本化(类似Python,ruby等),简化及方便开发

groovy 安装

  • 1 下载groovy

The Apache Groovy programming language - Download

groovy与JVM的版本对应关系 image.png

    1. 安装

groovy环境变量配置

环境变量配置:
GROOVY_HOME: groovy软件解压目录
path环境变量追加
GROOVY_HOME/bin: path上配置可执行目录

groovy安装校验

groovy --version
#表示已经安装配置成功
#Groovy Version: 4.0.8 JVM: 1.8.0_201 Vendor: Oracle Corporation OS: Windows 10

#进入groovy提供的命令行进行操作
groovysh

#groovy提供的简单的ide工具
groovyConsole

#groovy 命令执行脚本文件

groovy 入门

  • 默认包import引入
java.io.*
java.lang.*
java.math.BigDecimal
java.math.BigInteger
java.net.*
java.util.*
groovy.lang.*
groovy.util.*
  • 多方法重载
  • 数组初始化
# groovy 数组申明
int[] array = [1, 2, 3]
# groovy3+
def array2 = new int[] {1, 2, 3} 
  • String
# Gtring :  "" 支持${xxx}读取变量,如果变量不存在报错

# String '' 不支持变量${xxx},将字符串原样输出

# String ''' 多行字符串 ''' 不支持变量的解析
  • 额外关键字
`as`
`def`
`in`
`trait`
`it` // within closures(闭包中使用)

groovy 开发包(GDK)基本使用

package com.groovy.demo

import java.time.LocalDate
import java.time.OffsetTime

// Groovy Development Kit 工具包相关API使用
文件操作
def basepath='xxxx'
new File(basepath, 'test.groovy').eachLine { line ->
    println line
}

//集合操作

def list1 = [1, 2, 3, 4];
printf(list1.get(2) as String)
assert list1 instanceof List

list1.each {
    //it:闭包的变量
    printf("$it")
}

printf("\n-------------\n")

//map 使用
def key = 'test'
//在map中使用变量为空key 使用时, (key):表示使用变量
def usermap = [id: 1001, name: 'mj', key: 'test', (key): 'test']
println(usermap.get("name"))
println(usermap.get("key"))
println(usermap.get("test"))
//数据操作
usermap.put('sex', "man")
usermap.remove("id")
//循环遍历数据
usermap.each { entry ->
    println("key:$entry.key=$entry.value")
}

//range,连续的序列生成
/**
 * ..
 * <..:不包含左
 * ..<:不包含右
 * <..<:左、右不包含
 */
def rang = 1..10
def rg = 'A'..'Z'
rang.each { it ->
    println("data:${it}")
}
rg.each { it ->
    println("字符:${it}")
}
//时间操作
def date = LocalDate.now()
println("$date")
//format,parse
def offsetTime = OffsetTime.parse('09:47:51-1234', 'HH:mm:ssZ')
println("$offsetTime")