groovy学习笔记

groovy

   groovy是java语言的脚本实现,使用标准的java环境。 groovy编译器产生的字节码和java编译器产生的字节码是一样的。

   groovy的运行原理是动态的编译成字节码的,然后再由JVM进行转载,运行

 

   语法简练,易于理解,类java语法

 

   在java中嵌入groovy,有助于编写和集中处理易于变化的业务逻辑,给应用提供了可编程的配置管理能力,是对java语言的一大补充

 

   groovy的优势:

      和java的无缝集成,有更快捷的应用开发能力,灵活但不失去java的健壮性

 

groovy类

wuzhong@TAOBAOWDS46:~/workspace/groovy$ more Test.groovy 
class Test{

    private pri;            //定义了一个Object类型的私有属性
    protected pro;       //定义了一个Object类型的protected属性
    public pub;            //定义了一个Object类型的public属性
    int i;                     //默认是public的,所以定义了一个int public属性
    def a;                    //定义了一个Object public属性
    private hello(){         //定义了一个私有的,返回类型是Object的方法

    }

    def test(){               //定义了一个共有的,返回是Object的test方法
      return 1
    }

}

 

编译groovy脚本groovyc Test.groovy 

得到java的2进制字节码文件: Test.class

打开来瞧瞧 , javap Test

wuzhong@TAOBAOWDS46:~/workspace/groovy$ javap Test
Compiled from "Test.groovy"
public class Test extends java.lang.Object implements groovy.lang.GroovyObject{
    protected java.lang.Object pro;
    public java.lang.Object pub;
    public Test();
    public java.lang.Object test();
   
    public int getI();      //对public自动生成的get和set方法
    public void setI(int);
    public java.lang.Object getA();
    public void setA(java.lang.Object);
    public java.lang.Object this$2$hello();
    ...
    ...
    ...
}

了解这个后,相信大家对groovy就感到十分的熟悉了 ^_^

 

groovy脚本 

wuzhong@TAOBAOWDS46:~/workspace/groovy$ more Hello.groovy 
System.out.println("hello world")
wuzhong@TAOBAOWDS46:~/workspace/groovy$ groovyc Hello.groovy 
wuzhong@TAOBAOWDS46:~/workspace/groovy$ javap Hello
Compiled from "Hello.groovy"

public class Hello extends groovy.lang.Script{
    public Hello();
    public Hello(groovy.lang.Binding);
    public static void main(java.lang.String[]);
    public java.lang.Object run();
    ....
}

    在编译时就把它编译到类了,然后自动生成了main方法,run方法主要就是放刚才的print 业务逻辑的,我们可以看下反编译后的代码:

 public Object run()
    {
        CallSite acallsite[] = $getCallSiteArray();
        return acallsite[1].call(acallsite[2].callGetProperty($get$$class$java$l
ang$System()), "hello world");
    }
 
groovy闭包

和ruby的很类似

又见集合又见和ruby相似的闭包(代码块)
//定义一个List
def num = [1,2,3,4]
num.each{it -> println it*2}
 
参考资料

groovy入门

http://www.ibm.com/developerworks/cn/java/j-pg02179.html

 

groovy与java的异同

http://ivorytower.iteye.com/blog/182547

 

groovy与spring的整合

http://shipmaster.iteye.com/blog/8462741

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值