网站首页 > 技术文章 正文
Groovy 是一种运行在 JVM(Java Virtual Machine)上的动态语言,兼具 脚本语言的灵活性 和 Java 语言的强大功能。它可以无缝与 Java 代码互操作,并且在构建脚本、DSL(领域特定语言)、测试以及 Web 开发中被广泛使用。
1. Groovy 语言特点
语法简洁
- 省略分号 ;,可以动态推断数据类型,减少代码冗余。
- 语法风格类似 Python 和 Ruby,同时兼容 Java。
与 Java 兼容
- 任何合法的 Java 代码都可以在 Groovy 中运行。
- Groovy 代码可以调用 Java 库,反之亦然。
强大的集合处理
- 提供更方便的 List、Map 处理方式,如 each、collect、findAll 等方法。
动态 & 静态类型
- 默认是动态类型语言,但可以通过 @CompileStatic 进行静态编译,提升性能。
DSL(领域特定语言)支持
- Groovy 允许创建 DSL 语法,如 Gradle 构建工具(基于 Groovy)。
2. Groovy 语法示例
(1)Hello, Groovy
println "Hello, Groovy!" // 输出 Hello, Groovy!
(2)变量与数据类型
def name = "Alice" // 使用 `def` 声明动态类型变量
int age = 25 // 也可以使用 Java 类型
println "姓名: $name, 年龄: $age"
(3)字符串操作
def firstName = "John"
def lastName = "Doe"
def fullName = "${firstName} ${lastName}" // GString(支持插值)
println fullName
// 多行字符串
def message = """
这是 Groovy 的多行字符串示例,
可以包含换行符!
"""
println message
(4)列表 & 集合
def numbers = [1, 2, 3, 4, 5]
println numbers[0] // 访问索引 0 的元素
println numbers.size() // 获取大小
numbers << 6 // 添加元素
println numbers
// 遍历列表
numbers.each { println it } // it 是 Groovy 的默认变量
(5)映射(Map)
def person = [name: "Tom", age: 30]
println person["name"] // 访问 key 为 "name" 的值
println person.age // 另一种访问方式
// 遍历 Map
person.each { key, value ->
println "$key: $value"
}
(6)条件判断
def num = 10
if (num > 5) {
println "大于 5"
} else {
println "小于等于 5"
}
// 三元运算符
def result = (num % 2 == 0) ? "偶数" : "奇数"
println result
(7)循环
// for 循环
for (i in 1..5) {
println i
}
// while 循环
def count = 0
while (count < 3) {
println "count: $count"
count++
}
(8)方法(函数)
def sayHello(String name) {
return "Hello, $name!"
}
println sayHello("Groovy")
(9)类 & 面向对象
class Person {
String name
int age
// 构造方法
Person(String name, int age) {
this.name = name
this.age = age
}
// 方法
def introduce() {
println "我是 $name,今年 $age 岁。"
}
}
// 创建对象
def p = new Person("Alice", 28)
p.introduce()
3. Groovy 在 Java 生态中的应用
①Gradle 构建工具
- Gradle 使用 Groovy 作为 DSL(领域特定语言),比 XML(如 Maven)更简洁。
plugins {
id 'java'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
②测试框架(Spock)
- Groovy 结合 Spock 进行单元测试,简洁优雅:
import spock.lang.Specification
class MySpec extends Specification {
def "测试加法"() {
expect:
1 + 1 == 2
}
}
③与 Java 互操作
- 在 Java 代码中调用 Groovy:
import groovy.lang.GroovyShell;
public class GroovyExample {
public static void main(String[] args) {
GroovyShell shell = new GroovyShell();
Object result = shell.evaluate("3 + 5");
System.out.println("Groovy 计算结果: " + result);
}
}
4. Groovy vs Java
特性 | Groovy | Java |
语法简洁度 | 更简洁 | 更冗长 |
运行环境 | JVM | JVM |
动态/静态 | 可动态 & 静态 | 仅静态 |
集合操作 | 内置高级操作 | 需要 Stream API |
DSL 支持 | 支持 | 不便 |
兼容性 | 100% 兼容 Java | - |
5. 总结
- Groovy 是 Java 生态的强大补充,语法简洁、灵活,适用于脚本、构建工具(如 Gradle)、DSL 开发、测试等场景。
- 兼容 Java,可以无缝调用 Java 代码,也可用于动态执行 Java 逻辑。
- 支持动态 & 静态,既能提高开发效率,也能通过静态编译优化性能。
猜你喜欢
- 2025-05-26 学习HackerOne上Flink、Grafana、jolokia攻击手法
- 2025-05-26 使用ANTLR开发自己的DSL语言(一)
- 2025-05-26 Spring技巧:深入研究Java 14和SpringBoot
- 2025-05-26 Nginx常见问题
- 2025-05-26 MyBatis系列-2-日志配置
- 2025-05-26 免费且好用的乐谱制作软件
- 2025-05-26 进阶版Python正则表达式大全,看到就赚到了
- 2025-05-26 让你把DeepSeek不借助插件装进WPS中 WPS接入DeepSeek人工智能
- 2025-05-26 在word中通过VBA调用百度翻译API在线翻译
- 2025-05-26 Java文件读取终极指南:4种方式对比与性能优化实战
- 08-03MySQL数据库的预处理详解
- 08-03《阿常·MySQL 70讲》全套教学视频
- 08-03隐式等待、显示等待和强制等待
- 08-03零基础C#上位机框架项目实例(完结篇)
- 08-03一文搞懂构建Web内容的技术
- 08-03西门子WINCC中的VBScript(VBS)常用于自动化脚本开发
- 08-03力控和sql2000之间的数据转储
- 08-03组态王|通过日历控件选择时间段查询历史报警
- 1521℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 624℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 527℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 461℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- htmlbackground-image (68)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)