深入了解groovy:(1)基础语法

本文介绍了Groovy语言的基础知识,包括其与Java的区别、基本语法、数据结构和方法定义等内容。Groovy是一种基于JVM的面向对象语言,融合了Ruby和Java的特性,支持闭包、动态类型和元编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 groovy

groovy语言是一种基于JVM的面向对象的语言,结合了Ruby和java,也添加了少量python的内容。

2 groovy与java的不同

这个要注意两者的不同之处
 默认导入一些包
 多态:groovy在方法运行时根据参数类型选择,java在编译时根据声明的类型选择
 不需要分号
 不需要强制类型声明
 方法调用时可以省略括号和点
 不需要return返回
 DSL
 数组定义用[],java用{}
 支持闭包
 方法和类默认为public
 闭包迭代
 switch语句支持所有对象
 安全导航符:?.
 groovy中 == 是比较内容,比较引用用.is

3 基本语法

3.1 注释
单行注释://
多行注释:

/*
*/

文本注释:

/**
*
*/

3.2 关键字
groovy关键字有很多,主要介绍一些java中没有的关键字。
as:
用来类型转换

List list = ['a','b']
ArrayList list1 = list as ArrayList //list转Arraylist,其中as可省略

用做同义词

class Person
{
  def name
}
import groovy.Person as PE //将类名Person等价为PE

assert:测试逻辑是否正确,这个在groovy应用非常广泛

assert 1 == 2

会报告有逻辑错误,常用来测试方法的输出是否正确
3.3 标识符
普通标识符:字符,$和_ 组成
引用标识符:.开头,可用单引号或双引号括住,groovy所有字符串都可以当做引用表示符号

  per.name="xx"

下面三种引用等价:

  per.name
  per.'name'
  per."name"

3.4 循环语句
while/for/for-in 和java基本一样

for(i in 0..10){ } //k的类型可以省略

3.5 条件语句
if/if-else/switch
switch与java不同的地方为:
case可以使用任何对象,尤其是在case中使用List和Range,使分支满足多个条件。

def x = 1
switch(x){
  case 1:
  break
  case "xxx":
  break
  case [1,2,3]:
  break
  case 2..6:
  break
  default:
}

3.6 trait(特征)
这个在实际中很少用到
需要了解的是trait的多继承和冲突覆盖问题。
3.7 闭包closure
闭包是个非常重要的概念,在groovy和python中有大量应用,可以很方便的解决很多问题。这在下一节中仔细讲解。

4 数据结构

groovy有三种数据结构:List/Map/Range
4.1 List:列表
定义:

def list1 = [] //空list
def list2 = [1,2,3] //int型
def list3 = ['1','2','3'] //字符串类型
def list4 = [1,2,[3,4]] //嵌套类型
def list5 = [1,2,"3",[4,6],8.2] //异构类型

常用方法:
增加:add()/<</+=/list[list.size()+1]/plus() 注意这些方法的不同
增加一个元素add,增加多个元素时plus()
删除:pop()/minus()/-=/remove()
清除:clear()
索引:get()/getAt() //getAt()支持负索引,[]根据下标索引
解开:flatten()
翻转:reverse()
排序:sort()
求和:sum() //可指定初始值
最值:max()/min()
添加:join() //为每个元素之间添加字符串
注入:inject() //累积功能
不完整切片:groovy支持不完整的切片

def list = [1,2,3,4,5]
list[0,2] //下标为0,2的值
list[1:-1] //下标为1到-1的值

遍历操作:for-in/闭包函数each,find,collect

def list = [1,2,3,4]
//for-in遍历
for(e in list){
	print(e)
}
//闭包:each遍历
list.each{
	if(it == 3)
		return true //each循环控制:相当于contiune
	print(it)
}
//闭包:find遍历
list.find{
	if(it == 3)
		return true //find循环控制:相当于break
	print(it)
}
//闭包:collect遍历,其将输出的结果作为一个集合返回
list.collect{
	it + 1 //将所有元素加1
}

过滤操作:find/indexOf/every/any/inject

list = [1,2,3,4,5]
list.find{ it > 1} //找出第一个符合条件的元素
list.findAll{ it > 1} //找出所有符合条件的元素,结果为List,[2,3,4,5]
list.indexOf(1) //返回元素在list的下标,没有找到则返回-1
list.every{ it > 2} //如果每一个元素都满足,则返回true
list.any{ it > 1} //如果有任意一个元素满足则返回true

4.2 Map:映射
定义:

def map = [:]
def map1 = [1:2]

方法:
添加:put()/putAll()
删除:remove()
包含:containsKey/containsValue
取值:get() //获取键对应的值
索引:.key //key为下标,map.key等价与map.[“key”]
遍历:for-in/闭包方法each/find

def map = [1:2,3:4]
map.each{ println("$it.key:$it.value")}
map.find{ if(it.key == 1){ } }
for(e in map){ }

4.3 Range:范围
其实是一个连续的List,常用在for-in循环
定义:

1..10 //1到10
1..<10 //1到9

5 groovy方法

1.定义方法:关键字def或者返回值类型

def function(){
	print("xxx")
}

定义带参数的方法:参数可以不指定类型

def function(p1,p2){
	print("xxx")
}

定义带默认值参数的方法:

def function(p1,p2,p3=3){
	print("xxx")
}

方法返回值:
方法可以返回值可以为void
可以用return返回一个值
没有return,则将最后一行表达式的值返回

def function(p1,p2){
	p1 + p2
	p1 * p2  //返回的是该处的值
}

下一篇:闭包https://blog.csdn.net/weixin_42774617/article/details/107775453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值