Groovy

开源公司:jcp组织

作品详情

中文名
Groovy
展开
类别
编程语言
展开
实现者
Guillaume Laforge
展开
设计者
展开
类型系统
强、动态、duck
展开
操作系统
跨平台(Java虚拟机)
展开
启发语言
Java、 Python、Ruby、Perl、SmalltalkObjective-C
展开
外文名
Groovy
展开
发行时间
2007年1月2日
展开
编程范型
面向对象、脚本语言
展开
稳定版本
2.5.8( 2019年8月6日 )
展开
系统平台
展开
许可证
Apache许可证v2.0
展开

1简介

Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。

Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程。

(概述图片来源:)

2发展历史

版本迭代

Groovy 1.0于2007年1月2日发布,并于2012年7月发布了Groovy 2.0。Groovy 2.4是Pivotal软件赞助的最后一个主要版本,截止于2015年3月。2019年8月6日更新版本2.5.8为稳定版本。

重大改进

从版本2开始,Groovy也可以静态编译,提供类型推论和Java相近的性能。

3语言特色

基本特点

1、 构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征,例如动态类型转换、闭包和元编程(metaprogramming)支持。。

2、为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。

3、 支持DSL(Domain Specific Languages领域特定语言)和其它简洁的语法,让代码变得易于阅读和维护。

4、受检查类型异常(Checked Exception)也可以不用捕获。

5、 Groovy拥有处理原生类型,面向对象以及一个Ant DSL,使得创建Shell Scripts变得非常简单。

6、在开发Web,GUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。

7、支持单元测试和模拟(对象),可以 简化测试。

8、无缝集成 所有已经存在的 Java对象和类库。

9、直接编译成Java字节码,这样可以在任何使用Java的地方 使用Groovy。

10、支持函数式编程,不需要main函数。

11、一些新的运算符。

12、默认导入常用的包。

13、断言不支持jvm的-ea参数进行开关。

14、支持对对象进行布尔求值。

15、类不支持default作用域,且默认作用域为public。

16、groovy中基本类型也是对象,可以直接调用对象的方法。

动态类型

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

闭包

闭包就是可以使用参数的代码片段,每个闭包会被编译成继承groovy.lang.Closure类的类,这个类有一个叫call方法,通过该方法可以传递参数并调用这个闭包.它们可以访问并修改在闭包创建的范围内的变量,在闭包内创建的变量在闭包被调用的范围内同样可以被引用, 闭包可以保存在变量中并被作为参数传递到方法中。

4基础语法

Helloworld程序

  {     ()    {            println();   }}

关键字

关键字作为名称建议是在Groovy编程语言中保留的特殊字。下表列出了在Groovy中定义的关键字。

asassertbreakcase
catchclassconstcontinue
defdefaultdoelse
enumextendsfalseFinally
forgotoifimplements
importininstanceofinterface
newpullpackagereturn
superswitchthisthrow
throwstraittruetry
while

内置数据类型

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”的。

绑定值

下表显示了数字和小数点文字中的最大允许值。

byte-128到127
short-32,768到32,767
int2,147,483,648 到,147,483,647
long-9,223,372,036,854,775,808到+9,223,372,036,854,775,807
float1.40129846432481707e-45到3.40282346638528860e + 38
double4.94065645841246544e-324d 到1.79769313486231570e + 308d

数字类

类型除了基本类型,还允许以下对象类型(有时称为包装器类型)-

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克

以下代码示例说明如何使用不同的内置数据类型 -

  {         {              x = ;              y = ;              a = ;              b = ;             BigInteger bi = g;             BigDecimal bd = g;       println(x);       println(y);       println(a);       println(b);       println(bi);       println(bd);    } }

当我们运行上面的程序,我们会得到以下结果 -

运算符

算术运算符

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中可用的位运算符 -

显示示例

运算符描述
这是位“与”运算
|这是按位“或”运算
^这是按位“异或”或异或运算符
这是按位反运算符

这里是显示这些运算符的真值表。

pqp&Qp | qp ^ Q
00000
01011
11110
10011

赋值运算符

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支持范围的概念,并在..符号的帮助下提供范围运算符的符号。下面给出了范围运算符的一个简单示例。

  = 0..5 

这只是定义了一个简单的整数范围,存储到一个局部变量称为范围内的下限为0和上限为5。

以下代码段显示了如何使用各种运算符。

  {      ()    {       def range = ;       println(range);       println(range.());    } }

当我们运行上面的程序,我们会得到以下结果 -

从println语句中,可以看到显示在range语句中定义的整个数字范围。

get语句用于从定义的范围中获取一个对象,它将索引值作为参数。

[, , , , , ] 

运算符优先级

下表按优先级顺序列出了所有groovy运算符

运算符名称
++ - + -预增/减,一元加,一元减
* / %乘法,除法,取模
+ -加法,减法
==!= <=>等于,不等于,比较
二进制/位运算符与
^二进制/位异或
|二进制/按位或
&&逻辑和
||逻辑或
= ** = * = / =%= + = - = << = >> = >>> = = ^ = | =各种赋值运算符

读取文件

以下示例将输出Groovy中的文本文件的所有行。方法eachLine内置在Groovy中的File类中,目的是确保文本文件的每一行都被读取。

 java.io.File   {          {        File().eachLine       {           line -> println ;       }    } }

File类用于实例化以文件名作为参数的新对象。然后它接受eachLine的函数,将它放到一个line的变量并相应地打印它。如果文件包含以下行,它们将被打印。

 :  : 

读取文件的内容到字符串

如果要将文件的整个内容作为字符串获取,可以使用文件类的text属性。以下示例显示如何完成此操作。

 {          {       File file =  File()       println file.text    } }

如果该文件包含以下行,它们将被打印出来。

 :  : 

写入文件

如果你想写入文件,你需要使用作家类输出文本到一个文件中。下面的例子说明了如何可以做到这一点。

 java.io.File   {          {        File(,).withWriter()       {          writer -> writer.writeLine        }     } }

如果你打开文件example.txt文件,您将看到文本中打印了“Hello World”这个词。

获取文件的大小

如果要获取文件的大小,可以使用文件类的length属性来获取,以下示例显示如何完成此操作。

 {         {      File file =  File()      println    } }

上面的代码将显示文件的大小(以字节为单位)。

测试文件是否是目录

如果要查看路径是文件还是目录,可以使用File类的isFile和isDirectory选项。以下示例显示如何完成此操作。

  {      ()    {       def file =  File()       println        println     } }

上面的代码将显示以下输出 -

File?  Directory? 

创建目录

如果要创建一个新目录,可以使用File类的mkdir函数。以下示例显示如何完成此操作。

  {     () {      def file =  File()      file.mkdir()   } }

如果目录E:\ Directory不存在,将创建它。

删除文件

如果要删除文件,可以使用File类的delete功能。以下示例显示如何完成此操作。

  {     () {      def file =  File()      file.delete()   } }

如果存在该文件将被删除。

复制文件

Groovy还提供将内容从一个文件复制到另一个文件的功能。以下示例显示如何完成此操作。

  {   static void main(String[] args) {        =  )        =  )      dst << src.text   } }

将创建文件Example1.txt,并将文件Example.txt的所有内容复制到此文件。

获取目录内容

Groovy还提供了列出驱动器中的驱动器和文件的功能。

以下示例显示如何使用File类的listRoots函数显示机器上的驱动器。

  {       {       def rootFiles =  File().listRoots()       rootFiles.each {          file -> println file.absolutePath       }   }}

根据机器上可用的驱动器,输出可能会有所不同。在标准机器上的输出将类似于下面的一个 -

以下示例显示如何使用File类的eachFile函数列出特定目录中的文件。

  {      {       File().eachFile() {           file->println file.getAbsolutePath()      }   } }

输出将显示目录E:\ Temp中的所有文件

如果要递归显示目录及其子目录中的所有文件,则可以使用File类的eachFileRecurse函数。以下示例显示如何完成此操作。

  {       {       File().eachFileRecurse() {         file -> println file.getAbsolutePath()      }   }}

输出将显示目录E:\ Temp中的所有文件及其子目录(如果存在)。

查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
案例
工作描述: ● 参与积分项目相关需求的澄清 ● 编写设计方案、接口文档 ● 需求任务拆分、开发、联调和自测,有风险点及时上报 ● 部署方案评审,编写需求发布及验证方案、回滚切流方案 ● 版本日全程支撑,需求上线后持续跟进 工作成果: ● 配合银行合规改造需求,设计开发轻量级审批框架,节省了大量的开发人力 ● 开发推进老后管迁移需求,积极主动配合业务和产品提出的迁移优化项 ● 负责积分跑批系统的开发,包括积分的计算、生成、清算等核心功能,提高了系统的效率和可靠性。
某银行变量中心模块项目 主要模块:tccb批处理、decision变量计算 主要职责: 1.国产数据库改造迁移; 2.变量相关需求开发; 3.批处理同步任务开发;
功能模块:1,消息系统 2,常购清单 3,产品特征维度 4,出库单 5,入库单 6,调拨单 使用技术:1,ofbiz 2,solr 3,MySQL 4,Layui 用户案例:1杭州Hello Kitty Park 2盘点美味
自研报表系统后台搭建,应用springboot,mybatis,groovy脚本等 解决部分润乾报表无法完成的功能,如嵌入pdf,checkbox等
180springboot微服务报表
1、项目分为司乘对话、在线客服、开放平台三个模块,其中在线客服分为人工客服和智能客服,智能客服模块使用阿里云智能客服模块;开放平台接入高德和美团IM服务; 2、使用netty实现websocket协议,使用一致性哈希保障了同一用户总是请求到同一服务器,降低了长链接服务的复杂性。
当前共43个项目

评论