Grovvy初识

1.Groovy和Java对比

Groovy的松散的语法允许省略分号和修饰符

除非另行指定,Grovvy的所有内容都为public

Grovvy允许定义简单脚本,同时无需定义正规的class对象

Grovvy在普通的常用java对象上增加了一些独特的方法和快捷方式,使得他们更容易使用

Grovvy语法还允许省略变量类型

关于闭包:可以将闭包想象成为一个代码块,可以现在定义,以后再执行。可以使用这些强大的构造做许多漂亮的事情,不过最著名的是简化迭代。使用Grovvy之后,就有可能也不再需要编写Iterator实例了。

动态的mGroovy:从技术山讲,Grovvy可能是您最近通水的类型最松散的动态语言之一。从这个角度讲,Groovy有java的区别很大,java语言是一种固定的类型语言。在Groovy中类型是可选的。所以不必输入String myStr="Hello",来声明String变量。可以直接使用def进行不指定类型定义,类似于java中的var.

与java交互:用Grovvy编写的任何内容都可以编译成标准的java泪文件并在java代码中重用。类似地,用标准的java代码编写的内容也是可以在Grovvy中重用。

2.用实例演示Java和Grovvy的区别

用java编写的Hello World

public  class HelloWorld{

public static void main(String[] args){

System.out.println("Hello World");

}

}

编译和运行Java示例

编译 c:>javac HelloWorld.java

执行 c:>java HelloWorld

用Grovvy编写的Hello World

Grovvy支持松散的java语法,例如,不需要为打印Hello World这样的简单操作定义类

而且,Grovvy使日常的编码活动变得更容易。例如,Grovvy允许驶入peinrln,而无须输入System.out.println。。当输入println时,Grovvy会非常聪明的知道您的System.out

所以用Grovvy编写Hello World的程序就上如下:

println "Hello World"

请注意,在这段代码周围没有类结构,而且也没有方法结构!我还使用 println 代替了 System.out.println

运行Grovvy示例:

假设文件为

/home/amosli/developsoft/language/groovy/test/Hello.groovy

如果已经设置了Grovvy的环境变量,那么只需输入:

更快捷的方式:

如果有环境变量就变成了:

这会有相同的结果,而且甚至无须定义任何文件。

3Grovvy是没有类型的java代码

类型定义:

为什么要有类型定义:在java中,如果要声明一个String变量,则必须输入:

String value="Hello world";

但是,如果仔细想想,就会看出,等号右侧的字符已经表明 value 的类型是 String。所以,Groovy 允许省略 value 前面的 String 类型变量,并用 def 代替。

def value="hello world"

实际上,Grovvy会根据对象的值来判断他的类型。

运行程序!

将HelloWorld.grovvy文件中的代码编辑成下面这样

4.通过Grovvy进行循环

方式1:

这里可以定义i为int或者def,或者不定义其类型

方式2:

使用in进行循环,其中..表示“到”,0..5表示0到5.类似于0<=5;这里循环6次。

可以使用0..<5进行限定。类似于0<5循环5次。

5.Grovvy中的集合

1)Grovvy中的list

注意:assert命令用来证明范围是java.util.List的实例,接着运行这个代码,。证实该范围是类型List的集合。

Grovvy的语法:

coll看起来很像一个java语言中的数组,实际上他是一个Collection。要在普通的java代码中得到集合的相同实例,必须执行以下操作。

在java黛娜中,必须使用add()向ArrayList实例添加项。

而Grovvy中则提供了三种方法:

查找元素:

Grovvy中的特殊方法:

Grovvy中的特殊方法:

join()和count()只是在任何项List都可以调用的众多方法中的两个,分布操作符是个提别方便的工具,使用这个工具不要再集合上迭代,就能够调用集合每个项上的方法。

假设有一个String列表,现在想将列表中的项目全部变成大写,可以编写以下代码:

assert ["JAVA", "GROOVY"] ==

["Java", "Groovy"]*.toUpperCase()

注意*.标记。对于以上列表中的每个值,都会调用toUpperCase().生成的集合中每个String实例都是大写的。

2)Grovvy中的Map

java语言中的映射是名称-值对的集合。所以,要用java代码创建典型的映射,必须像如下这样:

Grovvy使得处理映射的操作像处理列表一样简单,例如,可以用Grovvy将上面的java映射写成:

注意:Grovvy映射中的键不必恃String.在这个示例中,name看起来像一个变量,但是在幕后,Grovvy会将它变成String.

验证hash格式:

assert   hash.getClass()==java.util.LinkedHashMap

Grovvy中Hash的Set/Get

注意:在使用[]语法从映射获取项时,必须将项作为String引用。

6Grovvy中的闭包

java的Iterator实例,用它在集合上迭代,就像下面这样。

注意,each直接在acoll实例内调用,而acoll实例的类型是ArrayList.在each调用之后,引入了一种新的语法{,代码}。由{}包围起来的代码块就是闭包。

闭包中的it变量是一个关键字,指向被调用的外部集合的每个值-他是默认值,可以用传递给闭包的参数覆盖他。下面的代码执行同样的操作,但使用自己的项变量:

在这个示例中,用value代替了Grovvy的默认it.

请注意,闭包还允许使用多个参数,在上面的实例中,包含两个参数(key和value)

凡是集合或一系列的内容,都可以使用下面这样的代码进行迭代。

这段代码是名为excite的闭包,这个闭包接受一个参数(名为word)返回的String是word变量加两个感叹号。请注意String实例中替换的用法。在String中使用${value}语法将告诉Grovvy替换String中的某个变量的值。可以将这个语法当成return word+"!!"的快捷方式。

输出this is Grovvy

7Groovy中的类

新建一个类song

Groovy 自动提供一个构造函数,构造函数接受一个名称-值对的映射,这些名称-值对与类的属性相对应。这是 Groovy 的一项开箱即用的功能 — 用于类中定义的任何属性,Groovy 允许将存储了大量值的映射传给构造函数。映射的这种用法很有意义,例如,您不用初始化对象的每个属性。

也可以添加下面这样的代码:

也可以添加像下面这样直接操纵类的属性:

在Song类中,添加以下代码:

8 Grovvy中的单元测试

在Intellij中只需要加入@Test注解就可以使用JUnit测试

加个?可以防止空指针的错误:

9.扩展、

如果需要用Groovy做web 项目的话可以去了解一下Grails框架。

时间: 2024-10-07 13:43:33

Grovvy初识的相关文章

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

初识React

原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

泛型的几种类型以及初识webform

今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>

最新计算机技术与管理科学应用专家——初识ERB

ERB管理系统:英文全称Enterprise Resource and Behavior,英文简称:ERB,中文名全称:企业资源与行为管理系统.ERB是由理文企业管理顾问有限公司首席管理师,现任商翼ERB企业管理系统项目总监吴志华先生,于2010年9月首先提出的.ERB不再单以供应链管理作为系统应用的基础,而是以企业行为与企业资源规划的最佳结合作为系统应用设计的核心基础,强调企业行为的规划.执行.监督与追溯,强调企业管理水平与员工素养的持续提升:提供企业行为与企业资源管理最佳结合的整体应用解决方

[OpenGL]环境搭建以及OpenGL初识

想往游戏行业发展的话,经常被提及到的就是OpenGL和DirectX,这两者听起来感觉是一门挺高深的技术,今天我也开始摸索学习OpenGL,那么OpenGL到底是什么?它和DirectX有什么区别和联系? OpenGL初识 OpenGL只是一套图形函数库 DirectX包含图形.声音.输入.网络等模块. 但就图形而论,DirectX的图形库性能不如OpenGL,OpenGL稳定,可以跨平台使用,DirectX只支持Windows平台,所以OpenGL还是有它的优势!OpenGL ES是OpenG

初识git

初识git 1 安装git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. 要使用Git,第一步当然是安装Git了.根据你当前使用的平台来阅读下面的文字: 1.1 在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git: ``` $ git The program 'git' is curren