上一篇用文字介绍了 Groovy 和 Java 的不同和特有的特性,这一篇就用代码来阐述 Groovy 和 Java 的不同以及特有的特性。写代码之前需要来做一些准备工作,准备工作如下:
1、准备工作
- 创建 Gradle Java 项目
IntelliJ IDEA -> File -> new -> project -> Gradle -> Java -> Next -> 写GrounpId, ArtifactId, Version -> 选本地Gradle环境 -> 写项目名 -> Finish
项目创建完成 - 打开 Groovy 控制台:Tools -> Groovy Console -> 直接写 Groovy 代码
有了以上的准备工作就可以来书写 Groovy 代码了,接下咱们就来看下 Groovy 和 Java 的区别。
2、Groovy 和 Java 的区别
以下咱们就通过定义 JavaBean 来说明 Groovy 和 Java 的不同之处。
2.1 Java 定义 JavaBean
class Student {
private String name;
private String email;
private Integer age;
// 构造器
// getter setter...
}
2.2 Groovy 定义 JavaBean
class Student {
private String name
private String email
Integer age // 没权限修饰符会自动生成 getter setter
private String getName() {
name // 可以省略return
}
private void setName(String name) {
this.name = name
}
//可省略 getter setter 省略了 email 的 getter setter
}
2.3 Groovy 中操作JavaBean
Groovy 可以做类,也可以做脚本,所以咱们可以在类的后面直接写操作JavaBean 的语句。如下:
// class Student {...}
// 外部可直接调用类的私有成员
Student stu = new Student()
stu.setName("小明")
println '私有getter方法:' + stu.getName()
// 使用点的方式操作字段
stu.email = 'xiao@'
println '点方式调用:' + stu.email
// 调用自动生成的 getter setter 方法
stu.setAge(19)
println '调用自动生成getter,setter:' + stu.getAge()
// 自动生成具名构造器
Student stu = new Student(name:'willie', age:18)
//Student stu = [name:'willie', age:18] // 直接写参数和值赋给对象,会自动设置字段值
println stu.name + ':' + stu.age + ':' + stu.email
// null 调用方法不报空指针异常
stu.name = null
println stu.name.equals('ssss')
2.4 总结 groovy 与 Java 不同
- JavaBean 的定义
- 可省略分号
- 可省略 getter/setter
- 可省略 return
- 无权限修饰符自动生成 getter/setter
- 直接类外定义对象和调用字段
- 可调用私有成员
- 可使用点方式调用字段
- 无权限修饰会自动生成 getter setter
- 自带具名构造器
- 空值使用不抛出空指针异常
以上就是 Groovy 和 Java 的比较,接下来咱们来看下 Groovy 的特有语法。
3、Groovy 的特有语法
Groovy 特有语法挺多的,以下咱们就挑一些比较特殊的语法来讲解下。
3.1 基本语法
- 变量类型定义
groovy 具有特有的弱类型声明,用 def 来代替所有类型,变量可不写类型。建议带 def,清晰。 - assert 方法
使用 assert 方法做断言 - 方法括号可省略
方法调用可以省略括号,前提是必须带有参数的方法,不然会认为是属性。
// 变量声明
def name = 'willie'
age = 18
// 带参数方法调用可省略括号
println name + ':' + age
// assert 断言
assert age == 19
3.2 字符串定义
字符串的定义有三种方式:
- 单引号(' ') :普通字符串定义
- 双引号(" ") :内容中可使用 ${} 引用变量值
- 三单引号(''' ''') :可按格式引入字符串,字符串可换行
// 字符串使用 '|"|'''
def str1 = 'willie' // 普通字符串定义
def str2 = "wolfcode:${str1}" // 字符串内容中可引用变量
def str3 = '''wolfcode:
willie''' // 可格式化定义字符串
println str1 // willie
println str2 // wolfcode:willie
println str3 // wolfcode:
// willie
3.3 集合定义和使用
所有操作兼容 Java 语法,以下咱们就来看下特有语法。
List 特有语法
- 声明:使用 [] 定义集合
def list = [ele1, ele2, ele3]
- 添加:使用 << 做元素添加
list << ele4
- 类型:java.util.ArrayList
Map 特有语法
- 声明:使用[] key:value 的方式定义
def map = [key1:value1,key2:value2]
- 添加:使用 .key 赋值方式
map.key3 = value3
- 类型:java.util.LinkedHashMap
// list 集合,使用[] 定义集合
def list = ['willie','will','stef']
list << 'AA' // List 元素特有添加方式
list.add('BB')
println list // [willie, will, stef, AA, BB]
println list.getClass() // 使用的是 java.util.ArrayList
println "=========== Map 映射 =============="
def map = [name:'willie', age:18]
map.wechat = 'cunge_weixin' // Map 元素特有添加方式
map.put('aa', 'AA')
println map // [name:willie, age:18, wechat:cunge_weixin, aa:AA]
println map.getClass() // 使用的是 java.util.LinkedHashMap
4、闭包
4.1 闭包介绍
闭包是 Groovy 的重点知识点,闭包简单理解就是 { } 括起来的代码块。跟方法类似,可带参和不带参。闭包可以赋给一个变量也可以当做参数值传递给一个方法,在方法中调用闭包。
4.2 闭包的定义格式
{
[param1,param2... ->]
执行体
}
4.3 闭包调用
需要使用变量来接收再调用
def closure = {[param1,param2... ->] 执行体}
closure([param]) 或 closure.call([param])
4.4 代码展现
定义带参和不带参闭包,作为方法的参数使用(Gradle 中使用 Groovy 闭包的方式)
// 不带参闭包
def c1 = {
println 'hello'
}
// 带参闭包
def c2 = {
val -> // 指定闭包形参名
println "hello ${val}"
}
// 定义指定参数类型方法接收无参闭包
def method1(Closure closure){
//closure()
closure.call()
}
// 定义无指定参数类型方法接收带参闭包
def method2(clo){
//clo('willie')
clo.call('willie')
}
method1(c1)
method2(c2)
Groovy 的闭包在 Gradle 中起决定性作用,讲这么久的 Groovy 主要是为了给 Gradle 做铺垫,在每个Gradle 项目中都有一个 build.gradle 文件,此文件就是使用 Groovy 语言定义的项目构建脚本。此文件非常重要。
下一篇 <<使用Gradle快速构建项目>>
网友评论