1.什么是groovy?

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

Groovy是一种基于Java平台的面向对象语言。 Groovy 1.0于2007年1月2日发布,其中Groovy 2.4是当前的主要版本。 Groovy通过Apache License v 2.0发布。

目前最新版本为2.5.3。

2.Groovy的特点

Groovy中有以下特点:

  • 同时支持静态和动态类型
  • 支持运算符重载
  • 本地语法列表和关联数组
  • 对正则表达式的本地支持
  • 各种标记语言,如XML和HTML原生支持
  • Groovy对于Java开发人员来说很简单,因为Java和Groovy的语法非常相似
  • 您可以使用现有的Java库
  • Groovy扩展了java.lang.Object

动态类型

类型对于变量,属性,方法,闭包的参数以及方法的返回类型都是可有可无的,都是在给变量赋值的时候才决定它的类型, 不同的类型会在后面用到,任何类型都可以被使用,即使是基本类型 (通过自动包装(autoboxing)). 当需要时,很多类型之间的转换都会自动发生,比如在这些类型之间的转换: 字符串(String),基本类型(如int) 和类型的包装类 (如Integer)之间,可以把不同的基本类型添加到同一数组(collections)中。

运算符重载

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

3.类

Groovy类和java类一样,完全可以用标准java bean的语法定义一个Groovy类。但作为另一种语言,可以使用更Groovy的方式定义类,这样的好处是,可以少写一半以上的javabean代码。

(1)不需public修饰符

如前面所言,Groovy的默认访问修饰符就是public,如果Groovy类成员需要public修饰,则根本不用写它。

(2)不需要类型说明

同样前面也说过,Groovy也不关心变量和方法参数的具体类型。

(3)不需要getter/setter方法

在很多ide(如eclipse)早就可以为程序员自动产生getter/setter方法了,在Groovy中,不需要getter/setter方法--所有类成员(如果是默认的public)根本不用通过getter/setter方法引用它们(当然,如果一定要通过getter/setter方法访问成员属性,Groovy也提供了它们)。

(4)不需要构造函数

不再需要程序员声明任何构造函数,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的构造函数--由于是map类型,通过这个参数可以构造对象时任意初始化它的成员变量)。

(5)不需要;结尾

Groovy中每一行代码不需要分号作为结束符。

4. 文件与类的关系

在Groovy中类和文件的对应关系并不像Java中那么固定(Java中一个文件只能有一个声明为public的类和其他一些非公共的类和内嵌类) 。在同一个groovy文件中可以包含多个public的类定义。具体规则如下:

1、如果在一个groovy文件中没有任何类定义,它将被当做script来处理,也就意味着这个文件将被透明的转换为一个Script类型的类,这个自动转换得到的类将使用原始的groovy文件名(去掉扩展名,没有包名,在default包中)作为类的名字。groovy文件的内容被打包进run方法,另外在新产生的类中被加入一个main方法以进行外部执行该脚本。

2、如果在groovy文件正好有一个类的定义,并且该类的名字与文件名称相同,那么这就和java中的类与文件的一一对应关系相同。

3、在一个groovy文件中可以包含多个不同可见性的类定义,并且没有强制性的要求其中有一个类的类名与文件名相同。groovy编译器会很乐于把该文件中定义的所有的类都编译成*.class文件。如果希望能够直接调用这个groovy script,比如说在使用groovy命令行或者在某个IDE中执行,那么应该在该文件中的第一个类中定义一个main方法。

4、在一个groovy文件中可以混合类的定义和脚本定义。在这种情况下,那些脚本代码将会变成直接调用的主类,所以在这种情况下不应该再定义一个和文件同名的类。

5、在没有经过明确的编译过程即执行时,groovy将通过文件名来查找类。在这种情况下,名称将会很重要。Groovy只能找到那些和文件名匹配的类。在找到这种名字匹配的类时,找到的文件中定义的其他类将被解析并变得对groovy可见。

5.语法

基本类型

  • byte -这是用来表示字节值。例如2。
  • short -这是用来表示一个短整型。例如10。
  • int -这是用来表示整数。例如1234。
  • long -这是用来表示一个长整型。例如10000090。
  • float -这是用来表示32位浮点数。例如12.34。
  • double -这是用来表示64位浮点数,这些数字是有时可能需要的更长的十进制数表示。例如12.3456565。
  • char -这定义了单个字符文字。例如“A”。
  • Boolean -这表示一个布尔值,可以是true或false。
  • String -这些是以字符串的形式表示的文本。例如,“Hello World”的。
  • BigInteger类型后缀为G或g
  • Long类型后缀为L或l
  • Integer类型后缀为I或i
  • Bigdecimal类型后缀为G或g
  • Double类型后缀为D或d
  • Float类型后缀为F或f

与Java一致,但是可以不声明类型,使用def关键字。

字符

Groovy没有明确的字符类型,可以通过以下三种方式创建:

  1. char c1 = 'A'  // 类型声明为char
  2. assert c1 instanceof Character
  3. def c2 = 'B' as char  // 通过as将类型强制指定为char
  4. assert c2 instanceof Character
  5. def c3 = (char)'C'  // 通过类型转换
  6. assert c3 instanceof Character

字符串

Groovy中的字符串可以用单引号('),双引号(“)或三引号(”“”)括起来。此外,由三重引号括起来的Groovy字符串可以跨越多行

      String a = 'Hello Single'; 
      String b = "Hello Double"; 
      String c = "'Hello Triple" + "Multiple lines'";

运算符

  • 算术运算符:+、-、*、/、%、++、--
  • 关系运算符:==、!= 、<、<=、>、>=
  • 逻辑运算符:&&、||、!
  • 位运算符:&、|、^、〜

  • 赋值运算符:+=、-=、*=、/=、(%)=
  • 范围运算符:..

范围

Groovy支持java的范围方式,同时有自己的范围运算度”..”

  • 1..10 - 包含范围的示例
  • 1 ..<10 - 独占范围的示例
  • 'a'..'x' - 范围也可以由字符组成
  • 10..1 - 范围也可以按降序排列
  • 'x'..'a' - 范围也可以由字符组成并按降序排列。

列表(List)

列表是用于存储数据项集合的结构。在Groovy中,List保存了一系列对象引用。List中的对象引用占据序列中的位置,并通过整数索引来区分

要处理列表中的数据,我们必须能够访问各个元素。 Groovy列表使用索引操作符[]索引。列表索引从零开始,这指的是第一个元素。

  • [11,12,13,14] - 整数值列表
  • ['Angular','Groovy','Java'] - 字符串列表
  • [1,2,[3,4],5] - 嵌套列表
  • ['Groovy',21,2.11] - 异构的对象引用列表
  • [] - 一个空列表

数组

Groovy定义数组的方式和定义list的方式一样,只不过声明时需要制定类型,或者通过as来强制制定类型为Array。

Groovy不支持Java数组的初始化方式。

  1. String[] arrStr = ['Ananas', 'Banana', 'Kiwi']
  2. def numArr = [1, 2, 3] as int[]
  3. //多维数组
  4. def matrix3 = new Integer[3][3]

映射(Map)

映射(也称为关联数组,字典,表和散列)是对象引用的无序集合。Map集合中的元素由键值访问。 Map中使用的键可以是任何类。当我们插入到Map集合中时,需要两个值:键和值。

Map中通过[key].key的方式来获取key对应的value。如果key不存在,则返回null。

  • ['TopicName':'Lists','TopicName':'Maps'] - 具有TopicName作为键的键值对的集合及其相应的值。
  • [:] - 空映射。

闭包

闭包是一个短的匿名代码块。它通常跨越几行代码。一个方法甚至可以将代码块作为参数。它们是匿名的。

def clos = {println "Hello World"};

    clos.call(); 

正则表达式

Groovy使用~”pattern” 来支持正则表达式,它将使用给定的模式字符串创建一个编译好的Java Pattern 对象。Groovy也支持 =~(创建一个Matcher)和 ==~ (返回boolean,是否给定的字符串匹配这个pattern)操作符。

对于groups的匹配, matcher[index] 是一个匹配到的group字符串的List或者string。

正则表达式的辅助符号

                                                              正则表达式的元字符

XML及HTML支持

Groovy 引入了一些全新的、更加合理的方法来创建和处理 XML及HTML。代码更加简洁,更具表达性。

  1. XML标记构建器  Groovy支持基于树的标记生成器BuilderSupport,它可以被子类化以生成各种树结构对象表示
  2. XML解析器 - Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。

JSON

  1. JsonSlurper   JsonSlurper是一个将JSON文本或阅读器内容解析为Groovy数据的类结构,例如map,列表和原始类型,如整数,双精度,布尔和字符串。
  1. JsonOutput   此方法负责将Groovy对象序列化为JSON字符串

数据库

Groovy的groovy-sql模块提供了比当前Java的JDBC技术更高级的抽象。Groovy sql API支持各种各样的数据库,其中一些如下所示。

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

groovy语言介绍相关推荐

  1. groovy语言 累加_使用Groovy管理数据:查找和累加器

    groovy语言 累加 在关于Groovy编程语言入门的第一篇文章中 ,我以在Groovy中读取CSV文件的示例为例. 在本文中,我将转向一种更惯用的Groovy风格(就像某些人所说的那样使其成为gr ...

  2. Gradle | Gradle构建之Groovy语言基础

    前言 Gradle的构建脚本是采用Groovy语言编写的.Groovy是Java平台上设计的一种强大的.可选类型和动态的语言.Groovy可以无缝地集成任何Java程序,并立即让你的应用程序拥有强大的 ...

  3. Groovy语言 Grails框架入门

    掌握基本的 Grails 开发技术,并能够进一步独立学习 Grails 的高级功能. Grails 是搭建在动态语言 Groovy 之上的一个开源 MVC Web 开发框架,Grails 的一个显著特 ...

  4. r语言 编辑 d3.js_d3.js的语言介绍

    r语言 编辑 d3.js by Matt Oxley 由马特·奥克斯利(Matt Oxley) d3.js的语言介绍 (A linguistic introduction to d3.js) 如何从一 ...

  5. 《Groovy语言规范》-语法

    原文链接  译者:王山山 语法 本章节涵盖了Groovy编程语言的语法.Groovy语言的语法源自Java语法,为Groovy增强了特定构造,允许一定程度上的简化语法. 1.注释 1.1.单行注释 单 ...

  6. python语言简介-Python语言介绍

    原标题:Python语言介绍 Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其 ...

  7. 【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )

    文章目录 一.以动态特性编译的 Groovy 类 二.Groovy 语言与 Java 语言执行效率对比 三.以静态特性编译的 Groovy 类 一.以动态特性编译的 Groovy 类 Groovy 类 ...

  8. 【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器客户端完整代码示例 | 运行服务器端与客户端效果及过程分析 )

    文章目录 一.服务器端完整代码 Server.groovy 二.客户端完整代码 Client.groovy 三.运行服务器端与客户端效果及过程分析 一.服务器端完整代码 Server.groovy 参 ...

  9. 【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )

    文章目录 一.Groovy 支持 Java 语法 二.Groovy 支持 Java 虚拟机 三.Groovy 语言是 动态语言 四.Groovy 扩展 JDK 五.Groovy 编译时元编程 一.Gr ...

  10. Groovy语言之SpringBoot整合JDBC案例

    Groovy语言 前言 一. Groovy火吗? 二.Groovy的特点 三.使用步骤 3.1 导入pom.xml依赖 3.2 配置application.yml 3.3 编写API接口 3.4 编写 ...

最新文章

  1. Ionic css组成(三)
  2. 【调参实战】BN和Dropout对小模型有什么影响?全局池化相比全连接有什么劣势?...
  3. LeetCode 1366. 通过投票对团队排名(自定义排序)
  4. 《信息安全系统设计基础》 实验五
  5. 在虚拟宿主环境中承载 Active Directory 域控制器时需要考虑的事项
  6. 苹果手机夜间模式怎么设置_微信怎么设置夜间模式?iPhone夜间模式设置教程 省电又护眼!...
  7. JAVA(三)java基础知识
  8. Wondershare Recoverit for Mac(数据恢复套件)
  9. Mac OS10.12 编译Android源码8.1
  10. Qt QJson遍历
  11. 人人网普通登录源码爬取
  12. 机器学习实战0基础入门(一)之简单入门
  13. Net(C#)高级程序员面试题
  14. 侠客风云传服务器维护,侠客风云传服务器地址
  15. linux服务器弱密码检查,linux系统弱密码检测
  16. 考勤系统与服务器链接,考勤机怎么连接服务器
  17. RK3228开发之gc2145芯片手册分析
  18. 电子技术基础(三)_第3章集成运算放大器及其应用__基本运算电路
  19. uniapp换行符号_第15讲 : uni-app 组件 - 地图组件
  20. mySQL 2008安装MOF无法连接_安装SQL2008R2时提示:MOF编译器无法连接WMI服务器?

热门文章

  1. Access根据出生日期计算年龄_如何根据出生日期计算年龄
  2. Stable Diffusion半秒出图;VLIW的前世今生;YOLOv5全面解析教程 | AI系统前沿动态
  3. 关于OriginPRO/Origin画图消锯齿以及平滑点与点之间的连接
  4. Photoshop中曲线调整如何恢复
  5. 时钟同步显示屏(NTP时间显示屏)子母钟系统介绍
  6. huggingface datasets load_metric connecterror cannot reach
  7. TreadLocal理解
  8. java lucene 站内搜索_完整的站内搜索Demo(Lucene.Net+盘古分词)
  9. 这里有最新最全最专业的便携图形工作站硬件配置方案,来看看?
  10. vtune下载 windows_VtuneApi32e.dll