特点:
1:语法上支持动态类型,闭包等新一代语言的特性
2:无缝集成所有已经存在的java类库(跟kotlin一样,完全可以在groovy工程中写java类和代码)
3:支持面向对象,也支持面向过程编程.
环境搭建:
基于jvm(新版的idea,支持直接创建grovvy工程,如果不支持通过安装grovvy插件).
1:安装好jdk环境.
2:官网下载groovySDK,解压到合适的位置.
3:配置grovvy环境变量
$ vim ~/.bash_profile :编辑环境变量的命令
$ source ~/.bash_profile :保存完环境变量配置后,刷新
特点:
grovvy既可以编译为class字节码,在jvm上执行。也可以写脚本解释执行
grovvySDK中的bin目录下都是一些命令,其中grovvy命令就相当于java命令是执行编译完的class字节码文件的。grovvyc命令相当于javac命令,是将grovvy源代码编译为class字节码文件的命令。其中grovvysh命令是Java没有的,它是解释执行grovvy脚本的
一个groovy文件 会被编译成一个 class (跟kotlin一样),文件内部定义的类属于这个class 的内部类.
其实不管是面向对象写应用程序还是,面向编程写脚本,都是被编译成一个class 字节码文件的执行的.
一:语句结尾没有分号
二:方法只有一个参数,调用时可以不写括号()
println "result2"
三:定义弱类型变量用 def(多用于变量自己使用,如果要暴露出去给别人使用,用def的话,别人不知道该传什么类型)
四:没有public等作用域关键字,默认都是public的 .闭包可以写在括号外面。如果闭包是唯一的参数,可以写在括号外面,小括号也可以省略.
*闭包可以写在括号外面:写在里面
1.upto(number,{num ->result *= num})
写在外面:
2.downto(1){
num->result *=num
}
*如果闭包是唯一的参数,可以写在括号外面,小括号也可以省略
every函数的参数只有一个闭包
def result2=str.every {
String s->s.isNumber()
}
五:闭包只有一个参数,可以不写默认是it
def list2=str.collect {
it.toUpperCase()
}
六:循环each有返回值,返回值就是调用者本身
七:定义闭包:闭包可以单独定义用一个def变量接收
八:方法的定义也用def,跟属性一样,标示返回值是object类型.
九:闭包其实就是一个代码块,代码块的作用域是他自己。但是他可以内部持有它外部所属类的引用,这样他就可以引用外部的属性,此时就关系到他的委托策略了。之所以有委托策略是因为,它内部有三个属性,可以持有外部的三个对象。这三个分别指的是哪个,你想要让他指向哪个等,所以就出现了委托策略并通过更改他的委托策略来引用不同的对象.
区别在于:this代表闭包定义处最近的对象(不包含闭包),owner代表闭包定义出最近的对象可以是闭包.delegate默认与owner一致.
十:使用def定义list跟Java中定义数组一样,def arg=[1,2,4],要定义数组需要使用 as int[]转为数组
或者定义数组使用强类型定义,int [] arg=[1,2,3]
十一:定义map:
key默认是带单引号的字符串,并且单引号可以不写,map还可以通过.来操作
map遍历出来key,value还可以包含index
def arg=[ li : 223, chao:333 ] //相当于 定义map: def arg=['li':223, 'chao':333]
十二:grovvy中没有抽象类,有个trait跟抽象类一样
十三:groovy中类的属性都可以new的时候直接像构造方法一样具名传入.
十四:类的属性默认都实现了get,set方法.
十五:所有的类默认都继承自GrovvyObject ,grovvy中的基本类型也都是object类型的,所以int和Integer没有区别
十六:groovy中的元编程:
运行时造成部分本该编译时完成的事情。grovvy中使用grovvyObject中的mateclass为类动态添加属性或者方法,
区分是添加在本文件中生效还是全局生效。因为他是运行时的,所以,在编译器可以调用一个不存在的函数,并不会报错,
所以为了避免写错调用方法,他又弄了一套机制,重写methodMissing方法和invokeMethod方法。
类似于kotlin中的扩展函数,但是kotlin中的扩展函数是全局生效的,并且在编译期编译.(kotlin中的事给类定义的扩展函数只能是静态方法,所以编译时可以检查是否调用正确,
grovvy中扩展的默认不是静态方法,所以需要运行时检查,就需要有运行时的找不到方法机制。当然grovvy中也可以扩展静态方法,加static关键字就可以)
网友评论