(1)GroovyBean
Groovy很像JavaBean,不过省略了显示声明的获取和设置方法,提供了自动构造方法,并允许你用点号(.)引用成员变量。
class Character { private int strLength private int wisdom } def pc=new Character(strLength:10,wisdom:20) pc.strLength=30 println "STRLENGTH=["+pc.strLength+"] WISDOM=["+pc.wisdom+"]" 输出为: STRLENGTH=[30] WISDOM=[20](2)安全解引用操作符
Groovy引入了安全解引用运算符,用?.符号帮你去掉一些套路化的"如果对象为null"检查代码。在使用这个符号时,Groovy引入了一个特殊的null结构,表示“什么也不做”,而不是真的引用null。
class Person { private String name; private Integer age; } people=[null,new Person(name:"billLee",age:55)] for(Person person:people) { println person?.name+" age="+person?.age } 输出: null age=null billLee age=55(3)猫王操作符
用猫王操作符(?:)可以把带有默认值的if/else结构写的及其短小。用猫王操作符不用检查null,也不用重复变量。
String agentStatus="Active" String status=agentStatus?:"Inactive" 结果: Result: Active(4)增强型字符串
Groovy有一个String类的扩展类GString,它比Java中标准的String强,也更灵活。
GString必须用双引号定义。对于开发人员来说,使用它最大的好处是可以包含可在运行时计算的表达式(用${})。如果GString随后被转换为普通字符串(比如传给了println),GString中的表达式都会被替换为其计算结果。
String name="bill lee"; def dist=3*9; String str="${name} and dist = ${dist}" Result: bill lee and dist = 27GString的底层并不是Java中的String!尤其不应该把GString作为映射中的键,或者比较它们是否相等,结果是不可预料的。
(5)函数字面值
函数字面值表示一个可以当做值传递的代码块,也可以像操作任何值一样操作。可以当做参数传递给方法,可以给变量赋值。
传统实现:
class StringUtils { static String sayHello(String name) { if(name=="Tom"||name=="Jerry") { "Hello Cat and Mouse "+name+"!" } else { "Hello funs "+name+" !" } } } println StringUtils.sayHello("Tom") println StringUtils.sayHello("bsr1983") 输出: Hello Cat and Mouse Tom! Hello funs bsr1983 !函数字面值实现
def sayHello= { name->if(name=="Tom"||name=="Jerry") "Hello Cat and Mouse "+name+"!" else "Hello funs "+name+" !" } println sayHello("Tom") println sayHello("bsr1983") 输出与上面的传统实现一样(6)内置的集合操作
each:遍历集合,对其中每一项应用函数字面值
collect:收集在集合中每一项上应用函数字面值的返回结果(相当于其他语言map/reduce中的map函数)
inject:用函数字面值处理集合并构建返回值(相当于其他语言map/reduce的reduce函数)
findAll:找到集合中所有与函数字面值匹配的元素
max:返回集合中的最大值
min:返回集合中的最小值
示例代码:
moviesTitle=["Seven","SnowWhite","Die Hard"] moviesTitle.each({x->println x}) 输出 Seven SnowWhite Die Hard moviesTitle=["Seven","SnowWhite","Die Hard"] moviesTitle.each({println it})it变量可以用在单参的函数字面值中。
(7)对正则表达式的内置支持
~:创建一个模式(创建一个编译的Java Pattern对象)
=~:创建一个匹配器(创建一个Java Matcher对象)
==~:计算字符串(相当于在Pattern上调用Java match()方法)
示例代码
def pattern=/1010/ def input="1010" def matcher=input =~ pattern if(input==~ pattern) { input=matcher.replaceFirst("0101") println input } 输出 0101 ("billlee 31"=~/(\w+) (\d+)/).each{full,name,age->println "$name is $age year old"} 输出 billlee is 31 year old(8)简单的XML处理
Groovy有构建器的概念,用Groovy原生语法可以处理任何树型结构的数据,包括HTML、XML和JSON。
1.创建XML
def writer=new StringWriter() def xml=new groovy.xml.MarkupBuilder(writer) xml.person(id:2) { name "billlee" age 31 } println writer.toString(); 输出 <person id='2'> <name>billlee</name> <age>31</age> </person>2.创建Json
def builder=new groovy.json.JsonBuilder() def root=builder.people{ person { name "billlee" age 31 } } println builder.toString() println builder.toPrettyString() def s=new StringWriter() builder.writeTo(s) println s.toString() 输出: {"people":{"person":{"name":"billlee","age":31}}} { "people": { "person": { "name": "billlee", "age": 31 } } } {"people":{"person":{"name":"billlee","age":31}}}3.解析XML
Groovy有几种解析XML输入的办法。
XMLParser:支持XML文档的GPath表达式
XMLSlurper:跟XMLParser类似,但以懒加载的方式工作
DOMCategory:用一些语法支持DOM的底层解析
示例代码:
class XmlExample{ static def PERSON= """ <person id='2'> <name>billlee</name> <age>31</age> </person> """ } class Person{def id;def name;def age} def xmlPerson=new XmlParser().parseText(XmlExample.PERSON) Person p=new Person(id:xmlPerson.@id, name:xmlPerson.name.text(), age:xmlPerson.age.text()) println "id=${p.id} name=${p.name} age=${p.age}" 输出 id=2 name=billlee age=31 注:"""是Groovy中用来定义跨行字符串的。
相关推荐
在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...
Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在编写脚本、构建工具、Web应用以及企业级应用程序开发中都有广泛的应用。 **一、Groovy基础** 1. **语法简洁**: ...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...
通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...
Groovy语法借鉴了多种语言的特性,如Python、Ruby和Java,这使得Java开发人员能够轻松上手。Gradle则是一种强大的构建自动化工具,广泛用于Java、Android以及其他JVM语言的项目,它允许通过Groovy或Kotlin DSL(领域...
学习Scala,你需要理解其静态类型的特性、模式匹配、 Actors模型以及类型系统,包括高阶函数、特质(traits)和不可变数据结构。 Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与...
读书笔记:函数式编程 scala,java8,groovy 学习
读书笔记:Groovy 程序设计学习
这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...
**Gradle 学习笔记** Gradle 是一种高级的构建工具,它与 Maven 类似,主要负责管理和自动化软件项目的构建过程,包括管理依赖、编译、打包和部署等任务。然而,Gradle 提供了比 Maven 更高的灵活性,因为它的构建...
在《Spring Boot》源码学习笔记中,我们可以深入理解其内部工作机制,包括自动配置、起步依赖、命令行接口(CLI)以及如何集成各种组件如JSP等。JSP(JavaServer Pages)是一种用于动态创建网页的技术,Spring Boot ...
在Groovy-chenyun2000-mht.rar压缩包里的"MHT"文件可能是Groovy或Grails相关的教程、讲座笔记或者案例研究,用户可以离线阅读这些资料,深入理解Groovy语言和Grails框架。 Groovy的主要特点包括: 1. **简洁语法**...
通过阅读《Java JDK 7学习笔记》,你可以深入了解这些特性的具体使用和背后的设计理念,进一步提高你的Java编程技能。这份笔记不仅适合初学者,也对有经验的开发者有所帮助,因为它涵盖了从基础到高级的各种主题,是...
在学习Java的过程中,理解并掌握JDK 6的关键特性是非常重要的。以下是一些关键知识点: 1. **自动装箱与拆箱**:JDK 6引入了自动装箱和拆箱功能,使得基本类型和其对应的包装类之间可以无缝转换。例如,`Integer i ...
《良葛格java jdk 5.0学习笔记》是一份专为初学者设计的Java编程教程,旨在帮助读者深入理解和掌握Java JDK 5.0版本的关键特性与技术。这份笔记包含了丰富的章节内容,覆盖了从基础到进阶的各个层面,通过详细讲解和...
Gradle 学习笔记简书1 本文档将对 Gradle 的基本命令、Groovy 语言基础和闭包委托进行详细的讲解。 Gradle 命令 ------------ ### 1. 生成 Wrapper 使用 `gradle wrapper` 命令可以生成 Wrapper。 ### 2. 打印...