一、Groovy语言
Groovy 是基于JVM的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。
二、特性
1.兼容Java类库
由于Groovy是基于JVM的面向对象的编程语言,很容易让人想到另外一种运行在JVM上的面向对象的编程语言JAVA。因此,groovy使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。
2.动态语言
groovy另外一个特性是动态语言,结合Python、Ruby和Smalltalk的闭包等许多强大的特性,使它可以作为一种脚本语言,能够快速构建高性能的JVM应用,将开发效率提高几个数量级。
三、区别
1.Groovy是一种动态语言,而java是一种强类型的静态语言。
在groovy中,方法的调用是在运行时被选择。这被称为运行时调度和多方法。根据运行时参数类型选择方法。在java中,这个是相反的,在编译时,根据定义的类型, 选择方法。举个栗子:
class TestGroovy {
static int method(String arg) {
return 1
}
static int method(Object arg) {
return 2
}
public static void main(String[] args) {
Object o = "Object"
int result = method(o)
println "groovy:" +result
}
}
public class TestJava {
public static int method(String arg) {
return 1;
}
public static int method(Object arg) {
return 2;
}
public static void main(String[] args) {
Object o = "Object";
int result = method(o);
System.out.println("java:" +result);
}
}
大家觉得上面两个程序运行结果会是怎样的呢?
输出结果:
groovy:1
java:2
java使用的是静态信息类型,o被声明为Object;然而groovy是在运行时选择,这个方法真正被调用的时候。因为o是一个String所以调运String的版本。这里跟大家解释一下什么是动态语言、静态语言:
动态类型语言:是在运行时确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。
静态类型语言:是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言可能能够部分减轻这个要求 。
2.Groovy语言简洁,较少的代码获得更多结果
3.return语句可选,分号结尾可选
4.方法和类默认public
5.groovy所有的包和classes是默认被导入
四、语法
由于groovy兼容大部分的java类库,所以语法基本上跟java类似,这里就不做介绍了。
五、性能对比
java:
long t1 = System.currentTimeMillis();
int sum = 0;
for (int i = 0; i < 1000000; i++) {
sum+=i;
}
System.out.println("java:" + (System.currentTimeMillis() - t1));
groovy:
long t1 = System.currentTimeMillis();
int sum = 0;
1000000.times {val-> sum+=val}
println "groovy:" +System.currentTimeMillis()-t1;
运行结果如下:
java:4
groovy:451
相同逻辑的实现groovy执行的耗费的时间差不多是java的100倍。groovy耗时的操作基本都在编译上,编译耗时400多毫秒。实际执行效率上查不多。也许你会问groovy执行速度这么慢,为啥还要用它呢?
实际工作中,在计算较负责的业务逻辑时都会选择用java,但是java不够灵活,groovy作为一种动态语言,可以动态编译执行。如果把java和groovy结合起来,通过java调用groovy脚本,可以实现复杂业务流程的动态编排和计算,提交开发效率。