`
mandel19
  • 浏览: 29116 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Groovy 基础(转)

阅读更多

文章分类:Java编程

一、 groovy 是什么

简单地说, Groovy 是下一代的 java 语言,跟 java 一样 , 它也运行在 JVM 中。

作为跑在 JVM 中的另一种语言, groovy 语法与 Java 语言的语法很相似。同时, Groovy 抛弃了 java 烦琐的文法。同样的语句,使用 groovy 能在最大限度上减少你的击键次数——这确实是“懒惰程序员们”的福音。

 

二、 开发环境

1、   jdk 1.5 以上

2、   eclipse+groovy plugin (支持 Groovy 1.5.7 

打开 eclipse ,通过 Software Updates > Find and Install... 菜单,使用“ Search for new features to install  下载并安装 groovy 插件。 New 一个 远程站点  url 可使用 http://dist.codehaus.org/groovy/distributions/update/  插件名  Groovy plug-in 。根据需要你可以同时选择 groovy  grails (后续会学习到):

 

 

三、 创建 groovy 项目

1、   新建一个 groovy 项目

New --> Project à Java Project 创建一个 java 项目。为了方便管理,建议在 source 中建两个 source 文件夹 java  groovy ,分别用于存储 java 源文件和 groovy 源文件:

 

2、   添加 Groovy 特性

在项目上右击, Groovy à Add Groovy Nature ,这样会在项目中添加 Groovy Libraries 

 

3、   添加 Groovy 

在项目 groovy 源文件下右键, New à Other à Groovy à Groovy Class

 

自动生成的源代码如下:

public class HelloWorld{

    /**

      * @param args

      */

    public static void main( def args){

       // TODO Auto-generated method stub

    }  

}

我们在 main 方法中加一句打印语句:

println "Hello World"

4、   编译运行 groovy 

在源文件上右键, Compile Groovy File ,然后右键, Run As à Groovy ,在控制台中查看运行结果。

实际上 groovy 语法的简练还体现在,就算整个文件中只有 println "Hello World" 这一句代码(把除这一句以外的语句删除掉吧),程序也照样能够运行。

当然,为了说明 groovy 其实就是 java ,你也可以完全按照 java 语法来编写 HelloWorld 类。 

四、 Groovy 语法简介

1、   没有类型的 java

作为动态语言, groovy 中所有的变量都是对象 ( 类似于 .net framework ,所有对象继承自 java.lang.Object) ,在声明一个变量时, groovy 不要求强制类型声明,仅仅要求变量名前使用关键字 def (从 groovy jsr 1 开始,在以前的版本中,甚至连 def 都不需要)。

修改 main 方法中的代码:

def var= "hello world"

println var

println var.class

你可以看到程序最后输出了 var 的实际类型为: java.lang.String

作为例外,方法参数和循环变量的声明不需要 def 

2、   不需要的 public

你可以把 main 方法前面的 public 去掉  实际上  groovy 中默认的修饰符就是 public  所以 public 修饰符你根本就不需要写,这点跟 java 不一样。

3、   不需要的语句结束符

Groovy 中没有语句结束符,当然为了与 java 保持一致性,你也可以使用 ; 号作为语句结束符。在前面的每一句代码后面加上; 号结束,程序同样正常运行 ( 为了接受 java 程序员的顽固习惯 ) 

4、   字符串连接符

 java 一样,如果你需要把一个字符串写在多行里,可以使用 + 号连接字符串。代码可以这样写:

       def var= "hello " +

       "world" +

       ",groovy!"

当然更 groovy 的写法是:

       def var= """hello

       world

       groovy! """

三个  号之间不在需要 + 号进行连接(不过字符串中的格式符都会被保留,包括回车和 tab )。

5、   一切皆对象

听起来象是“众生平等”的味道,事实上 groovy 对于对象是什么类型并不关心,一个变量的类型在运行中随时可以改变,一切根据需要而定。如果你赋给它 boolean ,那么不管它原来是什么类型,它接受 boolean 值之后就会自动把类型转变为 boolean值。看下面的代码:

def var= "hello " +

       "world" +

       ",groovy!"

       println var;

       println var. class ;

       var= 1001

       println var. class

输出结果 

hello world,groovy!

class java.lang.String

class java.lang.Integer

 

var 这个变量在程序运行中  类型在改变。一开始给它赋值 String ,它的类型就是 String ,后面给它赋值 Integer ,它又转变为 Integer 

6、   循环

删除整个源文件内容,用以下代码替代:

       def var= "hello " +

       "world" +

       ",groovy!"

       def repeat(val){

             for (i = 0 ; i < 5 ; i++){

             println val

             }

       }

       repeat(var)

输出:

hello world,groovy!

hello world,groovy!

hello world,groovy!

hello world,groovy!

hello world,groovy!

注意循环变量 i 前面没有 def 。当然也没有 java 中常见的 int ,但如果你非要加上 int 也不会有错,因为从 Groovy1.1beta2 之后开始(不包括 1.1beta2 ), groovy 开始支持 java 经典的 for 循环写法。

此外,上面的 for 语句还可以写成:

             for (i in 0 .. 5 )

这样的结果是一样的。       

7、   String  Gstring

除了标准的 java.lang.String 以外(用  号括住), groovy 还支持 Gstring 字符串类型(用  号括住)。把上面的 for 循环中的语句改成:

             println "This is ${i}:${val}"

运行一下,你就会明白什么是 Gstring 

8、   范围

这个跟 pascal 中的“子界”是一样的。在前面的 for 循环介绍中我们已经使用过的 for (i in 0 .. 5 ) 这样的用法,其中的 0 ..5 就是一个范围。

范围 是一系列的值。例如  0..4  表明包含 整数 0  1  2  3  4  Groovy 还支持排除范围,“ 0..<4  表示 0  1  2 3 。还可以创建字符范围:“ a..e  相当于 a  b  c  d  e 。“ a..<e  包括小于 的所有值。

范围主要在 for 循环中使用。

9、   默认参数值

可以为方法指定默认参数值。我们修改 repeat 方法的定义:

def repeat(val,repeat= 3 ){

             for (i in 0 ..<repeat){

             println "This is ${i}:${val}"

             }

       }

可以看到, repeat 方法增加了一个参数 repeat (并且给了一个默认值 3 ),用于指定循环次数。

当我们不指定第 2 个参数调用 repeat 方法时, repeat 参数取默认值 3 

10、               集合

Groovy 支持最常见的两个 java 集合: java.util.Collection  java.util.Map 。前面所说的范围实际也是集合的一种(java.util.List )。

(1) Collection

Groovy 中这样来定义一个 Collection 

def collect =[ "a" , "b" , "c" ]

除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素:

collect .add( 1 );

       collect << "come on" ;

       collect [ collect . size() ]= 100 . 0

Collection 使用类似数组下标的方式进行检索:

       println collect [ font-size: 10pt; color: #66ccf

分享到:
评论

相关推荐

    example-ratpack-gradle-groovy-app:用Gradle构建的Groovy Ratpack应用示例

    跑步: ./gradlew installAppcd build/install/groovy-web-console/bin/groovy-web-console您的应用现在应该正在运行。 有关Gradle应用程序插件可以为您做什么的更多信息,请参见一章。开发时间重装Ratpack的主要...

    Dex:用JavaFX,Groovy和HTML5编写的数据可视化应用程序。-开源

    基础知识很容易学习,但是Dex以SQL和Groovy转换的形式提供了高级功能。 Dex将许多出色的可视化框架集成到一个一致的GUI包中。 这是一个早期版本,因此您可能会发现特定问题空间的功能差距。 在这种情况下,您可以...

    Spock - Up and Running

    作者Rob Fletcher将您从Spock基础知识转到高级主题,使用完整的集成示例。 通过本书的过程,您将构建一个简单的Web应用程序 - Squawker,允许用户发布短消息。 您将发现使用Spock的简单易懂的语言编写自动化测试更...

    Grails权威指南

     2.1 groovy和java的异同  2.1.1 相同点  2.1.2 不同点  2.2 基础知识  2.1.1 类声明 . 2.2.2 语言级断言(assertion)  2.2.3 groovy字符串  2.2.4 闭包(closures)  2.2.5 列表...

    XmiParser:用于验证和 HTML javadoc 生成的 XMI 模型解析框架

    基础 XmiParser 类执行 XMI 模型的所有解析,迭代模型中的每个元素和包,然后将它们添加到多个数据结构(包括查找表)以遍历模型。 HTML 生成器使用 javadoc 摘要页面和详细的类级页面生成类似 javadoc 的 HTML ...

    springboot学习思维笔记.xmind

    spring-boot-starter-groovy-templates spring-boot-starter-hateoas spring-boot-starter-hornetq spring-boot-starter-integration spring-boot-starter-jdbc spring-boot-starter-...

    java代理服务器源码-DDMQ:DDMQ是低延迟、高吞吐、高可用的分布式消息传递产品

    DDMQ是滴滴基础设施团队基于. DDMQ作为分布式消息中间件,为内部许多重要的大型分布式系统提供低延迟、高吞吐量和高可用的消息服务。 DDMQ 提供实时消息、延时消息和事务消息来满足不同的场景。 通过简单易用的Web ...

    第四方支付平台java源码-resume:我的专业工程导向简历

    快速行动、自动化一切、构建基础产品、指导人员、专注于增加业务收入 致力于精益产品开发的转型领导者 发明并实施了多个平台系统,直接负责 10+ 百万的收入并不断增长 在领先的云平台和技术方面拥有广泛的经验 AWS ...

    l3rt:ElasticSearch监视警报

    基础架构即代码友好。 将规则作为常规文件管理 规则配置的无限灵活性 内置的Web UI游乐场 要求功能 当前,l3rt支持以下来源作为输入: 弹性搜索 支持的输出: 想念你的吗? 添加或提交拉取请求 支持的规则: ...

    javaSE代码实例

    第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 2.2.3 char型 17...

    Spring 2.0 开发参考手册

    7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8....

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. 操作被...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    spring chm文档

    7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”advisor 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8....

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Spring中文帮助文档

    7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”通知器 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. ...

    Spring API

    7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”通知器 7.6. 简化代理定义 7.7. 使用ProxyFactory通过编程创建AOP代理 7.8. ...

Global site tag (gtag.js) - Google Analytics