Groovy
Groovy基于Java语言,兼容Java语法,他其实就是一种较为系统的java语法糖,既可以作为面向对象编程语言,也可以作为脚本语言。
基础语法
Groovy Script 和 Groovy Object
作为脚本时,Groovy脚本文件中的所有脚本命令将会生成一个Java Class,并继承groovy.lang.Script类。
比如如下脚本 Hello.groovy:
print("hello world")将会生成一个与脚本文件名称相同的类,这里是Hello.class:
import groovy.lang.Binding;
import groovy.lang.Script;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.runtime.callsite.CallSite;
// 继承Script,并提供一个 main 方法
public class Demo01 extends Script {
public Demo01() {
CallSite[] var1 = $getCallSiteArray();
super();
}
public Demo01(Binding context) {
CallSite[] var2 = $getCallSiteArray();
super(context);
}
public static void main(String... args) {
CallSite[] var1 = $getCallSiteArray();
var1[0].callStatic(InvokerHelper.class, Demo01.class, args);
}
public Object run() {
CallSite[] var1 = $getCallSiteArray();
return var1[1].callCurrent(this, "hello world");
}
}不仅如此,在一个Groovy文件中可以混合类定义与脚本定义,但是脚本名不可以与脚本中定义的类名相同,因为脚本类也会生成Class,Class是不可以重名的。
如下代码是一个混合脚本,除了Hello.class,还会生成一个Person.class:
使用def定义变量
Groovy提供关键字def用于定义变量,他是一种动态类型机制,也就是说,在运行时才会去校验数据类型;而静态类型是在编译时对数据类型进行校验检查。
分号可以用换行替换
类、成员默认全是public的
Java类、以及类中的成员,默认修饰级别为default,而Groovy中默认则是public的:
上面两个代码是相同的。
类中的属性会自动添加getter和setter
对象的属性操作
无论是哪儿种方式,实际上最终仍然是调用的getter和setter
创建对象使用构造器指定属性值
方法的定义
声明方法时,参数类型可省略:
方法的调用可以省略()
当不引起歧义的时候,方法调用的小括号可以省略,下面两行代码是相同的:
在Groovy中没有基本类型,字面量可以直接调用包装类型方法
三种字符串表示
单引号:字符串常量,不具有运算能力,会被解析为
java.lang.String双引号:可引用变量
${},具有运算能力,会被解析为GStringImpl三引号:支持换行,会被解析为
java.lang.String
自动类型转换
在需要的时候,类型之间会自动发生类型转换。
控制语句
控制语句基本与java相同。
闭包
定义:开放的、匿名的代码块,他可以接收参数,也可以有返回值。闭包还可以引用其周围作用域中声明的变量。
语法:
最后更新于
这有帮助吗?