用Groovy思考第二章 Groovy语言的关键特征
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
1. 断言Assertion
断言:用于判断预期的条件是否为真。
例子:
def list = [1,2,'x']
assert list.size()==3
2. AST转换期使用的注释
AST转换的注释:Groovy提供了在AST转换时的注释,比如@Singleton注释。
当Groovy编译器编译Groovy脚本和类时,Groovy解析器(编译器的前端)会在为类创建最终的字节码之前创建一个抽象语法树AST,AST是源码在内存中的表现形式,比较类、方法、属性、语句、变量等。
@Singleton
class SomeSingleton
{
// ...
}
@Singleton注释指示编译器创建一个私有的构造函数和一个静态方法,在AST转换时产生一个单态实例。
3. 建立器Builder
在Java中要生成一个最简单的XML文档都是很费劲、费时的。Groovy通过内建的Builder类简化了XML的生成。如下面的例子所示:
def builder = new groovy.xml.MarkupBuilder()
builder.employee{
name 'John Doe'
gender 'male'
}
执行后输出:
<employee>
<name>John Doe</name>
<gender>male</gender>
</employee>
Result: employee
4. 闭包Closure
闭包:Groovy的闭包是一个可重用块,包含在大括号{}中,闭包可以被赋值给属性或变量,或作为参数传递给方法。
例:
def name = 'Chris'
def printClosure = { println "Hello, ${name}" }
printClosure()
name = "Li Sir"
printClosure()
执行后,代码输出:
Hello, Chris
Hello, Li Sir
5. GDK
Groovy是由完整的Groovy语言、Groovy指定的库和GDK共同组成。GDK是现有JDK基础上的Groovy扩展。GDK = Groovy JDK
详细内容可参考:http://groovy.codehaus.org/groovy-jdk/
6. 元编程Metaprogramming
元编程:意味着写一个程序来创建、查询和操纵其它的程序或者是自身。元编程既可以出现在编译时,也可出现在运行时。
编译时元编程的契约是字节码的生成。在Groovy中,编译时元编程使得你可以在产生最终的字节码之前修改AST。
在Groovy中,运行时的元编程是使用元对象协议实现的。
例:
String.metaClass.firstUpper = {->
return delegate[0].toUpperCase() + delegate[1..delegate.length()-1]
}
println "iiii".firstUpper()
执行代码,输出:
Iiii
7. 本地JSON支持
本地JSON支持:JSON是轻量级的数据交换格式,用于替代XML,作为网络上结构化数据的传输和序列化。
如下面的读JSON例子:
import groovy.json.JsonSlurper
def slurper = new JsonSlurper()
def result = slurper.parseText('{"person":{"name":"John Doe","age":40,"cars":["BMW","FORD"]}}')
println result.person.name
println result.person.age
println result.person.cars.size()
println result.person.cars[0]
println result.person.cars[1]
执行代码的结果如下:
John Doe
40
2
BMW
FORD
8. 本地支持Lists和Maps集合
Groovy增强和改进了Java集合类的声明语法和附带的方法。Groovy为List和Map包含了第一级的构造,还添加了新集合类型:Range。
例子:
authors = ['Vishal','Chris','Joseph','Jim']
println authors
println authors[0]
程序输出:
[Vishal, Chris, Joseph, Jim]
Vishal
9. 本地支持正则表达式
10. Groovy只有对象
在Groovy中,一切都是对象,没有原子类型。
在Groovy中,所有的操作符都是方法调用。
11. 字符串插值
字符串插值:是字符串内替代表达式或变量的一种能力。Java不支持字符串插值,必须手动的连接值。
例子:
def lastName = "Layka"
def fullname = "Vishal ${lastName}"
println fullname
输出:
Vishal Layka
12. 静态和动态类型
静态和动态类型:Groovy在声明变量时支持静态和动态类型。动态类型使用def关键词。
比如:
def var = 10
var = 'It's a String"
可见,定义的类型可变。
13. 静态类型检查
静态类型检查:Groovy 2.0引入了@TypeChecked注释,它可以对需要进行静态类型检查的方法或类进行注释。
import groovy.transform.TypeChecked
void doIt(){}
@TypeChecked
void test(){
dott() //compilation error:cannot find matching method dott()
}
程序运行时提示错误信息:
1 compilation error:
[Static type checking] - Cannot find matching method ConsoleScript15#dott(). Please check if the declared type is right and if the method exists.
at line: 5, column: 3
14. 静态编译
静态编译:Groovy 2.0通过@CompileStatic注释使得静态编译成为可能。此模式消除了运行时的动态调度的开销。
例如:
import groovy.transform.CompileStatic
@CompileStatic
int doubleIt(int num){
2*num
}
assert doubleIt(3) == 6
使用@CompileStatic注释将会静态的编译代码,产生的字节码和Java字节码运行的一样快。此注释可以注释类和方法。
15. 可选语法
访问修饰符:在Groovy中,类无访问修饰符则被认为是public;而属性无访问修饰符则认为是private。方法无访问修饰符则认为是public。
而在Java中,方法和域默认是包访问范围。
16. 检查异常
检查异常:在Groovy中,检查异常无需声明或捕获,Groovy会自动封装异常作为RuntimeException。
17. Getters和Setters
Groovy引入了GroovyBeans,它支持属性的直接使用,与public域相似。
18. 导入语句
默认情况下,Groovy总是导入以下的包:
groovy.lang.*
groovy.util.*
java.lang.*
java.util.*
java.util.regex.*
java.net.*
java.io.*
java.math.BigDecimal, java.math.BigInteger
19. 圆括号()和分号
圆括号()和分号:在Groovy中都是可选的。
20. 返回类型和return关键字
返回类型和return关键字:它是方法中的最后一条语句,而且return关键字是可选的。最后一条语句的结果值总是会返回方法调用。
如果def关键字被用于返回类型,那么Groovy会在运行时动态地计算返回类型——取决于具体返回的值。
例如:
def greeting(){
result = "Hello world"
result
}
println greeting()
输出结果为:
Hello world
分享到:
相关推荐
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有...
3.兼容 Java:Groovy 可以与 Java 语言混合使用,Groovy 代码可以调用 Java 代码,反之亦然。 开发环境 1. JDK 1.5 以上 2. Eclipse + Groovy 插件(支持 Groovy 1.5.7) 创建 Groovy 项目 1. 新建一个 Java ...
本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。 一、作为嵌入式脚本 Java 6引入了JSR 223(Scripting for the Java Platform),允许在Java程序中直接执行脚本语言。...
完成文本界面的程序框架"这个主题中,我们将深入探讨如何使用Groovy构建一个简单的文本界面程序。 首先,让我们了解Groovy的基本语法特点。Groovy允许开发者使用更接近自然语言的语法,比如省略分号和大括号。例如...
无论是新手还是经验丰富的开发者,都能通过学习Groovy和使用GroovyEclipse插件提升工作效率。通过阅读《Groovy经典入门》这本书和实践其中的示例,你可以快速掌握Groovy语言并开始利用其强大的功能。
Java作为一种广泛使用的静态类型编程语言,有时候可能无法满足所有需求,特别是在处理动态代码执行和热部署时。此时,Groovy这种基于JVM的动态语言就发挥了重要作用。本文将详细讲解如何在Java应用程序中调用Groovy...
安装Groovy后,开发者可以使用Groovy Shell(groovysh)进行交互式编程,或者编写Groovy脚本执行任务。Groovy的语法简洁明了,支持闭包和动态类型,使得开发效率大大提高。此外,Groovy还可以用于构建脚本、Web开发...
在"项目演示"部分,我们将看到如何使用Groovy进行实际的项目开发。这可能包括创建Groovy脚本,编写简单的应用程序,或者利用Groovy作为构建工具(如Gradle)的脚本语言。项目演示通常会涵盖一个具体的应用场景,例如...
4. 测试:Spock测试框架使用Groovy编写,提供了富有表达力的测试语句,简化了测试代码的编写。 5. 容器管理:在Apache Kafka、Cassandra等大数据处理系统中,Groovy用于配置和管理容器。 四、Groovy与Java的交互 ...
在第二部分,Groovy in Action详细探讨了Groovy的高级特性,如元编程和领域特定语言(DSL)。元编程允许在运行时修改或扩展程序的行为,这在构建灵活的框架和工具时非常有用。DSL则允许开发者创建易于理解的、定制化...
Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...
Groovy 在 Spring 中的简单使用 Groovy 是一种敏捷的动态语言,用于 Java 虚拟机,可以与 Java 代码无缝集成。它的类 Java 语法对于 Java 开发人员来说很自然,且可以作为纯粹的脚本语言使用。在 Spring 中动态使用...
在groovy中实现DSL领域特定语言的技术。 版权声明: 本系列文章是从原著《Groovy For Domain-Specific Languages》(原作者: Fergal Dearle)中翻译而来,从中加入了一些本人自己的读书笔记和理解。本系列文章不为...
apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...
### Groovy Script 入门知识点详解 #### 一、Groovy脚本简介 Groovy是一种灵活的面向对象的编程语言,它运行在Java平台上。由于其语法简洁且与Java高度兼容,...希望本文能够帮助大家更好地理解和使用Groovy脚本。
在使用Groovy 1.6.5时,开发人员可以利用其动态性来简化代码,比如通过元编程特性动态修改类的行为,或者使用闭包(closures)实现函数式编程风格。此外,Groovy还与Java无缝集成,可以调用所有Java库,并且Java代码...
总的来说,Groovy SDK 4.0.3是一个完整的开发环境,它为Groovy开发者提供了编写、测试和运行代码所需的所有工具,是学习和使用Groovy语言的重要资源。通过安装和配置这个SDK,你可以开始探索Groovy的动态世界,体验...