Groovy 语言学习
个人Groovy目前学习所用主要是用于编写gradle插件。
groovy语言是兼容Java语言的,我们可以使用写java的方式写Groovy,当然也可以使用Groovy本身的一些语法去写也许。Groovy是没有类型的java。
来源Groovy入门教程
Groovy安装
下载GDKGDK,配置安装环境,也就是环境变量,跟java的类型(AS直接运行貌似可以不用),然后在Android Studio中开发Groovy,第一次运行的时候需要配置lib的路径,根据提示选择到groovy的安装目录下面的lib目录设置进去。这样子就可以了。
Groovy基本规则
- 作为动态语言,Groovy中所有的变量都是对象,在声明一个变量时,不强制声明类型,只是需要在变量前使用def关键字。
- 属性默认都是private的,默认提供get和set方法,类默认都是public的。
- 语句结束的时候不需要”;”表示语句结束
- 文件名以.groovy结尾
- 注释,他的注释与java一样,支持
只能在第一行的注释:#!
单行注释://
多行注释:/**/
文档注释,也就是编译到doc里面的:/** */
- 变量命名
以字母,美元符号$,或者是下划线_开始,不能以字符串开始 - Groovy的保留字
as
assert
break
case
catch
class
const
continue
def
default
do
else
enum
extends
false
finally
for
goto
if
implements
import
in
instanceof
interface
new
null
package
return
super
switch
this
throw
throws
trait
true
try
* Groovy的自动导入的包包括:
groovy.lang.*
groovy.util.*
java.lang.*
java.util.*
java.net.*
java.io.*
java.math.BigInteger
java.math.BigDecimal
使用到这些包的时候我们就不用去import了
Groovy语法基础
HelloGroovy程序:
我们首先在AS里面新建一个JAVA 程序或者是建立一个Android lib或者是app module,随便都行。然后新建一个名字随便的.groovy文件。比如mygroovy.groovy文件,文件的位置是位于src/main/java目录下面。
然后按照JAVA的写法输出HelloGroovy是:在mygroovy.groovy新建一个类,类的名字是随便,例子如下:
package com.example
public class HelloGroovy{
public static void main(String[] args) {
System.out.println("Hello Groovy")
}
}
然后对着代码右键,选择run,然后假如是第一次需要配置Groovy的jar进来。就选择你下载的Groov目录下面的lib目录配置进去,再次运行,就可以输出:
Hello Groovy
这里的输出还是调用java的输出流实现的。
其他写法:
不需要类,不需要main方法,直接是:
package com.example
System.out.println("Hello Groovy")
右键,run,还是输出Hello Groovy。这里的输出还是使用JAVA语言的输出流实现的。
最简单的写法,直接:
package com.example
print("Hello Groovy")
print "Hello Groovy"
同样会都输出Hello Groovy,这里就是使用Groovy语言实现的。
定义变量
我们可以使用java的强语言类型,使用各种不同的类型去定义变量,在这里不分享。Groovy还可以通过关键字def定义变量,他会根据上下文去推断这个变量的类型,需要强调一点,Groovy里面def声明一切都是对象。比如:
package com.example
def a=10
def b=10L
def c="Hello Groovy"
def d=1.0
def e=1.0f
println(a.class)
println(b.class)
println(c.class)
println(d.class)
println(e.class)
输出:
class java.lang.Integer
class java.lang.Long
class java.lang.String
class java.math.BigDecimal
class java.lang.Float
同时,在给一个变量赋值之后,也就是给定了类型之后,该变量还是可以指向别的类型的,比如:
package com.example
def a=10;
println(a.class)
a = "Hello Groovy"
println(a.class)
输出就是:
a=10;
println(a.class)
a = "Hello Groovy"
println(a.class)
但是,你以为就一定是需要def关键字吗,个人在AS里面测试运行的时候发现,我们可以把关键字def都省略掉,直接使用一个变量名字就可以,这就是动态语言的强大。变量堆指向的类型不关心,只要你给他什么类型,他就可以是什么类型。上面的例子是可以写成:
package com.example
a=10;
println(a.class)
a = "Hello Groovy"
println(a.class)
这样子也是ok的。
类型兼容问题
看下面一个例子:
package com.example
char c = 'a'
println c.class
c='b'
println c.class
c2='a'
c3="a"
println c2.class
println c3.class
首先我们使用java的char关键字声明一个char 类型的变量c,然后打印类型,再次改变内容,再次打印类型,然后声明c2和c3,打印类型:输出结果是:
class java.lang.Character
class java.lang.Character
class java.lang.String