创建groovy类
class GroovyBeans{
private String name;
GroovyBeans(String theName){
name = theName;
}
}
- groovy类自动生成getter,setter方法
- class默认访问修饰符为public
使用groovy类
def bean = new GroovyBeans("hello")
bean.name = "change hellow" //相当于setName
println bean.name //相当于System.out.println(bean.getName());
- bean.title不是类属性的直接访问,它是访问该属性访问者方法的快捷方式
- def是groovy中用来定义动态变量的关键字,故new后类均不用强制转化。
字符串处理
def name = 'hello'
println "$name world"
- $name将被替换为hello
- groovy中可用单引号表示字符串
- -
数字处理
def x = 1
println x.plus(2)
- 一切groovy变量都是类
集合处理
- List
def mylist = [1,2,3,4,5]
println mylist[0] //类数组访问形式
mylist[6] = 6 //数组扩展
/*
[]将被解析成ArrayList
*/
- Map
def myMap = [1:'n1',3:'n3']
println myMap[1]
- Range
def myRange = 1..10
assert myRange.size() == 10
assert myRange.from == 1
assert myRange[0] == 1
assert myRange.contains(1) == true //assert断言,经常出现在groovy中,用于单元测试
闭包
[1,2,3].each {num -> println num}
- 闭包即{}中的代码块,相当于java中的匿名类,也就是Lambda expression,面向函数语言用法
循环
for (i in 0..9)
{
//代码块
}
list.each{/*闭包/}
- 常用以上两种
- groovy无 for(int i;i<10;i++) 类型循环语句
java环境中运行groovy
加载的两种方式:
- 使用groovyc编译所有的.groovy为java的.class文件,把这些 *.class文件放在java类路径中,通过java类加载器来加载这些类。
- 通过groovy的类加载器在运行时直接加载.groovy文件并且生成对象,在 这种方式下,没有生成任何.class,但是生成了一个java.lang.Class对象的实例,也就是说,当groovy代码中包括一个new MyClass()的表达式时,并且也有一个MyClass.groovy的文件,这个文件将被解释,一个MyClass的类型将被产生并且增加到类加载器中,在代码中将像从*.class一样获取到MyClass对象.
- java虚拟机并不考虑代码表层是怎么样的,只要字节码符合Class结构即可被JVM识别运行。
Groovy的动态特性
println evaluate('1+1')
- 运行时生成类
- 根据代码的任意字符串来运行的能力是脚本语言的显著特征