grovvy(1)语言特点

2018-11-12  本文已影响0人  高斯巴

特点:

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关键字就可以)

上一篇下一篇

猜你喜欢

热点阅读