Groovy

原创
2015/05/15 23:05
阅读数 400

Groovy

Groovy是一种基于JVMJava虚拟机)的敏捷开发语言,它结合了PythonRubySmalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

简介编辑

Groovy 是 用于Java 虚拟机的一种敏捷的 动态语言,它是一种成熟的 面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的 脚本语言。使用该种语言不必编写过多的代码,同时又具有 闭包和动态语言中的其他特性。
Groovy是 JVM的一个替代语言(替代是指可以用 Groovy 在 Java平台上进行 Java 编程),使用方式基本与使用 Java 代码的方式相同,该语言特别适合与 Spring的动态语言支持一起使用,设计时充分考虑了 Java集成,这使 Groovy 与 Java 代码的互 操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程。[1]  
(概述图片来源:)

2特性

基本特点

1、 构建在强大的 Java语言之上 并 添加了从 PythonRubySmalltalk等语言中学到的 诸多特征,例如动态类型转换、 闭包元编程(metaprogramming)支持。。
2、为Java开发者提供了 现代最流行的 编程语言特性,而且学习成本很低(几乎为零)。
3、 支持 DSL(Domain Specific Languages领域定义语言)和其它简洁的 语法,让 代码变得易于阅读和维护。
4、受检查类型异常(Checked Exception)也可以不用捕获。
5、 Groovy拥有处理原生类型, 面向对象以及一个Ant DSL,使得创建Shell Scripts变得非常简单。
6、在开发 WebGUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。
7、支持 单元测试和模拟(对象),可以 简化测试。
8、无缝集成 所有已经存在的 Java对象和类库。
9、直接编译成Java 字节码,这样可以在任何使用Java的地方 使用Groovy。[2]  
10、支持 函数式编程,不需要 main函数
11、一些新的 运算符
12、默认导入常用的包。
13、 断言不支持jvm的-ea参数进行开关。
14、支持对对象进行布尔求值。
15、类不支持default 作用域,且默认作用域为 public
16、groovy中基本类型也是 对象,可以直接调用对象的方法。

动态类型

类型对于 变量属性方法,闭包的 参数以及方法的返回类型都是可有可无的,都是在给变量赋值的时候才决定它的类型, 不同的类型会在后面用到,任何类型都可以被使用,即使是基本类型 (通过自动包装(autoboxing)). 当需要时,很多类型之间的转换都会自动发生,比如在这些类型之间的转换: 字符串( String),基本类型(如int) 和类型的包装类 (如 Integer)之间,可以把不同的基本类型添加到同一数组(collections)中。

闭包

闭包就是可以使用参数的代码片段,每个闭包会被编译成 继承groovy.lang.Closure类的类,这个 有一个叫call方法,通过该方法可以传递参数并调用这个闭包.它们可以访问并修改在闭包创建的范围内的变量,在闭包内创建的变量在闭包被调用的范围内同样可以被引用, 闭包可以保存在变量中并被作为参数传递到方法中。

3语法

Groovy 语法与Java 语言的语法很相似,虽然 Groovy 的语法源于 SmalltalkRuby这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上, Ruby与 Groovy 不同,因为它的语法与 Java 语法差异很大。)
许多 Java 开发人员喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。

4

Groovy类和java类一样,完全可以用标准java bean的语法定义一个Groovy类。但作为另一种语言,可以使用更Groovy的方式定义类,这样的好处是,可以少写一半以上的javabean代码。
(1)不需public修饰符
如前面所言,Groovy的默认访问修饰符就是public,如果Groovy类成员需要public修饰,则根本不用写它。
(2)不需要类型说明
同样前面也说过,Groovy也不关心变量和方法参数的具体类型。
(3)不需要getter/setter方法
在很多 ide(如 eclipse)早就可以为程序员自动产生getter/setter方法了,在Groovy中,不需要getter/setter方法--所有类成员(如果是默认的public)根本不用通过getter/setter方法引用它们(当然,如果一定要通过getter/setter方法访问成员属性,Groovy也提供了它们)。
(4)不需要构造函数
不再需要程序员声明任何构造函数,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的 构造函数--由于是map类型,通过这个参数可以构造对象时任意初始化它的成员变量)。
(5)不需要 return
Groovy中,方法不需要return来 返回值
(6)不需要()
Groovy中方法调用可以省略()( 构造函数除外)。

5文件与类的关系

在Groovy中类和文件的对应关系并不像Java中那么固定(Java中一个文件只能有一个声明为public的类和其他一些非公共的类和内嵌类) 。在同一个groovy文件中可以包含多个public的类定义。具体规则如下:
如果在一个groovy 文件中没有任何类定义,它将被当做 script来处理,也就意味着这个文件将被透明的转换为一个Script类型的类,这个自动转换得到的类将使用原始的groovy文件名(去掉扩展名,没有包名,在default包中)作为类的名字。groovy文件的内容被 打包进run方法,另外在新产生的类中被加入一个main方法以进行外部执行该脚本。
如果在groovy文件正好有一个类的定义,并且该类的名字与文件名称相同,那么这就和java中的类与文件的一一对应关系相同。
在一个groovy文件中可以包含多个不同可见性的类定义,并且没有强制性的要求其中有一个类的类名与文件名相同。groovyc 编译器会很乐于把该文件中定义的所有的类都编译成*.class文件。如果希望能够直接调用这个groovy script,比如说在使用groovy命令行或者在某个 IDE中执行,那么应该在该文件中的第一个类中定义一个main方法。
在一个groovy文件中可以混合类的定义和 脚本定义。在这种情况下,那些脚本代码将会变成直接调用的主类,所以在这种情况下不应该再定义一个和文件同名的类。
在没有经过明确的编译过程即执行时,groovy将通过 文件名来查找类。在这种情况下,名称将会很重要。Groovy只能找到那些和文件名匹配的类。在找到这种名字匹配的类时,找到的文件中定义的其他类将被 解析并变得对groovy可见。

6最新版本信息

Groovy 2.2,发布于2013年11月。[1]  

Java(甲骨文公司)

Java平台
 Java 编程语言  JVM  Java ME  Java SE
 Java EE  Java Card
升阳电脑主要技术
 Squawk  JDK  OpenJDK  Java Virtual Machine
 JavaFX
平台技术
 Applet  Servlets  MIDlets  JSP
 Web Start (jnlp)
主要的第三方技术
 JRockit  GNU Classpath  Kaffe  TopLink
 Apache Harmony  Struts  Spring Framework  Hibernate
 JBoss  Tapestry  Jazelle
历史
 历史  批评  Java Community Process  升阳电脑
 Free Java implementations
主要编程语言
 Tcl/Java  Jython  JRuby  BeanShell
 Clojure  Groovy  Rhino  Scala
 Processing
Java会议
 JavaOne
参考资料

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部