说明: 如没有'特殊说明',仅仅研究'Groovy'的特性,'Java'的相关特性不在这里讲解
一 动态类型
1)定义一个变量之后,在'运行'时候,可以变成'任意类型的数值'
2)动态类型'不是'弱语言类型
3)通过'类型推断',通过'值'来推断'类型'
4)动态类型中的'类型是在运行时推断'的,'方法'及其'参数'也是在'运行时检查'的
(1)变量的定义
变量的名称('标识符'): 可以由'字母、数字、下划线'字符组成,'不能以数字开头','区分'大小写
① 强类型定义
String str = 'Groovy'
② 弱类型def关键字定义
def str = 'Groovy'
def array = new String[4]
def student = new Student()
// def则由编译器'自行推导'变量的类型
③ 直接声明
a = 10
④ 选择
在更大的程序中使用def关键字非常重要,因为它有助于定义可以找到变量的范围,并且可以帮助保留封装 -->def省略与否
二 基本数据类型
牢记: Groovy中'一切'皆对象
举例1: 10.times {print "${it}"}
举例2:
int x = 10
println x.class //结果为:class java.lang.Integer
打印类型: Java和Groovy对比 -->var.getClass().name
本小节讲解'用的比较多':'Boolean'和'String'
(1)String
① 定义方式
1. 单引号''-->所见即所得,'不支持'变量内插,有'特殊字符'同样的通过'反斜杠转义'
2. 双引号""-->可以通过${var}进行"变量内插(GString)" -->'常用'
3. 三引号"""-->可以改变输出格式
1)单引号
2)双引号
3)三引号
(2)Boolean
1)布尔值放的是'对象的引用' -->Groovy 会自动将'表达式的值' 作为boolean看待
类型 为真的条件
① Boolean true
② Collection 集合不为空,'有元素'
③ Object[] 对象数组长度大于0,有元素
④ Iterator hasNext()为true-->没有迭代完
⑤ Character 值'不为0'
⑥ Number Double'不为0'
⑦ Map 该映射不为空-->'有元素'
⑧ other 引用'不为null'
备注: Groovy允许'把一个对象'放在一个'boolean'表达式中
if (obj){
// do somethong
}
三 逻辑判断
涉及上面的'布尔表达式'
(1) 条件判断
① if条件语句
(2) 循环
① switch
++++++++++'(1)表达式代替'++++++++++
def topic = '/SAP/Organization/WMS2020'
switch(topic){
case { topic.contains('/SAP/Organization/WMS') }:
备注: case表达式也可以进行'正则匹配'
case ~/^Switch.*Groovy$/:
++++++++++++++'注意事项'++++++++++++++
1)default不管放在哪里('甚至开头'),只有所有的'不匹配才会执行'
2)如果'case匹配了',但是没有'break'会继续向下执行
备注: 稍微'有点疑问'
② for循环
Groovy核心: 'for in'掌握
涉及: '范围'运算符'..'
1) while '省略' -->'条件为真'一直执行
2) continue('跳过本次循环,执行下一次循环')、break('跳出内层循环',进行下一次'外层循环')
四 方法
概念: 一段'组合的代码',可以'复用',被'调用多次'
了解:'行参'和'实参'的含义
① 无参数的方法
注意:'无参方法'的调用'()'不能省略,可以没有'return返回值'表达式
+++++++++++++++'无参'Groovy方法+++++++++++++++
// (1)定义方法
def method1(){
println 'method1'
// 方法可以没有返回值
}
// (2)调用无参方法
method1()
② 有参数的方法
def add(a,b){
print a + b
}
// 调用-->有参数可以省略()
print 2,3
③ 方法的返回值
细节1:可以'省略return'关键字
细节2:当'省略'的时候,返回的是'最后计算'的值
④ 参数的默认值
五 变量的作用域
掌握: '局部'变量和'全局'变量
① 局部变量
+++++++++'报错的原因'+++++++++
原因: 因为'def'声明的变量也是'局部变量'
测试方法: '断点调试'
备注1: def 声明的变量,在'闭包内可以访问'到
备注2: 同'Java','方法里面声明'的变量,对于'方法外面而言'也是'局部变量',无法访问-->'省略'测试过程
② 全局变量
需求:如何让'方法访问外部变量'
1)把def去掉
备注:此时'不是全局变量'
2)注解的形式
1)让其成为'全局变量'-->'@Field'注解
import groovy.transform.Field
@Field name = 'wzj' //变成全局变量