用Groovy思考 第一章 用Groovy简化Java代码

简介: 1. Groovy的安装 目前Groovy的最新版本为2.1.2版,下载地址为:http://groovy.codehaus.org/Download下载后解压groovy-binary-2.1.2.zip到某个目录,然后设置GROOVY_HOME环境变量指向Groovy的解压目录。

1. Groovy的安装

目前Groovy的最新版本为2.1.2版,下载地址为: http://groovy.codehaus.org/Download

下载后解压groovy-binary-2.1.2.zip到某个目录,然后设置GROOVY_HOME环境变量指向Groovy的解压目录。

再设置PATH环境变量,添加%GROOVY_HOME%\bin。

要验证以上安装是否正确,在命令行方式,执行:
[java]   view plain copy print ?
  1. >groovy -v  
  2. Groovy Version: 2.1.2 JVM: 1.7.0_09 Vendor: Oracle Corporation OS: Windows 7  

表示Groovy安装成功。

2. Groovy的第一个例子

我们先写一个Java类Todo.java,内容如下:
[java]   view plain copy print ?
  1. import java.util.List;  
  2. import java.util.ArrayList;  
  3.   
  4.   
  5. public class Todo{  
  6.     private String name;  
  7.     private String note;  
  8.   
  9.   
  10.     public Todo(){}  
  11.   
  12.   
  13.     public Todo(String name, String note){  
  14.         this.name = name;  
  15.         this.note = note;  
  16.     }  
  17.   
  18.   
  19.     public String getName(){  
  20.         return name;  
  21.     }  
  22.   
  23.   
  24.     public void setName(String name){  
  25.         this.name = name;  
  26.     }  
  27.   
  28.   
  29.     public String getNote(){  
  30.         return note;  
  31.     }  
  32.   
  33.   
  34.     public void setNote(String note){  
  35.         this.note = note;  
  36.     }  
  37.   
  38.   
  39.     public static void main(String[] args){  
  40.         List todos = new ArrayList();  
  41.         todos.add(new Todo("1""one"));  
  42.         todos.add(new Todo("2""two"));  
  43.         todos.add(new Todo("3""three"));  
  44.   
  45.   
  46.         for(Todo todo : todos){  
  47.             System.out.println(todo.getName() + " " + todo.getNote());  
  48.         }  
  49.     }  
  50. }  

我们用javac编译它,用java运行它,一切正常。现在,我们把Todo.java改名为Todo.groovy,然后执行:
[java]   view plain copy print ?
  1. > groovy Todo.groovy  

我们会惊异地发现,与Java的执行结果一样。

结论:Groovy是兼容Java的。

运行Java持续有两步:用javac编译类文件,然后用java在JVM上执行编译后的字节码文件。
而Groovy是在运行时编译字节码文件,在开发中节省了编译这个步骤。


3. 用Groovy简化Java代码

下面,我们用Groovy简化JavaBean为GroovyBean。
[java]   view plain copy print ?
  1. import java.util.List;  
  2. import java.util.ArrayList;  
  3.   
  4.   
  5. public class Todo{  
  6.     String name;  
  7.     String note;  
  8.   
  9.   
  10.     public static void main(String[] args){  
  11.         List todos = new ArrayList();  
  12.         todos.add(new Todo(name:"1", note:"one"));  
  13.         todos.add(new Todo(name:"2", note:"two"));  
  14.         todos.add(new Todo(name:"3", note:"three"));  
  15.   
  16.   
  17.         for(Todo todo : todos){  
  18.             System.out.println(todo.name + " " + todo.note);  
  19.         }  
  20.     }  
  21. }  

执行结果仍然一样。

可见,
1)省略了JavaBean的getter和setter方法;
2)默认情况,所有的类属性都是public的;
3)构造函数很有特色,Map方式。

4. 用Groovy再进一步简化代码

[java]   view plain copy print ?
  1. public class Todo{  
  2.     String name  
  3.     String note  
  4.   
  5.   
  6.     public static void main(String[] args){  
  7.         def todos = new ArrayList()  
  8.         todos.add(new Todo(name:"1", note:"one"))  
  9.         todos.add(new Todo(name:"2", note:"two"))  
  10.         todos.add(new Todo(name:"3", note:"three"))  
  11.         for(Todo todo : todos)  
  12.             println "${todo.name} ${todo.note}"  
  13.     }  
  14. }  

执行结果仍然一样。
可见,
1)List和ArrayList省略了类型;
2)省略了分号;
3)打印语句省略了System.out。

5. 用Groovy再进一步省略main()函数

[java]   view plain copy print ?
  1. public class Todo{  
  2.     String name  
  3.     String note  
  4. }  
  5. def todos = [  
  6.     new Todo(name:"1", note:"one"),  
  7.     new Todo(name:"2", note:"two"),  
  8.     new Todo(name:"3", note:"three")  
  9. ]  
  10. todos.each{  
  11.     println "${it.name} ${it.note}"  
  12. }  

此代码在groovyconsole控制台运行正常。

看了以上内容,你们对Groovy有什么看法?下一节我们将介绍Groovy语言的关键特征。

目录
相关文章
|
2天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
24天前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
50 2
|
24天前
|
存储 Java API
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
94 2
|
1月前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
75 1
|
17天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
28 5
Java反射机制:解锁代码的无限可能
|
13天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
43 3
|
18天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
54 10
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
14天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
12天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别