Groovy和Java
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 逻辑。
- 支持动态 & 静态,既能提高开发效率,也能通过静态编译优化性能。