上一篇咱们用文字介绍了 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 }
接下来咱们来看下在 Groovy 中如何操作 JavaBean
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 = nullprintln stu.name.equals(\’ssss\’)
2.4 总结 groovy 与 Java 不同
- JavaBean 的定义
- 1). 可省略分号
- 2). 可省略 getter/setter
- 3). 可省略 return
- 4). 无权限修饰符自动生成 getter/setter
- 直接类外定义对象和调用字段
- 1). 可调用私有成员
- 2). 可使用点方式调用字段
- 3). 无权限修饰会自动生成 getter setter
- 4). 自带具名构造器
- 空值使用不抛出空指针异常
以上就是 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 // willieprintln str2 // wolfcode:willieprintln 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.ArrayListprintln \”=========== 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 语言定义的项目构建脚本.此文件非常重要.所以,接下来…
你不会以为我要分析 build.gradle 吧,不分析! 下一篇 Gradle 项目搭建再分析,期待下一篇.
降龙十八掌… 佛山无影脚…
猴子偷桃 ~~~
…
我在下一篇 <<Gradle 项目搭建>> 等你喔~~
作者:叩丁狼教育黄少存
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。