Groovy语法基础

Groovy与Java

Groovy是一种与Java非常相似的脚本语言,编译器会将该脚本语言编译成class字节码文件,最终运行于Java虚拟机之上。

环境配置
  1. 前提是配置好JDK

  2. Groovy环境在类Unix上配置,只需以下的几行命令即可:

  3. 第一步下载sdkman,这是管理sdk的工具,命令如下:

    curl -s get.sdkman.io | bash  
  4. 读取并执行sdkman的初始化脚本,如下命令:

    source "$HOME/.sdkman/bin/sdkman-init.sh"
  5. 接着安装groovy的sdk,命令如下:

    sdk install groovy
  6. 最后,检验是否安装成功:

    groovy -version

    这里写图片描述

Groovy工具
  1. 安装完Groovy环境之后,输入groovy命令时,会有如下的工具:
    这里写图片描述

  2. groovyc:groovy编译器,类似于javac,将groovy脚本编译成class字节码文件

  3. groovy:用于运行groovy脚本

  4. groovyConsole:Groovy官方提供的一个简易IDE,如下图
    这里写图片描述

  5. groovysh:groovy命令交互式的shell,类似python中的交互式环境。

  6. 另外,很多出名的IDE均已支持Groovy,本人使用的是IntelliJ IDEA

引用标识符
  1. 注意,Groovy的语法与Java十分相似,这里只重点介绍与Java有区别的语法,相同的就不再赘述。

  2. 引用标识符:Groovy中对变量的引用方式是多样化的,Test.groovy源码如下:

    void testQuotedIdentifiers() {
        def map = [:]
    
        map.no_quote = 1
        map.'single quote' = 2
        map."double quote" = 3
        map.'''triple single quote''' = 4
        map."""triple double quote""" = 5
        map./slashy string/ = 6
        map.$/dollar slashy string/$ = 7
    
        def closureQuote = "value"
        map."closure quote ${closureQuote}" = 8
    
        println(map)
    }
    
    testQuotedIdentifiers()

    运行结果如下:

    [no_quote:1, single quote:2, double quote:3, triple single quote:4, triple double quote:5, slashy string:6, dollar slashy string:7, closure quote value:8]
  3. 上述代码先定义一个静态方法,然后在方法内定义了一个Map(本质上是java中的LinkedHashMap实例)。接着使用不同的引用操作符的方式往这个map中添加键值对,最后打印这个map实例,如下图:
    这里写图片描述

  4. 紧接着来看Test.groovy编译之后的class代码:

    public class Test extends Script {
         
    public Test() {
        CallSite[] var1 = $getCallSiteArray();
    }
    
    public Test(Binding context) {
        CallSite[] var2 = $getCallSiteArray();
        super(context);
    }
    
    public static void main(String... args) {
        CallSite[] var1 = $getCallSiteArray();
        var1[0].call(InvokerHelper.class, Test.class, args);
    }
    
    public Object run() {
        CallSite[] var1 = $getCallSiteArray();
        if (!__$stMC && !BytecodeInterface8.disabledStandardMetaClass()) {
            this.testQuotedIdentifiers();
            return null;
        } else {
            return var1[1].callCurrent(this);
        }
    }
    
    public void testQuotedIdentifiers() {
        CallSite[] var1 = $getCallSiteArray();
        Object map = ScriptBytecodeAdapter.createMap(new Object[0]);
        byte var3 = 1;
        ScriptBytecodeAdapter.setProperty(Integer.valueOf(var3), (Class)null, map, (String)"no_quote");
        byte var4 = 2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值