w3cschool-Groovy 教程
Groovy的特点
Groovy中有以下特点:
- 同时支持静态和动态类型。
- 支持运算符重载。
- 本地语法列表和关联数组。
- 对正则表达式的本地支持。
- 各种标记语言,如XML和HTML原生支持。
- Groovy对于Java开发人员来说很简单,因为Java和Groovy的语法非常相似。
- 您可以使用现有的Java库。
- Groovy扩展了java.lang.Object。
Groovy 环境
groovy---安装指南
brew install groovy
export GROOVY_HOME=/usr/local/opt/groovy/libexec
看到这个说明已经安装好了, 然后有一段话:
You should set GROOVY_HOME: export GROOVY_HOME=/usr/local/opt/groovy/libexec
意思是你应该设置groovy环境变量
vi ~/.bash_profile
将下面的语句添加进去
GROOVY_HOME: export GROOVY_HOME=/usr/local/opt/groovy/libexec
然后使用groovy -version命令去查看下
hanwenda@bogon bin % vi ~/.bash_profile
hanwenda@bogon bin % source ~/.bash_profile
hanwenda@bogon bin % groovy -veresion
Groovy Version: 4.0.0 JVM: 1.8.0_321 Vendor: Oracle Corporation OS: Mac OS X
有多种方式来获得的Groovy环境设置。
下载和安装 -进入该链接www.groovy-lang.org/download.html获得Windows安装程序部分。

启动Groovy安装程序,然后请执行以下完成安装步骤。
第1步 -选择语言安装程序。

第2步 -点击下一步按钮。

第3步 -点击“我同意”按钮。

第4步 -接受默认组件,然后单击下一步按钮。

第5步 -选择适当的目标文件夹,然后单击下一步按钮。

第6步 -点击安装按钮开始安装。

第7步 -一旦安装完成后,单击下一步按钮开始配置。

第8步 -选择默认选项,并单击下一步按钮。

第9步 -接受默认的文件关联,然后单击下一步按钮。

第10步 -单击Finish按钮完成安装。

一旦上述步骤之后,你就可以开始使用Groovy shell,有助于测试我们的Groovy,而不需要为Groovy提供一个完整的集成开发环境。可以通过在命令提示符下命令groovysh来完成。

Gradle
'org.codehaus.groovy:groovy:2.4.5'
Maven
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.4.5</version>
内置数据类型
Groovy提供多种内置数据类型。以下是在Groovy中定义的数据类型的列表 -
byte -这是用来表示字节值。例如2。
short -这是用来表示一个短整型。例如10。
int -这是用来表示整数。例如1234。
long -这是用来表示一个长整型。例如10000090。
float -这是用来表示32位浮点数。例如12.34。
double -这是用来表示64位浮点数,这些数字是有时可能需要的更长的十进制数表示。例如12.3456565。
char -这定义了单个字符文字。例如“A”。
Boolean -这表示一个布尔值,可以是true或false。
String -这些是以字符串的形式表示的文本。例如,“Hello World”的。
数字类
类型除了基本类型,还允许以下对象类型(有时称为包装器类型)-
- java.lang.Byte
- java.lang.Short
- java.lang.Integer
- java.lang.Long
- java.lang.Float
- java.lang.Double
此外,以下类可用于支持高精度计算 -
| 名称 | 描述 | 例如 |
|---|---|---|
| java.math.BigInteger | 不可变的任意精度的有符号整数数字 | 30克 |
| java.math.BigDecimal | 不可变的任意精度的有符号十进制数 | 3.5克 |
算术运算符
Groovy语言支持正常的算术运算符任何语言。以下是在Groovy中可用的算术运算符 -
| 运算符 | 描述 | 例子 |
| + | 两个操作数的加法 | 1 + 2 将得到 3 |
| - | 第一第二操作数相减 | 2 - 1 将得到 1 |
| * | 两个操作数的乘法 | 2 * 2 将得到4 |
| / | 两个操作数的除法 | 3/2 将得到 1.5 |
| % | 取模运算 | 3%2 将得到 1 |
| ++ | 自增运算,在自身值的基础上加1 |
INT X = 5; X ++; X 将得到 6 |
| -- | 自减运算,在自身值的基础上减1 |
INT X = 5; X - -; X 将得到 4 |
关系运算符
关系运算符允许对象的比较。以下是在Groovy中可用的关系运算符 -
| 运算符 | 描述 | 例子 |
|---|---|---|
| == | 测试两个对象之间是否相等 | 2 == 2 将得到 true |
| != | 测试两个对象之间是否不等 | 3 != 2 将得到 true |
| < | 检查是否左边的对象是小于右边的对象。 | 2 < 3 将得到 true |
| <= | 检查是否向左对象是小于或等于右边的对象 | 2 <= 3 将得到 true |
| > | 检查是否左边的对象比右边的对象大。 | 3 > 2 将得到 true |
| >= | 检查是否向左对象大于或等于右边的对象。 | 3>= 2 将得到 true |
逻辑运算符
逻辑运算符用于计算布尔表达式。以下是在Groovy中提供的逻辑运算符 -
| 运算符 | 描述 | 例子 |
|---|---|---|
| && | 这是逻辑“与”运算 | true && true 得到 true |
| || | 这是逻辑“或”运算 | true || true 得到 true |
| ! | 这是逻辑“非”运算 | !true 得到 false |
位运算符
Groovy中提供了四个位运算符。以下是在Groovy中可用的位运算符 -
| 运算符 | 描述 |
|---|---|
| & | 这是位“与”运算 |
| | | 这是按位“或”运算 |
| ^ | 这是按位“异或”或异或运算符 |
| 〜 | 这是按位反运算符 |
这里是显示这些运算符的真值表。
| p | q | p&Q | p | q | p ^ Q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
赋值运算符
Groovy语言也提供了赋值操作符。以下是在Groovy提供的赋值运算符 -
| 运算符 | 描述 | 例子 |
|---|---|---|
| += | A += B 等价于 A = A+B |
DEF A = 5 A += 3 输出将是8 |
| -= | A -= B 等价于 A = A-B |
DEF A = 5 A -= 3 输出将是2 |
| *= | A *= B 等价于 A= A*B |
DEF A = 5 A *= 3 输出将是15 |
| /= | A /= B 等价于 A = A/B |
DEF A = 6 A /= 3 输出将是2 |
| (%)= | A (%)= B 等价于 A = A % B |
DEF A = 5 A %= 3 输出将是2 |
范围运算符
Groovy支持范围的概念,并在..符号的帮助下提供范围运算符的符号。下面给出了范围运算符的一个简单示例。
def range = 0..5
这只是定义了一个简单的整数范围,存储到一个局部变量称为范围内的下限为0和上限为5。
以下代码段显示了如何使用各种运算符。
class Example {
static void main(String[] args) {
def range = 5..10;
println(range);
println(range.get(2));
}
}
当我们运行上面的程序,我们会得到以下结果 -
从println语句中,可以看到显示在range语句中定义的整个数字范围。
get语句用于从定义的范围中获取一个对象,它将索引值作为参数。
[5, 6, 7, 8, 9, 10]
7
运算符优先级
下表按优先级顺序列出了所有groovy运算符(仅列出部分运算符)
| 运算符 | 名称 |
|---|---|
++ ,-- ,+ ,- |
预增/减(自增/减),一元加,一元减 |
*, /, % |
乘法,除法,取模 |
+,- |
加法,减法(二元) |
==,!=, <=> |
等于,不等于,比较运算符 |
& |
二进制/位运算符与 |
^ |
二进制/位异或 |
| |
二进制/按位或 |
| ! | 逻辑非 |
&& |
逻辑与 |
|| |
逻辑或 |
=,+=,-=,*=,/=,%=,**= |
各种赋值运算符 |
Groovy 方法
Groovy 中的方法是使用返回类型或使用 def 关键字定义的。方法可以接收任意数量的参数。定义参数时,不必显式定义类型。可以添加修饰符,如 public,private 和 protected。默认情况下,如果未提供可见性修饰符,则该方法为 public。
最简单的方法是没有参数的方法,如下所示:
def methodName() {
//Method code
}
下面是一个简单方法的例子
class Example {
static void sum(int a,int b) {
int c = a+b;
println(c);
}
static void main(String[] args) {
sum(10,5);
}
}
Groovy 文件I/O
Groovy在使用I / O时提供了许多辅助方法,Groovy提供了更简单的类来为文件提供以下功能。
- 读取文件
- 写入文件
- 遍历文件树
- 读取和写入数据对象到文件
除此之外,您始终可以使用下面列出的用于文件I / O操作的标准Java类。
- java.io.File
- java.io.InputStream
- java.io.OutputStream
- java.io.Reader
- java.io.Writer
基本字符串操作
首先让我们学习groovy中的基本字符串操作。它们在下面给出。
| 序号 | 字符串操作和描述 |
|---|---|
| 1 | Concatenation of two strings
字符串的串联可以通过简单的'+'运算符来完成。 |
| 2 | String Repetition
字符串的重复可以通过简单的'*'运算符完成。 |
| 3 | String Length
由字符串的length()方法确定的字符串的长度。 |
字符串方法
这里是String类支持的方法列表。
| 序号 | 方法和描述 |
|---|---|
| 1 | center()
返回一个新的长度为numberOfChars的字符串,该字符串由左侧和右侧用空格字符填充的收件人组成。 |
| 2 | compareToIgnoreCase()
按字母顺序比较两个字符串,忽略大小写差异。 |
| 3 | concat()
将指定的String连接到此String的结尾。 |
| 4 | eachMatch()
处理每个正则表达式组(参见下一节)匹配的给定String的子字符串。 |
| 5 | endsWith()
测试此字符串是否以指定的后缀结尾。 |
| 6 | equalsIgnoreCase()
将此字符串与另一个字符串进行比较,忽略大小写注意事项。 |
| 7 | getAt()
它在索引位置返回字符串值 |
| 8 | indexOf()
返回此字符串中指定子字符串第一次出现的索引。 |
| 9 | matches()
它输出字符串是否匹配给定的正则表达式。 |
| 10 | minus()
删除字符串的值部分。 |
| 11 | next()
此方法由++运算符为String类调用。它增加给定字符串中的最后一个字符。 |
| 12 | padLeft()
填充字符串,并在左边附加空格。 |
| 13 | padRight()
填充字符串,并在右边附加空格。 |
| 14 | plus()
追加字符串 |
| 15 | previous()
此方法由CharSequence的 - 运算符调用。 |
| 16 | replaceAll()
通过对该文本的关闭结果替换捕获的组的所有出现。 |
| 17 | reverse()
创建一个与此String相反的新字符串。 |
| 18 | split()
将此String拆分为给定正则表达式的匹配项。 |
| 19 | subString()
返回一个新的String,它是此String的子字符串。 |
| 20 | toUpperCase()
将此字符串中的所有字符转换为大写。 |
| 21 | toLowerCase()
将此字符串中的所有字符转换为小写。 |
Groovy 范围
范围是指定值序列的速记。范围由序列中的第一个和最后一个值表示,Range可以是包含或排除。包含范围包括从第一个到最后一个的所有值,而独占范围包括除最后一个之外的所有值。这里有一些范例文字的例子 -
- 1..10 - 包含范围的示例
- 1 .. <10 - 独占范围的示例
- 'a'..'x' - 范围也可以由字符组成
- 10..1 - 范围也可以按降序排列
- 'x'..'a' - 范围也可以由字符组成并按降序排列。
以下是可用于范围的各种方法。
| 序号 | 方法和描述 |
|---|---|
| 1 | contains()
检查范围是否包含特定值 |
| 2 | get()
返回此范围中指定位置处的元素。 |
| 3 | getFrom()
获得此范围的下限值。 |
| 4 | getTo()
获得此范围的上限值。 |
| 5 | isReverse()
这是一个反向的范围,反向迭代 |
| 6 | size()
返回此范围的元素数。 |
| 7 | subList()
返回此指定的fromIndex(包括)和toIndex(排除)之间的此范围部分的视图 |
Groovy 列表
列表是用于存储数据项集合的结构。在 Groovy 中,List 保存了一系列对象引用。
List 中的对象引用占据序列中的位置,并通过整数索引来区分。
列表文字表示为一系列用逗号分隔并用方括号括起来的对象。
groovy 列表使用索引操作符 [] 索引。列表索引从 0 开始,指第一个元素。
groovy 中的一个列表中的数据可以是任意类型。这 java 下集合列表有些不同,java 下的列表是同种类型的数据集合。
groovy 列表可以嵌套列表。如 [1,2,[3,4,5],“aaa”] groovy 列表内置有反转方法 reverse()。调用 List.reverse() 可以实现列表反转。groovy 列表内置有排序方法 sort()。调用 List.sort() 可以实现列表排序。空列表表示为 [] 声明一个空集合:
def list1 = []
def list2 = [1,2,3,4]
list2.add(12)
list2.add(12)
println list1.size()
列表间的几个常用方法:
1、添加:
def list1 = [100, 101]
def list2 = [ 99,98,1]
println list2.plus(list1) //输出结果: [100, 101, 99, 98,1]
// list2.plus(list1) 也可以写成 list2 + list1
2、删除:
def list1 = [12, 13]
def list2 = [11, 2, 33, 12, 13, 16]
println list2.minus(list1) //输出结果: [11, 2, 33, 16]
//list2.minus(list1) 也可以写成 list2 - list1
在本章中,我们将讨论 Groovy 中可用的列表方法。
| 序号 | 方法和描述 |
|---|---|
| 1 | add()
将新值附加到此列表的末尾。 |
| 2 | contains()
如果此列表包含指定的值,则返回 true。 |
| 3 | get()
返回此列表中指定位置的元素。 |
| 4 | isEmpty()
如果此列表不包含元素,则返回 true |
| 5 | minus()
创建一个由原始元素组成的新列表,而不是集合中指定的元素。 |
| 6 | plus()
创建由原始元素和集合中指定的元素组成的新列表。 |
| 7 | pop()
从此列表中删除最后一个项目 |
| 8 | remove()
删除此列表中指定位置的元素。 |
| 9 | reverse()
创建与原始列表的元素相反的新列表 |
| 10 | size()
获取此列表中的元素数。 |
| 11 | sort()
返回原始列表的排序副本。 |
Groovy中的XML支持
Groovy语言还提供了对XML语言的丰富支持。使用的两个最基本的XML类是 -
XML标记构建器 - Groovy支持基于树的标记生成器BuilderSupport,它可以被子类化以生成各种树结构对象表示。通常,这些构建器用于表示XML标记,HTML标记。 Groovy的标记生成器捕获对伪方法的调用,并将它们转换为树结构的元素或节点。这些伪方法的参数被视为节点的属性。作为方法调用一部分的闭包被视为生成的树节点的嵌套子内容。
XML解析器 - Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。
Groovy JMX
JMX是defacto标准,用于监控与Java虚拟环境有任何关系的所有应用程序。鉴于Groovy直接位于Java之上,Groovy可以利用已经为Java实现的大量工作。
监视JVM
可以使用java.lang.management中提供的标准类来执行JVM的监视。以下代码示例说明如何完成此操作。
Groovy JSON
JSON功能
| 功能 | 库 |
|---|---|
| JsonSlurper |
JsonSlurper是一个将JSON文本或阅读器内容解析为Groovy数据的类 结构,例如地图,列表和原始类型,如整数,双精度,布尔和字符串。 |
| JsonOutput | 此方法负责将Groovy对象序列化为JSON字符串。 |
使用JsonSlurper解析数据
JsonSlurper是一个将JSON文本或阅读器内容解析为Groovy数据结构的类,如地图,列表和原始类型,如Integer,Double,Boolean和String。
w3cschool-Groovy 教程的更多相关文章
- JavaScript 实例 | w3cschool菜鸟教程
JavaScript 实例 | w3cschool菜鸟教程 http://www.w3cschool.cc/js/js-examples.html
- w3cschool菜鸟教程离线版chm手册正式发布
w3cschool菜鸟教程是一个提供了最全的的web技术基础教程网站.网站包含了HTML教程.CSS教程.Javascript教程.PHP教程等各种建站基础教程.同时也提供了大量的在线实例,通过实例, ...
- w3cschool在线教程
做网页开发的,没有不知道w3cschool的,如果你还不知道,那么就应该早点看下面推荐的文章,菜鸟可以帮你提升你的技能,老鸟可以温故而知新. 第一个是:http://www.w3school.com. ...
- W3Cschool菜鸟教程离线版下载链接
请在电脑上打开以下链接进行下载w3cschool 离线版(chm):http://pan.baidu.com/s/1bniwRCV(最新,2014年10月21日更新)w3cschool 离线版(htm ...
- HTML5 Canvas | w3cschool菜鸟教程
HTML5 Canvas <canvas> 标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形.. 在画布上(Canvas)画一个红色矩形,梯度矩形,彩色矩形,和一些彩色的文字. ...
- [置顶] IOS 基础入门教程
IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...
- UML 教程
UML 教程 关键词:部署图, 组件图, 包图, 类图, 复合结构图, 对象图, 活动图, 状态机图, 用例图, 通信图, 交互概述图, 时序图, 时间图 简介 部署图 组件图 包图 类图 复合结构图 ...
- 【微信小程序】:客服消息教程
1.本教程完全链接W3Cschool的教程,已经讲的非常清晰和透彻. 2.链接:https://www.w3cschool.cn/weixinapp/weixinapp-api-custommsg-c ...
- 在w3cschool学完html,css,javascript,jquery以后,还是不会做前端怎么办?
w3cschool是一个非盈利性的在线技术学习网站,提供按W3C标准编写的基础教程.完整的看完w3cschool上面的手册,可以基本掌握编程语法.基础性的东西通常都会比较零散,因此,在学习一段时间后, ...
- Git 相关工具及教程地址
一.Git GUI 客户端 Git 客户端下载(Windows) TortoiseGit 客户端下载(Windows) Sourcetree 客户端下载(Windows.Mac) Git Extens ...
随机推荐
- 让性能提升56%的Vue3.5响应式重构之“版本计数”
前言 Vue3.5响应式重构主要分为两部分:双向链表和版本计数.在上一篇文章中我们讲了 双向链表 ,这篇文章我们接着来讲版本计数. 欧阳年底也要毕业了,加入欧阳的面试交流群(分享内推信息).高质量vu ...
- RAC:无训练持续扩展,基于检索的目标检测器 | ECCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Online Learning via Memory: Retrieval-Augmented Detector Adaptation 论文地 ...
- 进程相互作用之信号量PV操作及其代码实现
目录 信号量PV操作 基本介绍 数据结构 解决进程互斥问题 解决进程同步问题 代码实现(以同步问题为例) 信号量PV操作 基本介绍 信号量(Semaphore):是表示资源的实体,是一个与队列有关的整 ...
- PCI 设备 RTX 驱动开发方法 -5565反射内存
PCI 设备 RTX 驱动开发方法 RTX 下操作外设时, 需要把设备从 Windows 移动到 RTX 下面,具体移植方法可以参考 RTX Help 文档中间 Converting a Window ...
- 【Playwright + Python】系列(九)Playwright 调用 Chrome 插件,小白也能事半功倍
哈喽,大家好,我是六哥!今天我来给大家分享一下如何使用playwight调用chrome插件,面向对象为功能测试及零基础小白,我尽量用大白话的方式举例讲解,力求所有人都能看懂,建议大家先收藏,以免后面 ...
- 数字IC知识点:处理多个时钟
1. 多时钟域 图1.多时钟域 对于工程师来说,开发含多个时钟(见图1)的设计是一种挑战. 这样的设计中可能有以下任何一个,或者全部类型的时钟关系: 时钟的频率不同 时钟频率相同,但相位不同 以上两种 ...
- 读书笔记-C#8.0本质论-03
15. 委托和lambda表达式 15.1 委托概述 namespace ConsoleApp1; internal static class Program { private enum SortT ...
- zynq 按照传统的Linux开发模式制作系统
参考资料 xilinx wiki: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/460653138/Xilinx+Open+Source ...
- Java深度历险(六)——Java注解——(七)——Java反射与动态代理
在开发Java程序,尤其是Java EE应用的时候,总是免不了与各种配置文件打交道.以Java EE中典型的S(pring)S(truts)H(ibernate)架构来说,Spring.Struts和 ...
- pip之加速
开发的时候, 经常会遇到使用pip安装某个包的时候很慢,甚至安装失败的情况, 当然可以设置--default-timeout=100方法来设置超时时间(默认是15秒),但是并不能解决实质问题.需要进行 ...