Groovy 试图尽可能让Java 开发人员感觉到很自然,遵循最少惊讶的原则,特别是对于来自Java背景的开发人员。
这里列出了Java 和 Groovy之间主要的不同之处。
1. 默认 import
在Groovy中,下面这些包和类会自动 impot:
- java.io.*
- java.lang.*
- java.math.BigDecimal
- java.math.BigInteger
- java.net.*
- java.util.*
- groovy.lang.*
- groovy.util.*
2. 常见的差别
1) ==
表示equals,是相等的意思,可以用在所有的类型上。在Java中,== 表示基本类型相等,或表示同一个对象。在Groovy中, is() 方法可以判断是否一个对象,例如: foo.is(bar)。如果比较的是null,这种方法并不会起到作用,但是仍然可以使用 == :foo == null 。
2) in
是一个关键字,用在for 循环中:for(i in len).
3) 声明一个数组
时,这样的写法是错误的:int [] a = {1,2,3};
要写成:int [] a = [1,2,3]
4) 循环
可以写成这个样子:for (int i=0; i < len; i++) {...} ,但是计数变量只能使用一个,可以用下面的写法:
for (i in 0..len-1) {...}
for (i in 0..<len) {...}
len.times {...}
3. 需要注意的差别
- 分号
是可选的,你可以选择是否使用,但是如果把几个语句放在一行,就必须使用分号。
- return
关键字是可选的。
- 可以在 static 方法内使用 this
关键字(这时this引用当前的class)。
- 方法和类默认是public
的。
- 在 Groovy 中,protected
和 Java中的 protected 的意思相同,例如可以同一个包内可以访问友好成员,继承类也可以看见父类的 protected 成员。
- Groovy 不支持内部类,在大多数情况下,可以使用 闭包
(closure
)代替。
- Groovy 编译器不检查方法语句中的 throws
语句,因为 在Groovy中,检查checked
和 unchecked
异常没有差别。
- 使用未声明的成员,或传递类型错误的参数,将不会遇到像在java中的编译错误。
4. 不常见的差别
Java程序员习惯使用分号来结束语句,并且在Java中没有闭包,在类声明中通常也会有一个类初始化模块,例如:
class Trial {
private final Thing thing = new Thing();
{ thing.doSomething () };
}
许多Groovy程序员避免使用分号(也有其他人总是使用分号--这取决于编码风格),但是如果把上边的代码写成下面的样子也会导致问题:
class Trial {
private final Thing thing = new Thing()
{ thing.doSomething () }
}
这会抛出一个 MissingMethodException异常!
这里的问题是,这种情况下的新行代码不能结束一个语句,下面的代码块是一个闭包,被当作一个参数传递给Things() 构造器。很奇怪是吧,但是这是真的。如果真的需要通过这种方法使用实例初始化模块,就必须使用一个分号:
class Trial {
private final Thing thing = new Thing();
{ thing.doSomething () }
}
5. 新加入到Groovy中但Java不具备的特性
- 闭包(closures)
- lists
和 maps
原生语法
- GroovyMarkup
和 GPath
的支持
- 正则表达式
的原生支持
- 各种各样的循环方法 和 强大的 switch
语句
- 动态和静态类型的支持--可以在方法、域和变量声明中省略类型声明。
- 可以在字符串中嵌入表达式。
- 在JDK中添加了许多帮助方法。
- 编写 beans、beans的属性,以及添加事件监听器的语法更为简单。
- 使用?.
操作符实现安全的对象导航,例如:"variable?.field", "variable?.method()",不用在嵌入 if 去检查空值了。
Reference: http://groovy.codehaus.org/Differences+from+Java
分享到:
相关推荐
标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...
Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx
本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。 一、作为嵌入式脚本 Java 6引入了JSR 223(Scripting for the Java Platform),允许在Java程序中直接执行脚本语言。...
本文将详细讲解如何在Java应用程序中调用Groovy脚本,实现从MongoDB数据库中读取并实时运行Groovy脚本,以及其背后的原理和优势。 首先,Groovy是一种与Java高度兼容的脚本语言,它可以无缝地与Java代码集成,共享...
总结起来,Groovy与Java的主要区别在于其更灵活的语法、丰富的内置功能(如闭包和元编程)、以及对脚本编写的支持。这些特性使Groovy在快速原型开发、脚本编写以及需要高度动态性的场合中成为理想的选择,同时在处理...
Groovy是一种基于JVM的动态编程语言,它与Java有着紧密的联系,可以直接调用Java的类库。...通过阅读和运行这些示例,你将能够深入理解Groovy和Java之间的互操作性,并掌握在实际开发中如何有效利用这一特性。
Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...
SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...
5. **GDK (Groovy Development Kit)**:Groovy为Java集合、字符串和其他基本类型提供了丰富的扩展方法,称为Groovy Development Kit。这些方法使得操作数据更加便捷,例如: ```groovy def list = [1, 2, 3] list...
综上所述,这个项目可能是为了帮助开发者理解和实践如何在Java项目中集成和运行Groovy,以便更好地利用Groovy的动态性和简洁性,同时为实现定时任务和动态代码执行场景做准备。通过学习和实践这个项目,你可以掌握...
- **代码互操作性**:Groovy和Java之间可以直接相互调用方法和构造器,这种无缝的互操作性为项目带来了极大的灵活性。 - **迁移路径**:对于希望逐步迁移到Groovy的项目,可以从引入简单的Groovy脚本开始,逐渐扩大...
本文将深入探讨如何基于Groovy实现Java脚本的动态编译、部署和发布,并且介绍如何通过Groovy脚本直接调用Dubbo接口,从而提高开发效率和灵活性。 Groovy是一种基于Java平台的强大的动态编程语言,它具有简洁的语法...
总的来说,这个压缩包对于Java和Groovy开发者来说是一个宝贵的资源,可以深入理解Groovy语言的实现细节,了解其与Java 8的兼容性,甚至参与到Groovy的改进和扩展工作中去。通过分析源代码,我们可以学习到动态语言的...
这篇博客文章“Java调用Groovy”可能会探讨如何在Java代码中执行Groovy脚本,以及这样做的优势和实践方法。 首先,Java可以通过`GroovyShell`或`GroovyScriptEngine`来执行Groovy脚本。`GroovyShell`是Groovy提供的...
什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java ...Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)
Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合...
java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差不大,值得推荐。 文件内部...
Groovy 是用于Java虚拟机的一种敏捷的动态语言,它结合了Python、Ruby和Smalltalk的许多强大的特性。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多...
该项目是一套基于Groovy与Java融合的Groovy学习实践之路源码设计,总计包含91个文件,其中Groovy文件71个,XML文件6个,Java文件4个,Markdown...该套源码旨在帮助用户深入理解和掌握Groovy语言及其与Java的交互使用。
《Groovy编程:Java开发者的入门指南》是Kenneth Barclay和John Savage为Java开发者编写的关于Groovy语言的详细介绍。此书首次出版于2006年,由Morgan Kaufmann Publishers出版,该出版社隶属于Elsevier集团。本书...