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框架。

Grovvy初识的更多相关文章

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  3. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  5. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  8. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  9. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. paypal IPN 接口返回INVALID参数可能问题

    工作于浏览器Chrome时,登录IPN Simulator页发送测试数据,payment_date栏位值中出现乱码,导致无法返回正确的VERIFIED,在此记录.

  2. NOIP2009普及组细胞分裂(数论)——yhx

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...

  3. 怎么在ZBrush中渲染漫画风格的插画

    创建“漫画插画”的外观和感觉想必一定很有趣吧,但是,获得想要的精确外观有时也会令人相当沮丧,因此了解一些基本原则,创建类似于ZBrush漫画MatCaps的作品很有必要. 若有疑问亦或者想查看具体的视 ...

  4. ZOJ 3659 & HDU 4424 Conquer a New Region (并查集)

    这题要用到一点贪心的思想,因为一个点到另一个点的运载能力决定于其间的边的最小权值,所以先把线段按权值从大到小排个序,每次加的边都比以前小,然后合并集合时,比较 x = findset(a) 做根或 y ...

  5. Flash Builder 找不到所需的 Adobe Flash Player

    经测试该方法可用! http://bbs.9ria.com/thread-108472-1-1.html 最近重装了系统,flash开发工具也由flex换成了flash builder.调试时就出现了 ...

  6. java11-6 String类的其它功能

    String类的其他功能: 替换功能: String replace(char old,char new) String replace(String old,String new) 去除字符串两空格 ...

  7. Android 屏幕适配(一)百分比布局库(percent-support-lib) 解析与扩展

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46695347: 本文出自:[张鸿洋的博客] 一.概述 周末游戏打得过猛,于是周 ...

  8. R 语言assign 和get 函数用法

    assign函数在循环时候,给变量赋值,算是比较方便 1.给变量赋值 for (i in 1:(length(rowSeq)-1)){ assign(paste("nginx_server_ ...

  9. C语言 百炼成钢18

    //题目52:用递归打印以下图形 //* //*.*. //*..*..*.. //*...*...*...*... //*....*....*....*....*.... #include<s ...

  10. [转]开发Visual Studio风格的用户界面--MagicLibrary使用指南

    本文的示例代码为可以从这里下载: 1           概述 微软Visual Studio.NET开发工具推出已经好几年了,这个开发工具一推出就以其易用性和强大功能深受开发者的喜爱.尤其是.NET ...