Groovy和Java

createh52周前 (05-13)技术教程3

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

相关文章

1.3、Java运算符全解析

在Java编程语言中,**运算符(Operators)**是用于执行特定操作的符号。它们可以操作一个或多个操作数,并根据其功能返回结果。本文将详细介绍Java中的各种运算符及其使用方法。一、算术运算符...

Java并发工具:LongAdder

LongAdder 是 Java 中 java.util.concurrent.atomic 包下的一个类,从 Java 8 开始引入。它是一个可伸缩的并发累加器,适用于高并发场景下对长整型(long...

Java BigDecimal类型的 加减乘除运算和比较

加法:add 减法:subtract 乘法:multiply 除法:divideBigDecimal bd1 = new BigDecimal("15"); BigDecimal bd...

Java并发工具:LongAccumulator

LongAccumulator 是 Java 中 java.util.concurrent.atomic 包下的一个类,和 LongAdder 一样从 Java 8 引入。它是一个支持自定义累加函数的...

总结一下Java中的运算符

对于Java来说,运算符有:算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符等。运算符是一种符号,当连接不同的操作数的时候,会实现特殊的功能。算术运算符Java中的算术运算符有:+:加法运算,...

Atomic升级Adder在升级Accumulator类

Java架构师专题并发编程专题-CAS原理(节选):Atomic升级Adder在升级Accumulator类。它还有一个叫Accumulator的类。Accumulator是针对ada类的增强版,因为...