Groovy语法
2021-03-31 本文已影响0人
dashingqi
Android_Banner.jpg
介绍
Groovy是Apache下的一种基于JVM的面向对象语言,既可以用于面向对象编程,也可以用作纯粹的脚本语言
变量的定义
Groovy中用def关键字来定义变量,
我们可以不指定变量的类型,默认的访问修饰符是public
def a = 1;
def int b = 2;
def c = "Hello World"
方法的定义
方法使用返回值类型或者def关键字定义,方法可以接受任意数量的参数
def add(int c,int d){
println c+d
}
def minus(e,f){
println e-f
}
如果指定了方法返回类型,可以不需要使用def关键字
int add(int a,int b){
return a-b
}
如果不使用return,方法的返回值为最后一段代码的执行结果
int add(int a,int b){
a+b
}
类
class Person {
String name
Integer age = 20
def increaseAge(Integer years) {
this.age += years
}
}
def p = new Person()
p.increaseAge 5
print p.age
// 25
Groovy中的类和Java中的类很相似
默认类的修饰符是public
类不需要与它的源文件有相同的名称,但还是建议采用相同的名称
没有可见性修饰符的字段会自动生成对应的setter和getter方法
语句
- 断言
task method1{
doLast {
assert 1+2 == 6
}
}
/**
* 运行结果
* > assert 1+2 == 6
* | |
* 3 false
*/
- for循环
Groovy支持Java的for(int i=0;i<n;i++)和for(int i:array)形式的循环语句,
另外还支持for in loop形式。
支持遍历范围、列表、Map、数组和字符串多种类型
for in loop 形式(遍历范围)
def x = 20
for (i in 0..4) {
x += i
}
println x
遍历列表
for(i in [0,1,2,3,4]) {
x += i
}
遍历map
def map = ['a': 1, 'b': 2, 'c': 3]
for(v in map.values()){
x += v
}
- switch
def y = 16
def value = ""
switch (y) {
case "ok":
value = "found ok"
break
case [1, 23, 4, 5, 'list']:
value = 'list'
break
case 10..19:
value = "range"
break
case Integer:
value = "integer"
break
default:
value = "default"
break
}
println value
数据类型
字符串
单引号字符串
单引号可以定义一个字符串常量,但是不支持插值,
在Groovy中双引号字符串支持插值
双引号字符串
双引号字符串支持插值,插值值得就是替换字符串中的占位符,占位符表达式位
def name = 'dashingqi'
//插值
println "hello ${name}"
println "hello $name"
三引号字符串
三引号字符串的特点是可以保留文本的换行和缩进格式,不支持插值。
def name1 = '''
zhangqi
dashingqi
zhangqi'''
println name1
GString
在Groovy中,String是不可变的,GSting是可变的,
GString类型就是双引号字符串中包含了插值,就是GString类型
List
def number = [1,2,3,4]
def linkedList instanceof list
println number[1]
// 索引-1是列表末尾的第一个元素。
println number[-1]
Map
创建Map使用[],需要同时制定Key和Value,默认的实现类位LinkedHashMap
def names = [one:'zhangqi',two:'dashingqi',three:'zdq']
println names['one']
println names['two']
def key = 'name'
// 此时键对应的值是key这个字符串
def person = [key:'张琦']
if(person.containsKey(key)){
println person['key']
}
// 此时键对应的值是变量key对应的name这个值
person = [(key):"DashingQi"]
if(person.containsKey('name')){
println person[key]
}
#### 闭包
闭包的定义
{params -> statements}
params:参数部分
statements:语句部分
```java
def code = { 123 }
def isOddNumber = { i -> i % 2 != 0 }
println isOddNumber(5)
println code()
I/O操作
文件读取
// 声明一个文件地址
def filePath = '/Users/zhangqi/downloads/Test.java'
// 获取文件对象
def file = new File(filePath)
// 读取文件
file.eachLine { it ->
println it
}
// println(file.text) 简洁的写法
文件写入
file.withWriterAppend { it ->
it.println("class Test {")
it.println(" public static void main(String args[]) {")
it.print("\n")
it.println(" }")
it.println("}")
}
println(file.text)