用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语言的关键特征。

目录
相关文章
|
3天前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
19 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
6天前
|
Java 数据处理 开发者
Java中的Lambda表达式:简化你的代码之路
【8月更文挑战第66天】Lambda表达式在Java 8中首次引入,它为Java开发者提供了一种更简洁、更灵活的编程方式。本文将通过简单易懂的语言和实际代码示例,引导你理解Lambda表达式的基本概念、语法结构以及如何在Java项目中应用它来简化代码。无论你是Java新手还是有经验的开发者,这篇文章都将帮助你更好地掌握这一强大的工具。
34 11
|
3天前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
10 2
|
23天前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
2天前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
21 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
3天前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
14 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
3天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
23 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
13天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
33 5
|
15天前
|
Java API 开发者
探索Java中的Lambda表达式:简洁与强大的代码实践
本文深入探讨Java中Lambda表达式的定义、用法及优势,通过实例展示其如何简化代码、提升可读性,并强调在使用中需注意的兼容性和效率问题。Lambda作为Java 8的亮点功能,不仅优化了集合操作,还促进了函数式编程范式的应用,为开发者提供了更灵活的编码方式。
|
11天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码之旅##
【8月更文挑战第62天】 Java 8的发布为开发者带来了诸多新特性,其中最引人注目的无疑是Lambda表达式。这一特性不仅让代码变得更加简洁,还极大地提升了开发的效率。本文将通过实际示例,展示如何利用Lambda表达式来优化我们的代码结构,同时探讨其背后的工作原理和性能考量。 ##