精通 Groovy:Java 平台脚本入门指南
什么是 Groovy?
Apache Groovy 是面向对象、兼容 Java 语法、运行在 JVM 上的语言。编译为 Java 字节码,任何装有 Java 运行时环境的系统均可执行。Groovy 增加动态类型、闭包、DSL 支持、简洁语法,是 Java 理想伴侣而非替代品。
为什么用 Groovy?
- 动态、敏捷语言,原型开发快
- 与现有 Java 库无缝集成
- Java 开发者天然友好——学习曲线极低
- 代码比 Java 更简洁、表达力更强
- 可与 Java 自由混合——按需使用多少
Groovy 历史
- 2003 — Bob McWhirter & James Strachan 开发
- 2004 — 作为 JSR 241 起草(后废弃)
- 2005 — Jeremy Rayner & Guillaume Laforge 复兴
- 2007 — 1.0 发布
- 2012 — 2.0 发布
- 2014 — 2.3(支持 Java 8)
- 2015 — 成为 Apache 软件基金会项目
Groovy 关键特性
- 列表、映射、范围、正则的字面量语法
- 多方法与元编程能力
- 动态与可选静态类型
- 运算符重载、简洁语法(多场景无需分号、括号)
- 闭包与 MetaObject Protocol 赋能强大脚本
- 全兼容 Java 字节码与库
如何安装 Groovy
- 确保已装 Java — Java 安装指南
- 从 Groovy 下载页 下载安装程序
- 运行安装程序,选语言,点 OK
- 欢迎屏幕点 NEXT

- 接受许可条款

- 选安装组件点 NEXT

- 选安装目录点 NEXT

- 设开始菜单文件夹点 NEXT

- 完成安装(路径保持默认)点 NEXT

- 安装后从开始菜单启动 Groovy Console 验证

Groovy Hello World
Java 版:
public class Demo { public static void main(String[] args) { System.out.println("Hello World"); } }
Groovy 等价——单行:
println "Hello World."
Groovy 省去分号、括号、冗长的 System.out.println。
变量
Java 需显式类型:
public class Demo { public static void main(String[] args) { int x = 104; System.out.println(x); // x = "Guru99"; // 编译时报错 } }
Groovy 用 def 支持动态类型:
def x = 104 println x.getClass() x = "Guru99" println x.getClass()
输出:
class java.lang.Integer class java.lang.String
多行字符串用三重引号:
def x = """Groovy at Guru99""" println x
运算符
Groovy 支持常用类别:
- 算术:
+ - * / % - 关系:
== != < <= > >= - 逻辑:
&& || ! - 位运算:
& | ^ ~ - 赋值:
= += -= *= /= %=
循环
Java for 循环:
for (int i = 0; i <= 5; i++) { System.out.println(i); }
Groovy 等价写法:
0.upto(4) { println "$it" } 2.upto(4) { println "$it" } 5.times { println "$it" } 0.step(7, 2) { println "$it" }
决策结构
| 语句 | 描述 |
|---|---|
| if | 条件真时执行。 |
| if/else | 真执行真分支,否则执行 else 分支。 |
| nested if | 多条件分支。 |
| switch | 多路分支更清晰的替代方案。 |
| nested switch | Groovy 支持。 |
列表
列表是有序引用集合,用方括号定义。
- 字符串列表:
['Angular', 'Nodejs'] - 混合列表:
['Groovy', 2, 4.6] - 整数列表:
[16, 17, 18, 19] - 空列表:
[]
常用列表方法:
| 方法 | 描述 |
|---|---|
| add() | 末尾追加值。 |
| contains() | 值存在返回 true。 |
| get() | 索引处元素。 |
| isEmpty() | 列表为空返回 true。 |
| minus() | 返回移除指定元素的新列表。 |
| plus() | 返回添加指定元素的新列表。 |
| pop() | 移除最后元素。 |
| remove() | 移除索引处元素。 |
| reverse() | 返回反转列表。 |
| size() | 元素数量。 |
| sort() | 返回排序副本。 |
示例:
def y = ["Guru99", "is", "Best", "for", "Groovy"] println y y.add("Learning") println(y.contains("is")) println(y.get(2)) println(y.pop())
输出:
[Guru99, is, Best, for, Groovy] true Best Learning
映射
映射是键值对集合。
- 示例:
[Tutorial:'Java', Tutorial:'Groovy']— 键Tutorial对应两值。 - 空映射:
[]
映射方法:
| 方法 | 描述 |
|---|---|
| containsKey() | 检查键是否存在。 |
| get() | 返回键对应值。 |
| keySet() | 键集合。 |
| put() | 添加或替换键值对。 |
| size() | 条目数。 |
| values() | 值集合。 |
示例:
def y = [fName:'Jen', lName:'Cruise', sex:'F'] print y.get("fName")
输出:
Jen
闭包
闭包是作为对象处理的代码块,类似 lambda。
简单闭包:
def myClosure = { println "My First Closure" } myClosure()
带参数:
def sum = { a, b, c -> return a + b + c } println sum(1, 2, 3)
输出:
6
Groovy vs Java
| Groovy | Java |
|---|---|
| 默认访问修饰符 public。 | 默认包私有。 |
| 字段自动生成 getter/setter。 | 需手动定义。 |
| 双引号支持字符串插值。 | 无插值。 |
| 类型可选。 | 类型强制。 |
| 无需分号。 | 需分号。 |
每个脚本自动继承 Script 类。 | 执行需 public static void main。 |
常见误区
| 误区 | 现实 |
|---|---|
| Groovy 仅用于脚本。 | 用途广泛:Web 框架、数据处理等。 |
| Groovy 纯函数式。 | 借用函数概念但仍是 OOP 语言。 |
| Groovy 仅适合 TDD。 | 支持 TDD 但适用场景更多。 |
| Groovy 限于 Grails。 | Grails 是流行框架,但 Groovy 独立工作。 |
Groovy 缺点
- JVM 启动较慢,影响快速脚本。
- Java 生态外普及度低。
- 无 IDE 不便。
- 运行时性能可能落后 Java。
- 内存占用较高。
- Java 知识是高效使用前提。
Groovy 必备工具
- groovysh — 交互式命令行 shell。
- groovyConsole — 运行脚本的 Swing GUI。
- groovy — 命令行解释器执行脚本。
使用示例:
groovysh
- 交互式输入语句或整个脚本。
groovyConsole
- 编写运行 Groovy 代码的极简编辑器。
groovy
- 命令行运行 Groovy 脚本。
总结
- Groovy 是 Java 平台面向对象语言。
- 与 Java 库无缝集成。
- 核心特性:动态类型、闭包、字面量语法。
- 支持标准运算符、控制流、集合、映射。
- 自动生成 getter/setter、消除样板代码。
- 虽有性能权衡,生产力提升显著。
- groovysh、groovyConsole、groovy 解释器等工具简化开发。
java
- 树莓派避障机器人搭建指南:新手入门教程
- 金属制造入门:新手清晰指南
- 新手入门CNC雕刻机:以工业级精度轻松开启加工之旅
- PowerShell 入门到精通:强大脚本自动化完全指南
- C 语言入门到精通 PDF 教程:零基础自学全攻略(含 160+ 页实战案例)
- 精通 Java for 循环:语法、示例与最佳实践
- Java 数组教程:声明、创建、初始化与示例代码
- Java 栈与堆:内存分配实战指南
- Java for-each 循环:无计数器简化数组遍历
- Java 多线程详解:概念、生命周期与实战代码示例
- Java 判断阿姆斯特朗数(自幂数):for 循环与 while 循环实现
- Java 回文数判断:while 循环与 for 循环两种算法实现